Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
Solo una observación.

Cita:
Empezado por D&W Ver Mensaje
aquí va la modificación, espero sirva.
Código Delphi [-]
Procedure TMainForm.CreateOrRestoreForm(aForm : TForm, aFormClass : TFormClass);
  if not Assigned(aForm) Then begin
    aForm := aFormClass.Create(Application);
    aForm.Show;
  end
  else begin
    if aForm.WindowState = wsMinimized then  
        aForm.WindowState := wsNormal;
    aForm.BringToFront;
  end;
end;
Con esta rutina propuesta, ninguna asignación ocurre sobre la variable de formulario que se pasa como parámetro.

Si se hacen dos llamadas consecutivas, por ejemplo:

Código Delphi [-]
var
  Form1: TForm1;
begin
  MainForm.CreateOrRestoreForm(Form1, TForm1);
  MainForm.CreateOrRestoreForm(Form1, TForm1);
end;

Se tendrá dos instancias de TForm1.

Hasta luego.



Sugerencia: Si querés crear una rutina que asigne el valor de esa variable, date una vuelta por el código fuente del método CreateForm de la clase TApplication.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate

Última edición por jachguate fecha: 07-01-2008 a las 17:57:30. Razón: Añadir sugerencia
Responder Con Cita
  #2  
Antiguo 07-01-2008
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
Gracias por la observación jachguate tienes toda la razón. Nunca había probado el código hasta después de lo que me comentastes. Ya lo he reparado -según yo-
Código Delphi [-]
Procedure TMainForm.CreateOrRestoreForm(var aForm : TForm; aFormClass : TFormClass);
Begin
  if not Assigned(aForm) Then begin
    aForm := aFormClass.Create(Application);
    aForm.Show;
  end
  else begin
    if aForm.WindowState = wsMinimized then
        aForm.WindowState := wsNormal;
    aForm.BringToFront;
  end;
end;

Para llamarlo así:
Código Delphi [-]
CreateOrRestoreForm(TForm(Form2), TForm2);

Saludos.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #3  
Antiguo 07-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
Si ves el método que he propuesto, te darás cuenta que hay manera de evitar el moldeado de tipo en la llamada.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 07-01-2008
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
El moldeado es porque la declaración del procedimiento CreateOrRestoreForm a cambiado y ha quedado así:CreateOrRestoreForm(var aForm : TForm; aFormClass : TFormClass);

No sé que versión de Delphi usa, pero en la 7 no me deja compilar si no hago el moldeado ahora con la declaración Var.

Saludos.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #5  
Antiguo 07-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
claro, no te dejará en ninguna.

Quien esté interesado, puede darse una vuelta por el método propuesto y realizar la mejora necesaria a la rutina para que esto no sea necesario.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 08-01-2008
nelostanley nelostanley is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
nelostanley Va por buen camino
Para mi solucionado ....

Cita:
Empezado por D&W Ver Mensaje
Gracias por la observación jachguate tienes toda la razón. Nunca había probado el código hasta después de lo que me comentastes. Ya lo he reparado -según yo-

Código Delphi [-]
Procedure TMainForm.CreateOrRestoreForm(var aForm : TForm; aFormClass : TFormClass);
Begin
if not Assigned(aForm) Then begin
aForm := aFormClass.Create(Application);
aForm.Show;
end
else begin
if aForm.WindowState = wsMinimized then
aForm.WindowState := wsNormal;
aForm.BringToFront;
end;
end;





Para llamarlo así:

Código Delphi [-]
CreateOrRestoreForm(TForm(Form2), TForm2);





Saludos.
Ante todo muchas gracias por su participacion, me hicieron menos ignorante en esto, les comento que me meti en tremendo lio por "optimizador". (tuve que cambiar varios kilos de lineas acomodando mi codigo a estas funciones hasta hace unos 10 minutos, sin contar el fin de semana. )

Pero viendolo por el lado amable valio la pena, me quedo con el codigo citado les cuento que se me ocurrio la misma.


Código Delphi [-]
 
procedure  TfrmPrincipal.CrearFormulario(FormClass : TFormClass; Form : TForm );
begin
  if not Assigned(Form) Then begin
    Form := FormClass.Create(Application);
    Form.Show;
  end
  else begin
    if Form.WindowState = wsMinimized then  Form.WindowState := wsNormal;
    Form.BringToFront;
  end;
end;





Notaran el Class al reves como otro amigo lo menciono mas arriba, pero a este servidor la solucion dada me parece perfecta porque sirve para child o modal y se puede hacer referencia a las instancias de los Form1.cualquiercosa y con eso yo soy feliz.

Tambien debo comentarles que buscando por ahi pille la funcion:


Código Delphi [-]
function FindShowForm(FormClass: TFormClass; const Caption: string): TForm;




... de los RX (componentes rusos... en los uses hay que ponerle el AppUtils) interesantes, que los baje y los instale pero funciona identico como las funciones propuestas para los child, pero me tope con el mismo problema al hacer referencia a Form1.cualquiercosa desde Form2.cualquiercosa


Código Delphi [-]
Form2.cualquiercosa := Form1.cualquiercosa




.... Aqui tambien les dejo otra funcion ....


Código Delphi [-]
  function   TfrmPrincipal.ShowForm(FormClass:   TFormClass;   const   Caption:   string):   TForm;
  var   
      I:   Integer;   
  begin   
      Result   :=   nil;   
      for   I   :=   0   to   Screen.FormCount   -   1   do   begin   
          if   Screen.Forms[i]   is   FormClass   then   
              if   (Caption   =  '' )   or   (Caption   =   Screen.Forms[i].Caption)   then   begin   
                  Result   :=   Screen.Forms[i];   
                  if   (Result.WindowState   =   wsMinimized)   then   Result.WindowState   :=   wsNormal;   
                  Break;   
              end;   
      end;   
      if   Result   =   nil   then   begin   
          Application.CreateForm(FormClass,   Result);   
  //         if   Caption   <>     then   Result.Caption   :=   Caption;   
      end;   
      Result.Show;   
  end;




Pero ya saben con cual me kedo.. Bregue un monton pero valio la pena.

Nuevamente mil gracias a todos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Formularios Caro OOP 13 08-08-2007 17:41:17
Formularios MDI CoCaInE OOP 6 25-12-2006 13:25:34
Creación dinamica de Formularios Caro OOP 2 25-01-2006 13:20:01
Formularios Caro Varios 5 14-07-2005 14:51:30
Formularios MDI mierteran Varios 1 03-12-2004 11:28:35


La franja horaria es GMT +2. Ahora son las 08:39:34.


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