• Jueves 30 de Mayo de 2024, 17:42

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Vatoicc

Páginas: [1] 2 3
1
C++ Builder / Re: Editar Todos Los Objetos Contenidos En Otro
« en: Martes 15 de Mayo de 2007, 03:41 »
Checa esto

Tal vez puedas usar algo de esta discusion, para que no este tan a lo bruto

2
C++ Builder / Re: Funciones Q Retornan Valores En Builder
« en: Domingo 6 de Mayo de 2007, 04:33 »
Copie y pegue tu codigo, y no se si el error que te marca es por que pusiste retun en vez de return

Citar
retun procedencia;

Pero corrigiendo eso, la sintaxis esta bien, yo lo probe en un boton como tu decias, y si funciona

Código: Text
  1.  
  2. bool procede(bool procedencia)
  3. {
  4.    procedencia=false;
  5.    return procedencia;
  6. }
  7.  
  8. void __fastcall TForm1::Button1Click(TObject *Sender)
  9. {
  10.    ShowMessage( BoolToStr( procede(true),true ) );
  11. }
  12. //---------------------------------------------------------------------------
  13.  
  14.  

y lo que comento loki160685, seria solo para hacer a la funcion parte de la clase TForm1, y aunque de las dos manera funcionaria igual, creo que seria mas correcto que sea miembro de la clase

3
C++ Builder / Re: Escribir En Otra Aplicacion
« en: Domingo 6 de Mayo de 2007, 04:21 »
Te dire que funciono bien,  este es el codigo:

Código: Text
  1.  
  2.    HWND P = GetWindow( HandleProg,GW_CHILD );
  3.    SendMessage( P,WM_CHAR,'r',0 );
  4.  
  5.  

La verdad no se cuanto tiempo estube intentando solucionar el problema, y crei que ya no hiban a responer mi mensaje, asi que te agradesco mucho la atencion que tubiste en  hacerlo.

Pero te dire que solucione el problema de una mejor forma, el programa que queria manipular es para grabar audio en mp3, y tenia la intencion de correrlo de manera oculta detras de mi programa para mandar "teclas virtuales" con las hotkeys que maneja el programa para la grabacion de audio, pues queria incluirle un modulo de grabacion de audio a mi programa, para que fuera un sistema integral, que hiciera todo.

Y buscando un poco sobre ese programa de mp3, vi que usa un dll llamado lame, que es un codificador de mp3 de codigo libre. Pero ahi otro problema, no sabia manejar dll  :blink: .
Y despues de mucho buscar en este foro y en todo lo que me arrojara google, logre hacer una funcion para convertir wav a mp3.
Y mi programa, ahora es un sistema mas completo.

Pero nuevamente te agradesco la atencion que te tomaste

4
C++ Builder / Re: Una Gran Duda
« en: Domingo 15 de Abril de 2007, 22:28 »
si estas queriendo habrir imagenes JPG, necesitas incluir la libreria jpeg.

#include "jpeg.hpp"

5
C++ Builder / Escribir En Otra Aplicacion
« en: Miércoles 21 de Marzo de 2007, 01:35 »
Estoy tratando de escribir en otra aplicacion, desde mi programa, e intentado usar SendMessage de la API de windows, pero no me funciona, no se si este haciendo lo correcto

Primero habro la aplicacion (Bloc de notas) y guardo el HANDLE

Código: Text
  1.  
  2. void __fastcall TForm1::Button1Click(TObject *Sender)
  3. {
  4.  
  5.    AnsiString Programa = "C:\\WINDOWS\\NOTEPAD.EXE";
  6.    AnsiString Wname = "Sin título - Bloc de notas";
  7.    
  8.    char WinName[80];
  9.    char WinClass[80];
  10.  
  11.    //HandleProg esta declarada dentro de la clase de la forma (HWND HandleProg;)
  12.    ShellExecute(HandleProg,"open", Programa.c_str() , NULL ,NULL,SW_SHOWNORMAL );
  13.  
  14.    while(1)
  15.    {
  16.       HandleProg = FindWindow( 0,Wname.c_str() );
  17.       if( HandleProg != NULL )
  18.          break;
  19.    }
  20.  
  21.    //Esto es solo para ver el nombre de la clase y el titulo del programa
  22.    GetWindowTextA( HandleProg ,WinName,sizeof( WinName )-1 );
  23.    GetClassNameA( HandleProg ,WinClass,sizeof( WinClass ) - 1 );
  24.  
  25.    Label_WinClass->Caption = WinClass;
  26.    Label_WinName->Caption = WinName;
  27. }
  28. //---------------------------------------------------------------------------
  29.  
  30.  

Ya que tengo guardado el HANDLE del programa, lo puedo cerrar, por lo que
compruebo que el HANDLE es correcto

Código: Text
  1.  
  2. void __fastcall TForm1::Button2Click(TObject *Sender)
  3. {
  4.    SendMessage( HandleProg,WM_CLOSE,0,0 );
  5. }
  6. //---------------------------------------------------------------------------
  7.  
  8.  

Pero no puede escribir un caracter :s

Código: Text
  1.  
  2. void __fastcall TForm1::Button3Click(TObject *Sender)
  3. {
  4.    SendMessage( HandleProg,WM_CHAR,'r',0 );
  5. }
  6. //---------------------------------------------------------------------------
  7.  
  8.  

Lo que e logrado hacer con el mensaje WM_CHAR es escribir en un Edit o un Memo, pero solo dentro de mi aplicacion

Código: Text
  1.  
  2.    SendMessage( Edit1->Handle,WM_CHAR,'r',0 );
  3.    SendMessage( Memo1->Handle,WM_CHAR,'r',0 );
  4.  
  5.  

Por eso creo que el mensaje WM_CHAR es lo que estoy buscando, pero creo que el error esta en el parametro Handle de la funcion SendMessage.
Creo que tendria que poner el Handle del Memo que tiene el Bloc de notas, pero eso si no se como obtenerlo :s
E intentado usar FindWindowEx() pero no e tenido exito.

Si alguien puede darme un norte se los agradeceria muchisimo.
O algun codigo donde manejen este tipo de funciones del APIWin para comunicarce con otras aplicaciones tambien se le agradece

6
C++ Builder / Re: Guardar Datos Dentro Del Programa
« en: Viernes 2 de Marzo de 2007, 22:09 »
y como accedes al registro de windows? para escribir, leer, y modificarlo

7
C++ Builder / Re: Fechas Literales
« en: Jueves 18 de Enero de 2007, 21:40 »
Código: Text
  1.  
  2.    TDate Fecha = Fecha.CurrentDate();
  3.    AnsiString FechaLiteral = Fecha.FormatString("d - mmm - yyyy");
  4.  
  5.  

Checa la ayuda de la funcion FormatString para que puedas ver todas las posibilidades que tienes.

8
C++ Builder / Re: Como Poder Anular El Ctrl+alt+sup
« en: Jueves 4 de Enero de 2007, 21:14 »
Orale, muy buen codigo...
Donde aprendes a hacer ese tipo de solicitudes al SO?

9
C++ Builder / Re: Gaphics
« en: Sábado 16 de Diciembre de 2006, 04:33 »
esa?

10
C++ Builder / Re: Crear Documento Html
« en: Martes 12 de Diciembre de 2006, 18:48 »
Pues en una aplicación que hice, necesitaba generar un reporte en formato HTML, pero no encontré un componente para hacerlo, asi que la solución que encontre, fue generar el codigo HTML en un Memo, y guardarlo con extensión HTML.

La verdad fue muy buen reto hacer un codigo en C++ que generara codigo HTML, y mas por que no sabia programar en HTML, pero en la red hay tutoriales muy buenos. Y al final obtuve el resultado que esperaba.

Fue algo asi:

Código: Text
  1.  
  2.    TStringList *ReporteHTML = new TStringList();
  3.    ReporteHTML->Clear();
  4.       //----Poner la cabecera
  5.       ReporteHTML->Append("<HEAD>");
  6.       ReporteHTML->Append("<TITLE>SÍNTESIS INFORMATIVA</TITLE>");
  7.       ReporteHTML->Append("</HEAD>");
  8.  
  9.       //----Poner el cuerpo
  10.       ReporteHTML->Append("<BODY><FONT FACE= \"MS Sans Serif\"");
  11.  
  12.       //Titulo
  13.       ReporteHTML->Append("<CENTER><H2>Síntesis Informativa</H2><H4>FECHA: "+FechaActual.FormatString("ddd d/mmm/yy"</H4></CENTER>");
  14.       ReporteHTML->Append("<p><A NAME =\"TopMenu\">FILTRADO POR: Medios Electrónicos</A>");
  15.       ReporteHTML->Append("<HR>");
  16.  
  17.       //Enlaces a Radio
  18.       ReporteHTML->Append("Radio<UL>");
  19.       for( int i = 0; i < NombreRadio->Count; i++ )
  20.       {
  21.          AnsiString Ancla = CrearAncla(NombreRadio->Strings[i]);
  22.          AnsiString NAncla = NombreRadio->Strings[i];
  23.          ReporteHTML->Append("<LI><A HREF = #"+Ancla+">"+NAncla+" ("+IntToStr(ListaRadio[i]->Count)+")</A>");
  24.       }
  25.       ReporteHTML->Append("</UL>");
  26.  
  27.       //Enlaces a Tv
  28.       ReporteHTML->Append("Tv<UL>");
  29.       for( int i = 0; i < NombreTv->Count; i++ )
  30.       {
  31.          AnsiString Ancla = CrearAncla(NombreTv->Strings[i]);
  32.          AnsiString NAncla = NombreTv->Strings[i];
  33.          ReporteHTML->Append("<LI><A HREF = #"+Ancla+">"+NAncla+" ("+IntToStr(ListaTv[i]->Count)+")</A>");
  34.       }
  35.       ReporteHTML->Append("</UL>");
  36.  
  37.       //Enlaces a Internet
  38.       ReporteHTML->Append("Internet<UL>");
  39.       for( int i = 0; i < NombreInternet->Count; i++ )
  40.       {
  41.          AnsiString Ancla = CrearAncla(NombreInternet->Strings[i]);
  42.          AnsiString NAncla = NombreInternet->Strings[i];
  43.          ReporteHTML->Append("<LI><A HREF = #"+Ancla+">"+NAncla+" ("+IntToStr(ListaInternet[i]->Count)+")</A>");
  44.       }
  45.       ReporteHTML->Append("</UL>");
  46.  
  47.  

El codigo no esta completo, y te aseguro que si lo compilas te va agenerar un mil de errores, pero es solo para que te des una idea de lo que hize, y como fui armando poco a poco la pagina HTML con datos que tenia almacenados en archivos que puse en variables.

Al final de tu codigo, simplemente tienes que guardar el contenido del TStringList como HTML

Código: Text
  1.  
  2.    ReporteHTML->SaveToFile("c:\\Reporte.HTML");
  3.  
  4.  

Te adjunto un ejemplo del reporte que se genera.

Como vez, es una opción muy engorrosa, pero si alguien mas tiene una mejor opción, tambien me interasa saberla, pues podria mejorar el aspecto de mi reporte

11
C++ Builder / Re: Comparar Fechas
« en: Miércoles 6 de Diciembre de 2006, 21:09 »
Seria mas facil si lo haces con el componente DateTimePicker en vez de un Edit. Te adjunto un ejemplo, espero que te sirva.

Pero la verdad no entiendo por que hacer una busqueda de esa manera :huh: .
O que es lo que quieres hacer?

12
C++ Builder / Re: Cannot Focus A Disabled Or Invisible Window
« en: Viernes 10 de Noviembre de 2006, 04:23 »
Creo que error te lo marca por que estas tratando de cambiar una propiedad de una forma que esta invisible, o modificar un componente visual de esa forma

13
C++ Builder / Re: Variables
« en: Miércoles 8 de Noviembre de 2006, 22:43 »
Pero lo que el necesita es una variable que recuerde el valor cada que se llame a
qr1NeedData.

Lo que tendria que hacer es declarar la variable en la clase Form3 e inicializarla en el evento OnCreate, o poner una variable estatica en qr1NeedData

Código: Text
  1.  
  2. void __fastcall TForm3::qr1NeedData(TObject *Sender, bool &MoreData)
  3. {
  4.    static int i = 0     //aqui iguales al primer valor que quieres que tome i
  5.                            //y este valor solo se pone la primera vez, la siguiente vez
  6.                            //que se llame a esta funcion, "recordara" el valor anterior
  7.    MoreData = i < Form1->sg->RowCount;
  8.    if (MoreData)
  9.    {
  10.       QRLabel1->Caption=Form1->sg->Cells[1][i];
  11.       QRLabel2->Caption=Form1->sg->Cells[2][i];
  12.       QRLabel3->Caption=Form1->sg->Cells[3][i];
  13.       QRLabel4->Caption=Form1->sg->Cells[4][i];
  14.       QRLabel5->Caption=Form1->sg->Cells[5][i];
  15.       QRLabel6->Caption=Form1->sg->Cells[6][i];
  16.       QRLabel7->Caption=Form1->sg->Cells[7][i];
  17.    }
  18.    i++;
  19. }
  20.  
  21.  

14
C++ Builder / Re: Exportar A Excel Des De Un Listbox
« en: Martes 7 de Noviembre de 2006, 02:58 »
Checa esta discuciòn

Excel

15
C++ Builder / Re: Decifrar Comandos En Un Memo
« en: Viernes 27 de Octubre de 2006, 05:08 »
Aqui te va un programa sencillo, para ver si te sirbe...

Espero que si, y luego me cuentas como te fue

16
C++ Builder / Re: Decifrar Comandos En Un Memo
« en: Viernes 27 de Octubre de 2006, 01:30 »
Bueno, yo te proponia una idea mas para tu codigo.

Una vez en la escuela, nos dejaron de proyecto una maquina virtual, teniamos que hacer un programa que emulara el CPU con todos sus registros la RAM y la ROM para el  codigo de programa, hecho con un ensamblador que nosotros teniamos que inventar.
Y hacer otro programa que ensamblara, es decir, escribir un codigo fuente en nuestro lenguaje ensamblador, y que lo ensamblara para crear el archivo .obj
Que es lo que tu pretendes hacer.

Pero la verdad estubo muy complicado y laborioso, no tenia ninguna utilidad practica, pero si fue demasiado didactico.

Lo mas facil que puedes hacer es tener un codigo demasiado estricto, para que tus condiciones sean sencillas.

Que es lo que quieres hacer? por que parece como si quicieras hacer un PLC o algo asi...
Por que te podria pasar mi maquina virtual, pero la verdad, a estas fechas ni yo le entiendo a lo que hice :rolleyes:

17
C++ Builder / Re: Decifrar Comandos En Un Memo
« en: Martes 24 de Octubre de 2006, 21:09 »
Dale una revisada a esta discucion

Discusion Leds

18
C++ Builder / Re: Cambiar Checked De Checkbox Al Presionar Una Tecla
« en: Viernes 29 de Septiembre de 2006, 22:14 »
El componente TCheckBox ya hace por si solo lo que quieres, cuando tiene el foco (que se ve un cuadro punteado alrededor) y presionas la barra espaciadora cambia la pripiedad check, y creo que solo es con esa tecla

19
C++ Builder / Re: Dificil De Explicar En Un Titulo...
« en: Martes 26 de Septiembre de 2006, 22:21 »
oye Devilcpc, yo tambien programa para PIC's y estoy interesado en hacer una pantalla de leds, pero no se como hacer la matriz, si pudieras ayudarme con el diagrama para darme una idea de los que estas haciendo.

Y me llama mucho la atencio tu trabajo, pues al parecer estas manejando una pantalla RGB

20
C++ Builder / Re: Dificil De Explicar En Un Titulo...
« en: Martes 26 de Septiembre de 2006, 18:29 »
Creo que podiras hacer esto:

Código: Text
  1.  
  2.    TShape *Punt[8];
  3.    Punt[0] = Shape1;
  4.    Punt[1] = Shape2;
  5.    Punt[2] = Shape3;
  6.    Punt[3] = Shape4;
  7.    Punt[4] = Shape5;
  8.    Punt[5] = Shape6;
  9.    Punt[6] = Shape7;
  10.    Punt[7] = Shape8;
  11.  
  12.    AnsiString Linea = "";
  13.    for( int i = 0; i < 8; i++ )
  14.       if( Punt[i]->Brush->Color == clRed )
  15.          Linea += "1";
  16.       else
  17.          Linea += "0";
  18.  
  19.    Memo1->Lines->Append( Linea );
  20.  
  21.  

Este ejemplo es para 8 Leds

Te adjunto el programa, espero que te sirva...

21
C++ Builder / Re: Eliminar Una Palabra En Un Tmemo
« en: Martes 19 de Septiembre de 2006, 20:18 »
Citar
el código que utilizo es el siguiente

int i;
AnsiString palabra;
palabra="</TD>";

for(i=0;i<=Memo2->Lines->Count;i++)
{
if(Memo2->Lines->Strings==palabra)
{
Memo2->Lines->Delete(i);
}
else NULL;
}

Creo que el problema que tienes, es por que buscas la correspondencia en toda la linea, y es donde pasa lo que mencionas del tabulador

Si lo que quieres es borrar toda la linea del TMemo donde se encuentre la 'palabra', puedes hacer lo siguiente

Código: Text
  1.  
  2.    AnsiString palabra = &#34;&#60;/TD&#62;&#34;;
  3.    for( int i = 0; i &#60; Memo1-&#62;Lines-&#62;Count; i++ )
  4.       if( Memo1-&#62;Lines-&#62;Strings[i].Pos(palabra) &#62; 0 )
  5.       {
  6.          Memo1-&#62;Lines-&#62;Delete(i);
  7.          i--;
  8.       }
  9.  
  10.  

la funcion Pos de AnsiString te retorna 0 si palabra NO esta en la linea, checa la ayuda de AnsiString.

Y si lo que quieres es solo eliminar 'palabra' de la linea, puedes hacer lo siguiente:

Código: Text
  1.  
  2.    AnsiString palabra = &#34;&#60;/TD&#62;&#34;;
  3.    for( int i = 0; i &#60; Memo1-&#62;Lines-&#62;Count; i++ )
  4.    {
  5.       //Para el caso de que 'palabra' sea la linea completa del TMemo
  6.       if( Memo1-&#62;Lines-&#62;Strings[i] == palabra )
  7.       {
  8.          Memo1-&#62;Lines-&#62;Delete(i);
  9.          i--;
  10.          continue;
  11.       }
  12.       //Para el caso de que 'palabra sea parte de la linea del TMeno'
  13.       if( Memo1-&#62;Lines-&#62;Strings[i].Pos(palabra) &#62; 0 )
  14.       {
  15.          AnsiString Linea = Memo1-&#62;Lines-&#62;Strings[i];
  16.          int inicio = Memo1-&#62;Lines-&#62;Strings[i].Pos(palabra);
  17.          int fin = palabra.Length();
  18.          Memo1-&#62;Lines-&#62;Strings[i] = Linea.Delete(inicio,fin);
  19.       }
  20.    }
  21.  
  22.  

y asi solo borras 'palabra'.
Claro que puedes reducir el codigo del segundo caso, solo puse las otras variables para que se vea mas didactico.

Código: Text
  1.  
  2.    //Para el caso de que 'palabra sea parte de la linea del TMeno'
  3.    if( Memo1-&#62;Lines-&#62;Strings[i].Pos(palabra) &#62; 0 )
  4.       Memo1-&#62;Lines-&#62;Strings[i] = Memo1-&#62;Lines-&#62;Strings.Delete(Memo1-&#62;Lines-&#62;Strings[i].Pos(palabra),palabra.Length());
  5.  
  6.  

Espero que te sirva esto, por que si estas manejando solo texto, no veo por que usar un TRichEdit, pues gastarias recursos si aprobechar todo el componente

22
C++ Builder / Re: Pantallas Widescreen
« en: Martes 29 de Agosto de 2006, 20:31 »
Intenta usando  la propiedad Anchor de los componentes, sirve para anclar el componente a a Forma, o al componente padre que los contenga.
Por default vienen anclados en izquierda y arriba, si los anclas tambien en derecha y abajo el componente se ajusta al tamaño de la ventana.

No lo e utilizado mucho por que como dijo wako13, yo tengo definida una resolucion para mi programa, pero podria servirte de algo.

23
C++ Builder / Re: Guardar Componentes Creados En Tiempo De Ejecución
« en: Domingo 27 de Agosto de 2006, 00:17 »
Pues es relativamente facil, si ya pudiste crear objetos en tiempo de ejecucion, y manipular sus propiedades, pues ya lo tienes.

Te puedes auxiliar de un TActionList para declarar las funciones, o por ejemplo si la funcion que ocupas es de OnMouseDownd, que lleva mas parametros aparte del Sender, tendras que declarar esa funcion manualmente.
O hacer un pequeño truco.
Pon un Conponente, el que sea, que tenga el evento que quieres manejar, vete a la pestaña de eventos en el inspector de objetos, y colocate en el evento (ej OnMouseDown), escribe un nombre para la funcion (ej FuncionTemporar), da un enter para que builder la declare automaticamente y escribe el codigo que quieras que realize. Despues de eso, puedes borrar el componente, pues ya no se ocupa, y la funcion ya queda declarada.

Despues de eso, en la parte del codigo donde creas tu objeto en tiempo de ejecucion, asignale la funcion que declaraste, y ya...
Código: Text
  1.  
  2. void __fastcall TForm1::FuncionTemporal(TObject *Sender,
  3.       TMouseButton Button, TShiftState Shift, int X, int Y)
  4. {
  5.    //Esta es la funcion que vas a asignar a tu objeto creado en tiempo
  6.    //de ejecucion
  7.    //Pon el codigo que quieras
  8.    ShowMessage( &#34;funcion temporal&#34; );
  9. }
  10. //---------------------------------------------------------------------------
  11.  
  12. void __fastcall TForm1::FormCreate(TObject *Sender)
  13. {
  14.    //Aqui es donde creas el objeto en tiempo de ejecucion
  15.    TLabel *Prueba = new TLabel(this);
  16.    Prueba-&#62;Parent = this;
  17.    Prueba-&#62;Caption = &#34;vatoicc&#34;;
  18.    Prueba-&#62;OnMouseDown = FuncionTemporal;
  19. }
  20. //---------------------------------------------------------------------------
  21.  
  22.  

Eso funciona para todos los componentes, incluso los que pones en tiempo de diseño.

te adjunto un ejemplo con un TButton y un TLabel

24
C++ Builder / Re: Guardar Componentes Creados En Tiempo De Ejecución
« en: Sábado 19 de Agosto de 2006, 20:54 »
Para Max_D

No se esta cambiando L por MiEtiqueta, recuerta que Name es una propiedad de TLabel.
Si te fijas cuando pones un nuevo componente en tiempo de diseño, builder automaticamente te escribe un puntero a tu objeto con el mismo nombre que la propiedad name.

y respondiendo a tu pregunta, no es que puedas seguirlo llamando L en las siguientes sentencias, DEBES llamarlo L, puesto que te marcaria el error de que no existe un objeto MiEtiqueta.

Con practica se entiende mejor, pues lo punteros siempren causan un dolor de cabeza, pero comprendiendolos bien, te sacan de problemas con mas facilidad

25
C++ Builder / Re: Guardar Registros En C++
« en: Viernes 18 de Agosto de 2006, 00:23 »
Como te lo habia planteado en el codigo, con:

Código: Text
  1.  
  2. TStringList *Archivo = new TStringList();
  3.  
  4.  

solo estas creando un objeto tipo TStringList, que es igual al TString que usa el Memo
para almacenar las lineas, como en el block de notas.

Lo que te plantee, que es lo que yo hago en la mayoria de los casos, es que en tu arhcivo, guardes informacion, o registros, como le quieras llamar, solo que si son numericos, debes tener en cuenta, que TStringList maneja cadenas AnsiString.
Podria ser algo engorroso tener una variable tipo int y tener que usar la funcion IntToStr() para guardarlo en una linea del TStringList, pero para mi, es muy confiable.

No se exactamente que registros quieras guardar, (me da flojera revisar todo el codigo :P ) pero donde dices que te marca el error, recibes como parametro un TListBox, y creo que lo que quieres hacer es poner lo que esta en el arhcivo en el TListBox, si es asi, puedes hacer esto
Código: Text
  1.  
  2. void TLista::leer(TListBox *l)
  3. {
  4.    l-&#62;Items-&#62;LoadFromFile(&#34;Solman.txt&#34;);
  5. }
  6.  
  7.  

la parte que no entiendo es la de

T copia;

pero imagino que es una estructura que hiciste

Páginas: [1] 2 3