Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-11-2008
rarratia rarratia is offline
Miembro
 
Registrado: sep 2004
Posts: 50
Poder: 20
rarratia Va por buen camino
Esta es la forma como creo el formulario:

class procedure Tf_sName.MostrarVentana(ATag : Integer);
var
i : Integer;
f : TForm;
begin
LockWindowUpdate(Application.MainForm.Handle);
try
for i := Screen.FormCount - 1 downto 0 do begin
f := Screen.Forms[i];
if(f is Self) then begin
if(f.WindowState = wsMinimized) then
f.WindowState := wsNormal;
f.BringToFront;
Exit;
end;
end;
f := Create(Application);
f.Tag := ATag;
f.Show;
finally
LockWindowUpdate(0);
end;
end;
Responder Con Cita
  #2  
Antiguo 05-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Cita:
Empezado por rarratia Ver Mensaje
Esta es la forma como creo el formulario:

Código Delphi [-]
class procedure Tf_sName.MostrarVentana(ATag : Integer);
var
 i : Integer;
 f : TForm;

begin
  LockWindowUpdate(Application.MainForm.Handle);
  try
    for i := Screen.FormCount - 1 downto 0 do begin
      f := Screen.Forms[i];
      if (f is Self) then begin
        if (f.WindowState = wsMinimized) then
          f.WindowState := wsNormal;
        f.BringToFront;
        Exit;
      end;
    end;
    f := Create(Application);
    f.Tag := ATag;
    f.Show;
  finally
    LockWindowUpdate(0);
  end;
end;
Según tu código, solo creas y muestras la forma, pero en ningún momento la asignas a una variable de objeto que siga "viva" fuera del método...

Así que si haces algo como Form1.Edit1.Text := Valor, obviamente no va a pasar nada (bueno si, un error de violación de memoria )...


Por cierto, cuando pongas código usa las etiquetas [ DELPHI ] [ /DELPHI ] (sin los espacios en blanco) para que este se vea mejor, fijate en la diferencia entre el código en el quote de este mensaje y el que tu pusiste...

Saludos...
Responder Con Cita
  #3  
Antiguo 06-11-2008
rarratia rarratia is offline
Miembro
 
Registrado: sep 2004
Posts: 50
Poder: 20
rarratia Va por buen camino
Ahora entiendo, si la Class Function esta definida en los formularios padres de donde se heredan todos los demás debo en el evento create colocar lo siguiente:

Código Delphi [-]
Form1 := Self;
Responder Con Cita
  #4  
Antiguo 06-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Esto que comentas, si bien puede solucionar tu problema, no es muy recomendable hacerlo.

Lo mejor sería que el método de clase sea la que devuelva ese valor:

Código Delphi [-]
class procedure TParentForm.ShowWindow(ATag: Integer; var Reference);
var
  i: Integer;
  AForm: TForm;

begin
  LockWindowUpdate(Application.MainForm.Handle);
  try
    for i := Screen.FormCount - 1 downto 0 do
    begin
      AForm := Screen.Forms[i];
      if (AForm = Reference) then
      begin
        if (AForm.WindowState = wsMinimized) then
          AForm.WindowState := wsNormal;
        AForm.BringToFront;
        Exit
      end
    end;
    AForm := Create(Application);
    AForm.Tag := ATag;
    AForm.Show;
    Reference := AForm
  finally
    LockWindowUpdate(0)
  end
end;

De esta forma puedes hacer algo como:

Código Delphi [-]
var
  Form1: TForm1;

begin
  TForm1.ShowWindow(1, Form1)
end;


Saludos...
Responder Con Cita
  #5  
Antiguo 07-11-2008
rarratia rarratia is offline
Miembro
 
Registrado: sep 2004
Posts: 50
Poder: 20
rarratia Va por buen camino
Bien, entonces para formularios modales ¿podríamos tener algo así?
Código Delphi [-]
class function TParentForm.ShowWindow(ATag : Integer; var Reference) : TModalResult;
var
AForm : TForm;
begin
  AForm := Create(Application);
  AForm.Tag := ATag;
  Try
    Result := AForm.ShowModal;
  finally
    Free;
  end;
end;
Responder Con Cita
  #6  
Antiguo 07-11-2008
rarratia rarratia is offline
Miembro
 
Registrado: sep 2004
Posts: 50
Poder: 20
rarratia Va por buen camino
Me faltó algo:

Código Delphi [-]
class function TParentForm.ShowWindow(ATag : Integer; var Reference) : TModalResult;
var
AForm : TForm;
begin
  AForm := Create(Application);
  Reference := AForm; // Esto había quedado en el tintero
  AForm.Tag := ATag;
  Try
    Result := AForm.ShowModal;
  finally
    Free;
  end;
end;
Responder Con Cita
  #7  
Antiguo 07-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

En tu método de clase liberas la forma que creas, así que al salir de la función, Reference tendrá un valor no válido.

En este caso sería mejor solo hacer algo como:

Código Delphi [-]
class function TParentForm.ShowWindow: TModalResult;
begin
  with Self.Create(nil) do
    try
      Result := ShowModal
    finally
      Free
    end
end;

Si te fijas, el método de clase no recibe ningún parámetro y solo devuelve el resultado de ModalResult...



Saludos...
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
Conexion Remota (IP PÚBLICAS) JAI_ME Varios 5 20-05-2008 23:11:00
Problema herencia visual en form diegofhernando OOP 8 19-05-2008 16:41:33
Herencia visual en formularios... diegofhernando OOP 4 18-04-2008 10:54:05
Herencia visual con TFrames y otros asuntos walrus OOP 6 19-09-2004 02:38:12
No se ven controles en herencia visual Sirkius OOP 10 07-06-2004 22:25:32


La franja horaria es GMT +2. Ahora son las 08:38:31.


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