|
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
1
« en: Martes 15 de Mayo de 2007, 03:41 »
Checa estoTal vez puedas usar algo de esta discusion, para que no este tan a lo bruto
2
« 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 retun procedencia;
Pero corrigiendo eso, la sintaxis esta bien, yo lo probe en un boton como tu decias, y si funciona bool procede(bool procedencia) { procedencia=false; return procedencia; } void __fastcall TForm1::Button1Click(TObject *Sender) { ShowMessage( BoolToStr( procede(true),true ) ); } //---------------------------------------------------------------------------
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
« en: Domingo 6 de Mayo de 2007, 04:21 »
Te dire que funciono bien, este es el codigo: HWND P = GetWindow( HandleProg,GW_CHILD ); SendMessage( P,WM_CHAR,'r',0 );
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  . 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
« en: Domingo 15 de Abril de 2007, 22:28 »
si estas queriendo habrir imagenes JPG, necesitas incluir la libreria jpeg.
#include "jpeg.hpp"
5
« 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 void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Programa = "C:\\WINDOWS\\NOTEPAD.EXE"; AnsiString Wname = "Sin título - Bloc de notas"; char WinName[80]; char WinClass[80]; //HandleProg esta declarada dentro de la clase de la forma (HWND HandleProg;) ShellExecute(HandleProg,"open", Programa.c_str() , NULL ,NULL,SW_SHOWNORMAL ); while(1) { HandleProg = FindWindow( 0,Wname.c_str() ); if( HandleProg != NULL ) break; } //Esto es solo para ver el nombre de la clase y el titulo del programa GetWindowTextA( HandleProg ,WinName,sizeof( WinName )-1 ); GetClassNameA( HandleProg ,WinClass,sizeof( WinClass ) - 1 ); Label_WinClass->Caption = WinClass; Label_WinName->Caption = WinName; } //---------------------------------------------------------------------------
Ya que tengo guardado el HANDLE del programa, lo puedo cerrar, por lo que compruebo que el HANDLE es correcto void __fastcall TForm1::Button2Click(TObject *Sender) { SendMessage( HandleProg,WM_CLOSE,0,0 ); } //---------------------------------------------------------------------------
Pero no puede escribir un caracter :s void __fastcall TForm1::Button3Click(TObject *Sender) { SendMessage( HandleProg,WM_CHAR,'r',0 ); } //---------------------------------------------------------------------------
Lo que e logrado hacer con el mensaje WM_CHAR es escribir en un Edit o un Memo, pero solo dentro de mi aplicacion SendMessage( Edit1->Handle,WM_CHAR,'r',0 ); SendMessage( Memo1->Handle,WM_CHAR,'r',0 );
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
« en: Viernes 2 de Marzo de 2007, 22:09 »
y como accedes al registro de windows? para escribir, leer, y modificarlo
7
« en: Jueves 18 de Enero de 2007, 21:40 »
TDate Fecha = Fecha.CurrentDate(); AnsiString FechaLiteral = Fecha.FormatString("d - mmm - yyyy");
Checa la ayuda de la funcion FormatString para que puedas ver todas las posibilidades que tienes.
8
« en: Jueves 4 de Enero de 2007, 21:14 »
Orale, muy buen codigo... Donde aprendes a hacer ese tipo de solicitudes al SO?
9
« en: Sábado 16 de Diciembre de 2006, 04:33 »
esa?
10
« 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: TStringList *ReporteHTML = new TStringList(); ReporteHTML->Clear(); //----Poner la cabecera ReporteHTML->Append("<HEAD>"); ReporteHTML->Append("<TITLE>SÍNTESIS INFORMATIVA</TITLE>"); ReporteHTML->Append("</HEAD>"); //----Poner el cuerpo ReporteHTML->Append("<BODY><FONT FACE= \"MS Sans Serif\""); //Titulo ReporteHTML->Append("<CENTER><H2>Síntesis Informativa</H2><H4>FECHA: "+FechaActual.FormatString("ddd d/mmm/yy"</H4></CENTER>"); ReporteHTML->Append("<p><A NAME =\"TopMenu\">FILTRADO POR: Medios Electrónicos</A>"); ReporteHTML->Append("<HR>"); //Enlaces a Radio ReporteHTML->Append("Radio<UL>"); for( int i = 0; i < NombreRadio->Count; i++ ) { AnsiString Ancla = CrearAncla(NombreRadio->Strings[i]); AnsiString NAncla = NombreRadio->Strings[i]; ReporteHTML->Append("<LI><A HREF = #"+Ancla+">"+NAncla+" ("+IntToStr(ListaRadio[i]->Count)+")</A>"); } ReporteHTML->Append("</UL>"); //Enlaces a Tv ReporteHTML->Append("Tv<UL>"); for( int i = 0; i < NombreTv->Count; i++ ) { AnsiString Ancla = CrearAncla(NombreTv->Strings[i]); AnsiString NAncla = NombreTv->Strings[i]; ReporteHTML->Append("<LI><A HREF = #"+Ancla+">"+NAncla+" ("+IntToStr(ListaTv[i]->Count)+")</A>"); } ReporteHTML->Append("</UL>"); //Enlaces a Internet ReporteHTML->Append("Internet<UL>"); for( int i = 0; i < NombreInternet->Count; i++ ) { AnsiString Ancla = CrearAncla(NombreInternet->Strings[i]); AnsiString NAncla = NombreInternet->Strings[i]; ReporteHTML->Append("<LI><A HREF = #"+Ancla+">"+NAncla+" ("+IntToStr(ListaInternet[i]->Count)+")</A>"); } ReporteHTML->Append("</UL>");
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 ReporteHTML->SaveToFile("c:\\Reporte.HTML");
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
« 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  . O que es lo que quieres hacer?
12
« 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
« 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 void __fastcall TForm3::qr1NeedData(TObject *Sender, bool &MoreData) { static int i = 0 //aqui iguales al primer valor que quieres que tome i //y este valor solo se pone la primera vez, la siguiente vez //que se llame a esta funcion, "recordara" el valor anterior MoreData = i < Form1->sg->RowCount; if (MoreData) { QRLabel1->Caption=Form1->sg->Cells[1][i]; QRLabel2->Caption=Form1->sg->Cells[2][i]; QRLabel3->Caption=Form1->sg->Cells[3][i]; QRLabel4->Caption=Form1->sg->Cells[4][i]; QRLabel5->Caption=Form1->sg->Cells[5][i]; QRLabel6->Caption=Form1->sg->Cells[6][i]; QRLabel7->Caption=Form1->sg->Cells[7][i]; } i++; }
14
« en: Martes 7 de Noviembre de 2006, 02:58 »
Checa esta discuciòn Excel
15
« 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
« 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
17
« en: Martes 24 de Octubre de 2006, 21:09 »
Dale una revisada a esta discucion Discusion Leds
18
« 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
« 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
« en: Martes 26 de Septiembre de 2006, 18:29 »
Creo que podiras hacer esto: TShape *Punt[8]; Punt[0] = Shape1; Punt[1] = Shape2; Punt[2] = Shape3; Punt[3] = Shape4; Punt[4] = Shape5; Punt[5] = Shape6; Punt[6] = Shape7; Punt[7] = Shape8; AnsiString Linea = ""; for( int i = 0; i < 8; i++ ) if( Punt[i]->Brush->Color == clRed ) Linea += "1"; else Linea += "0"; Memo1->Lines->Append( Linea );
Este ejemplo es para 8 Leds Te adjunto el programa, espero que te sirva...
21
« en: Martes 19 de Septiembre de 2006, 20:18 »
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 AnsiString palabra = "</TD>"; for( int i = 0; i < Memo1->Lines->Count; i++ ) if( Memo1->Lines->Strings[i].Pos(palabra) > 0 ) { Memo1->Lines->Delete(i); i--; }
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: AnsiString palabra = "</TD>"; for( int i = 0; i < Memo1->Lines->Count; i++ ) { //Para el caso de que 'palabra' sea la linea completa del TMemo if( Memo1->Lines->Strings[i] == palabra ) { Memo1->Lines->Delete(i); i--; continue; } //Para el caso de que 'palabra sea parte de la linea del TMeno' if( Memo1->Lines->Strings[i].Pos(palabra) > 0 ) { AnsiString Linea = Memo1->Lines->Strings[i]; int inicio = Memo1->Lines->Strings[i].Pos(palabra); int fin = palabra.Length(); Memo1->Lines->Strings[i] = Linea.Delete(inicio,fin); } }
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. //Para el caso de que 'palabra sea parte de la linea del TMeno' if( Memo1->Lines->Strings[i].Pos(palabra) > 0 ) Memo1->Lines->Strings[i] = Memo1->Lines->Strings.Delete(Memo1->Lines->Strings[i].Pos(palabra),palabra.Length());
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
« 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
« 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... void __fastcall TForm1::FuncionTemporal(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { //Esta es la funcion que vas a asignar a tu objeto creado en tiempo //de ejecucion //Pon el codigo que quieras ShowMessage( "funcion temporal" ); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { //Aqui es donde creas el objeto en tiempo de ejecucion TLabel *Prueba = new TLabel(this); Prueba->Parent = this; Prueba->Caption = "vatoicc"; Prueba->OnMouseDown = FuncionTemporal; } //---------------------------------------------------------------------------
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
« 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
« en: Viernes 18 de Agosto de 2006, 00:23 »
Como te lo habia planteado en el codigo, con: TStringList *Archivo = new TStringList();
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  ) 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 void TLista::leer(TListBox *l) { l->Items->LoadFromFile("Solman.txt"); }
la parte que no entiendo es la de T copia; pero imagino que es una estructura que hiciste
|
|
|