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 11-06-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 22
apicito Va por buen camino
En la creación del formulario la hago por referencia, ya que se llama muchos formularios distintos y con distintas comprobaciones, entonces las comprobaciones las tengo que hacer en el formulario hijo.
Responder Con Cita
  #2  
Antiguo 11-06-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 22
apicito Va por buen camino
mira el procedimiento de llamada:
Código:
  if Sender.ClassType = TToolButton then
    FormaClase:=TExpFormClass(GetClass('TExp'+inttostr((Sender as TToolButton).Tag)))
  else if Sender.ClassType = TMenuItem then
    FormaClase:=TExpFormClass(GetClass('TExp'+inttostr((Sender as TMenuItem).Tag)))
  else
    Exit;
  if FormaClase<>nil then
    begin
      Forma:=FormaClase.Create(Self);
      Forma.codigo:=0;
      Forma.Expte:=QueryDia.fieldbyName('EXPDIA_CODIGO').AsInt64;
      Forma.Modo:='A';
      Forma.Part:=Part;
      Forma.Tipo:='EXP'+Part+QueryDia.fieldbyName('EXPDIA_TIPO').AsString;
      Forma.ExpAno:=EAno.Text;
      Forma.ExpNum:=ENumero.Text;
      Forma.Idioma:=Idioma;
      Forma.Dni:=EDni.Text;
      Forma.DniDup:=EDniDup.Text;
      Forma.ShowModal;
Responder Con Cita
  #3  
Antiguo 11-06-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Bien, si es así, podrías mirar de usar un truquillo con el evento OnActivate

Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
begin
  // Si las comprovaciones me hacen cerrar el formulario, pos se cierro
  if comprovaciones then
    Close;

  // Sólo quiero que se lance una vez este evento, así que quito el OnActivate
  OnActivate := nil;
end;

A ver ahora que tal
Responder Con Cita
  #4  
Antiguo 11-06-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 22
apicito Va por buen camino
Gracias 1000.
Responder Con Cita
  #5  
Antiguo 11-06-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Lo mismo pero con interfaces

Wop!

Aunque el truco que te comenta Cadetill funciona a las 100 maravillas, aquí te dejo otra manera de hacerlo. Para mi es mejor, porque se usa un método explícito de la clase en lugar del evento OnActivate. Cuando busques en el proyecto tras dos años, te será mucho más fácil de seguir.
La ides es definir una interfaz que contenga un solo método:
Código Delphi [-]
type IValidaForm = interface
  function Valida: Boolean;
end;

El form que queremos que pueda "autovalidarse" antes de mostrarse, lo declaramos implementando la interfaz:

Código Delphi [-]
type TForm1 = class(TForm, IValidaForm)
...
  public Valida: Boolean;
..
end;

implementation

public TForm1.Valida: Boolean;
begin
  Result := MisCondiciones;
end;

Ahora solo nos queda controlar la validación desde el form "padre":

Código Delphi [-]
procedure TFormPadre.MuestraHijo;
begin
  with TForm1.Create(Self) do
  begin
    try
      if Valida then
        ShowModal;
    finally
      Free;
    end;
  end;
end;

Esto mismo lo podrías hacer sin interfaz, simplemente creando el método Valida en el form. La potencia que te da este mecanismo aparece cuando necesitas que varios forms tengan este comportamiento y no necesariamente tenga que derivar de una misma clase. Puedes crear un procedimiento para crear los forms:
Código Delphi [-]
function CreateValidaForm(FormClass: TFormClass): TForm;
var
  IForm: IValidaForm;
begin
  Result := FormClass.Create(Self);
  if Succeded(Result.QueryInterface(IValidaForm, IForm) and 
   IForm.Valida then
     Result.ShowModal
  else
    FreeAndNil(Result);   
end;
__________________
E pur si muove
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


La franja horaria es GMT +2. Ahora son las 22:51: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