Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-04-2009
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Crear TForm en Runtime

Hola amigos del foro.

Tengo una pregunta para ustedes.
Estoi haciendo una aplicacion que es un chat, con el cual se puede escribir en un canal abierto y lo pueden ver todos los usuarios conectados.

Ahora bien, quiero tener la posibilidad de tener una conversacion privada (como un messenger), en donde al apretar el boton de mensaje privado, me abra una ventana por cada usuario (tal cual como es messenger)

El asunto es que no puedo tener miles de form creados e ir poniendolos visibles.

Mi idea es crear form en runtime, con este código.

Código Delphi [-]
var componentT : TComponent;
Frame: TFrame;
begin
        with TForm.Create(self) do
        begin
                Left := 150;
                Top := 150;
                Width := 300;
                Height := 500;
                Name := listbox1.Items.Strings[slistbox1.itemindex];
                Caption := slistbox1.Items.Strings[slistbox1.itemindex];
                show;
        end;
        with TMEMO.Create(self) do
        begin
                Left := 7;
                Top := 8;
                Width := 257;
                Height := 273;
                Name := 'memo';
                Caption := '';
                Parent := self;
        end;
        with TEdit.Create(self) do
        begin
                Left := 7;
                Top := 287;
                Width := 257;
                Height := 21;
                Name := 'edit';
                Caption := '';
                onkeypress :=  Edit1KeyPress;
                Parent := self;
        end;
 
 end;
end;

aparte del form necesito crear un TEdit y un TMemo, el problema es que en la propiedad parent, no se como hacer referencia al TForm recien creado, porque si lo dejo como SELF, lo crea en el form en donde aprete en boton de mensaje privado.

Otra cosa, al apretar el boton de mensaje provado, y crea el componente TForm, antes de crear debiese comprobar si es que existe o no, sino me arroja un error de que ya existe un componente con ese nombre... como se hace para saber si existe o no algun componente?

Bueno, espero que me puedan ayudar.

Saludos y muchas gracias
Responder Con Cita
  #2  
Antiguo 15-04-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Para referenciar al formulario recién creado necesitas asignarlo a una variable al momento de crearlo:

Código Delphi [-]
var
 Form: TForm;

begin
  Form := TForm.Create(Self);

  with Form do
  begin
    ...
    with TMemo.Create(Form) do
    begin
      ...
      Parent := Form;
      ...
    end;
  end;
end;

Pero por otra parte, no veo la necesidad de construir cada componente del formulario. Crea un formulario TVentanaPrivada (en tiempo de diseño) al que le pones todos los controles que necesites para ese formulario, lo quitas del AutoCreate y al moento de necesitar un privado creas tu formulario:

Código Delphi [-]
var
  Form: TVentanaPrivada;

begin
  ...
  Form := TVentanaPrivada.Create(Self);
  ...
end;

// Saludos
Responder Con Cita
  #3  
Antiguo 15-04-2009
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
me parece una buena idea, pero de esa manera solo podre tener un solo privado a la vez.

siguiendo con la idea original, tengo un codigo que esta algo asi:

Código Delphi [-]
var form : Tform;
memo : Tmemo;
begin
   if key=#13 then
with (Sender as TEdit) do
begin
 form := FindComponent( slistbox1.Items.Strings[slistbox1.itemindex] ) as TForm;
 memo := FindComponent( 'memo' ) as TMemo;

with form do with memo do lines.Add(label2.caption+': '+text);

a donde quiero llegar con todo esto, el asunto es que como tengo varios form de mensajeria privada, necesito identificar en donde escribir lo que estoi mandando... es decir en cual TForm creado escribo lo que acabo de mandar al usuario en particular.

el codigo expuesto, no tira error al compilar, pero si al ejecutar el procedimiento.

espero me puedan ayudar.

Gracias
Responder Con Cita
  #4  
Antiguo 15-04-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por mjjj Ver Mensaje
me parece una buena idea, pero de esa manera solo podre tener un solo privado a la vez.
Y, ¿por qué crees esto? Así como creas muchos TForm, puedes crear cuanto TVentanaPrivada quieras.

Y yo lo que haría es llevar una lista (TList, TObjectList e incluso TStringList) de las ventanas privadas.

// Saludos
Responder Con Cita
  #5  
Antiguo 15-04-2009
Cheerpipe Cheerpipe is offline
Miembro
 
Registrado: oct 2006
Posts: 46
Poder: 0
Cheerpipe Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Y, ¿por qué crees esto? Así como creas muchos TForm, puedes crear cuanto TVentanaPrivada quieras.

Y yo lo que haría es llevar una lista (TList, TObjectList e incluso TStringList) de las ventanas privadas.

// Saludos
X2. Amigo, estas pensando de forma estructurada, debes abstarer el problema a una logica de objetos, ya veras como es de facil.

Por ultimo mjj, tengo que confesarte que tu razonamiento esta del todo equivocado, creo que te faltan ciertas bases necesarias para que puedas continuar programando tu aplicacion, y esa base se llama POO.

Última edición por Cheerpipe fecha: 15-04-2009 a las 02:50:00.
Responder Con Cita
  #6  
Antiguo 15-04-2009
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Cheerpipe Ver Mensaje
X2. Amigo, estas pensando de forma estructurada, debes abstarer el problema a una logica de objetos, ya veras como es de facil.
¿Que roman está siguiendo un enfoque estructurado? ¡Yo no estaría tan seguro!

En lo que si tal vez se podría llegar a discutir si es viable el uso de tener la lista.... La lista está hecha... en SCreen.Forms

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 15-04-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Ah! Esto sí estuvo gracioso

Un TForm es una clase, un TVentanaPrivada es una clase (que hereda de TForm), un TList es una clase.

Delphius: Screen.Forms es una lista de todas las ventanas creadas, pero yo usaría una lista específica puesto que en ScreenForms puede haber muchas otras formas que no interesan.

// Saludos
Responder Con Cita
  #8  
Antiguo 15-04-2009
Cheerpipe Cheerpipe is offline
Miembro
 
Registrado: oct 2006
Posts: 46
Poder: 0
Cheerpipe Va por buen camino
Cita:
Empezado por Cheerpipe Ver Mensaje
X2. Amigo, estas pensando de forma estructurada, debes abstarer el problema a una logica de objetos, ya veras como es de facil.

Por ultimo mjj, tengo que confesarte que tu razonamiento esta del todo equivocado, creo que te faltan ciertas bases necesarias para que puedas continuar programando tu aplicacion, y esa base se llama POO.
Mi error, debi poner punto aparte y no seguido xD..

Mjj esta usando un enfoque esteucturado, y POO .

Insito en que el amigo Mjj, podria partir por instruirse que es POO, con eso se le ará mas facil comprender el ejemplo de Roman, ya que es justamente, un enfoque muy correcto, digo muy correcto, porque siempre hay mas de 1 forma de solucionar un problema .
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear un Shape en Runtime David78 Gráficos 4 28-04-2010 22:03:54
Crear imagen en runtime salvica Gráficos 1 03-01-2008 17:58:16
Crear columnas en runtime Pedro-Juan OOP 8 09-02-2007 12:38:18
Crear índice en runtime Gabriel2 Tablas planas 2 17-11-2005 22:19:00
Crear QuickRep en RunTime MLePuff Impresión 2 18-10-2005 05:32:23


La franja horaria es GMT +2. Ahora son las 05:28:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi