 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Eddie Invitado
|
Publicado: Mie 24 Dic, 2003 8:13 pm Asunto: Application->CreateForm(...) |
|
|
Hola, tengo un problema, estoy haciendo una especie de messenger en cutre y necesito abrir varias ventanas de un mismo form, es decir, para cada contacto abrir una ventana distinta, en delphi he conseguido hacerlo mas o menos asi:
pepe:=TForm2.Create(Application);
pero no soy capaz de hacerlo con el builder utilizando el metodo CreateForm de Application, alguien me podria ayudar??
gracias |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Eddie Invitado
|
Publicado: Dom 28 Dic, 2003 5:29 pm Asunto: |
|
|
Gracias, con ese codigo consegui abrir la ventana, el problema es que no puedo acceder a los componentes de la ventana, es decir, si recibo en mi "Messenger" un mensaje de un usuario, lo lógico es cargar una nueva ventana, y en ella poner el mensaje. En mi form tengo un memo, que crea sin problemas, pero si intento acceder a él desde el nuevo form creado, es decir:
TForm *wee;
Application->CreateForm(__classid(TcontactoFrm),&wee);
wee->Show();
wee->Caption="<<"+Palabra(message,0) + ">> - ASI MSN";
contactoFrm->log->Lines->Add(Frase(message,2));
wee->log->Lines->Add(Frase(message,2));
no me permite escribir en el componente "log" , es el memo que utilizo. Así que estoy en las mismas :'(
la única posibilidad que he encontrado es crear una nueva aplicación para las ventanas de conversación, esto me funciona el problema es que cuando recibo un mensaje me abre la ventana, aunque ya este abierta, es un engorro, ahora estoy liado intentando abrir cada ventana una sola vez, pero tengo problemas con el FindWindow, alguien podria echarme una mano con él?
HANDLE sw=FindWindow(nventana.c_str(),NULL);
if (sw==NULL)
{ //no esta abierta la ventana
AnsiString ruta="ventana.exe "+nickUser+" "+Palabra(message,0)+" "+server->Text;
WinExec(ruta.c_str(),0);
}
el problema es que la variable sw siempre vale NULL, y no se que hacer. Gracias de todas formas |
|
| Volver arriba |
|
 |
Eddie Invitado
|
Publicado: Dom 28 Dic, 2003 5:50 pm Asunto: |
|
|
ya lo consegui
solo era un fallo de logica (habia puesto mal el nombre de la ventana), si alguien le interesa, este es el codigo para comprobar si una ventana esta abierta:
if (FindWindow(NULL,"Caption del form")!=0)
ShowMessage("la aplicación esta abierta!")
else
ShowMessage("la aplicación esta cerrada")
el parametro que pasamos es el nombre que tiene la barra de titulo de la ventana, literlamente, si es "Form1" pues tal cual.
de todas formas me sigo preguntando si hay alguna forma de acceder a los componentes de un Form creado con el CreateForm, alguien tiene alguna idea? |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 28 Dic, 2003 6:48 pm Asunto: |
|
|
Prueba cambiando la declaración:
TForm *wee;
por:
TcontactoFrm *wee;
Y además de CreateForm puedes crearlos del siguiente modo:
TcontactoFrm* wee = new TcontactoFrm(Application); |
|
| Volver arriba |
|
 |
Eddie Cdt


Registrado: 28 Dic 2003Mensajes: 11Ubicación: España
|
Publicado: Dom 28 Dic, 2003 8:12 pm Asunto: |
|
|
Muchas gracias funciona perfectamente!
solo tenia que cambiar la clase y listo.
ahora el unico detalle que me queda por resolver es si se podría poner la nueva ventana en la barra de tareas, estoy probando con ShowWindow, de un truco que he visto en Trucomania, pero no consigo hacerlo funcionar.
se puede poner la nueva ventana en la barra de tareas??
y muchas gracias de nuevo  _________________ Time is up, it couldn't last, but there's more things i'd like to do, i'm coming back, to try again, some day maybe i'll wait till then...
No More Lies!! |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 28 Dic, 2003 8:49 pm Asunto: |
|
|
Si lo que quieres es que aparezca un nuevo botón en la barra de tareas por cada ventana que creas:
- Pon la siguiente declaración en la clase del Form en cuestion en la parte privada por ejemplo:
| Código: | //--- .h
private: // User declarations
void __fastcall CreateParams(TCreateParams& Params);
|
- Y luego añade la implementación de la misma:
| Código: | //--- .cpp
void __fastcall TcontactoFrm::CreateParams(TCreateParams& Params)
{
TForm::CreateParams(Params);
// Pone un boton en la barra de tareas para esta ventana
Params.ExStyle |= WS_EX_APPWINDOW;
// Hace la ventana hija del escritorio
Params.WndParent = GetDesktopWindow();
}
|
|
|
| Volver arriba |
|
 |
Eddie Cdt


Registrado: 28 Dic 2003Mensajes: 11Ubicación: España
|
Publicado: Dom 28 Dic, 2003 11:26 pm Asunto: |
|
|
while (0==0) ShowMessage("Gracias!");
Muchas gracias funciona perfectamente!
ahora solo hace falta ponerse a trabajar, muchas gracias de nuevo _________________ Time is up, it couldn't last, but there's more things i'd like to do, i'm coming back, to try again, some day maybe i'll wait till then...
No More Lies!! |
|
| Volver arriba |
|
 |
Kyo Cdt

Registrado: 09 Feb 2006Mensajes: 3
|
Publicado: Mar 11 Jul, 2006 12:58 pm Asunto: |
|
|
Buenas,
Esto funciona bien si no cambiamos el padre de la venta con
| Código: |
void __fastcall TForm::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.WndParent = GetActiveWindow();
}
|
Yo hago esto porque quiero que las ventanas parpadeen cuando el usuario hace clic fuera de ellas.
Este codigo no funciona correctamente en este caso.
Alguien sabe como corregir el problema?
Muchas gracias |
|
| Volver arriba |
|
 |
Kyo Cdt

Registrado: 09 Feb 2006Mensajes: 3
|
Publicado: Mar 11 Jul, 2006 1:00 pm Asunto: |
|
|
| Lo siente me he equivocado de post |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|