Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Application->CreateForm(...)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Application->CreateForm(...) Responder citando

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
Mensaje    Asunto: Responder citando

Prueba esto:
Código:
#include "Form1.h"
Application->CreateForm(__classid(TForm1), &Form1);  // Crea
Form1->ShowModal();    // Muestra
delete Form1;    // Borra

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Mensaje    Asunto: Responder citando

ya lo consegui Very Happy

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
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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 Very Happy
_________________
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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

while (0==0) ShowMessage("Gracias!");


Muchas gracias funciona perfectamente!

Very Happy


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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Lo siente me he equivocado de post
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.