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-09-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
Redefinir procedure OnShow en form heredado.

Hola a todos.

Ya se que mi consulta es de principiante, a pesar de estar programando hace ya varios años con Delphi 7, y ahora con Lazarus y Delphi 6, pero hasta ahora nunca me tocó hacer lo que necesito.
Paso a explicar :
Tengo un TForm (TFrmABMGeneric) donde lo construyo para utilizarlo como form padre.Este, en su evento OnSHow hace esto :

Código Delphi [-]
{ Conecto el dataset de la vista con el del form ABM o el Form ABM Master }
  if (IsABMDetail = false) and (IsABMLookup = false) and
     not (TfrmGenericGrid(MainForm.ActiveMDIChild).Entidad[6] = 'T') then
    dsChild.DataSet := TfrmGenericGrid(MainForm.ActiveMDIChild).cdsMaster;

  ActNuevo.Enabled := not (IsReadOnly);
  ActGuardar.Enabled := not (IsReadOnly);
  ActEditar.Enabled := not (IsReadOnly);
  ActDeshacer.Enabled := not (IsReadOnly);
  ActEliminar.Enabled := not (IsReadOnly);
 ...

Y justo necesito crear un form heredado de este último, pero que no tiene que ejecutar la linea "dsChild.DataSet := TfrmGenericGrid(MainForm.ActiveMDIChild).cdsMaster;" ya que yo le tengo que asignar otros valores y es lo único del form padre que tengo que modificar...al menos hasta ahoa, ja...!!!, y la pregunta del millón es ¿cómo...?.
Desde otro form lo creo y lo muestro, pero para que funcione correctamente, debo modificar los valores antes mencionados.
Del form padre, tengo muchísimos otros que se crean desde éste y funcionan correctamente, pero veo que tal vez esto último me pase a partir de ahora.

Código Delphi [-]
      with TCC824Detalles.Create(Application) do
      Begin
        sTDC  := cdsCCC.FieldByName('TDC009').AsString;
        sNDC  := cdsCCC.FieldByName('NDC009').AsString;
        sLDC  := cdsCCC.FieldByName('LDC009').AsString;
        ShowModal; // Aqui tengo mi problema....
      End;

Espero que se entienda el problema.

Desde ya, muchas gracias.

Saludos.
Responder Con Cita
  #2  
Antiguo 11-09-2012
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
Pues sería sencillo, añadiendo un método virtual, p. ej. DoOnShow (no sé si ya exista) que sea virtual.
Desde el padre, en el evento OnShow, llama a éste método, el cual se encarga de ejecutar lo del dataset que dices.
El formulario hijo sólo tendrá que sobreescribirlo y no llamar a inherited, por lo que dejaría de ejecutarse:

//El padre:
Código Delphi [-]
{ Conecto el dataset de la vista con el del form ABM o el Form ABM Master }
TFormPadre.OnShow(...)
begin
  DoOnShow;

  ActNuevo.Enabled := not (IsReadOnly);
  ActGuardar.Enabled := not (IsReadOnly);
  ActEditar.Enabled := not (IsReadOnly);
  ActDeshacer.Enabled := not (IsReadOnly);
  ActEliminar.Enabled := not (IsReadOnly);
end;

TFormPadre.DoOnShow;
begin
  if (IsABMDetail = false) and (IsABMLookup = false) and
     not (TfrmGenericGrid(MainForm.ActiveMDIChild).Entidad[6] = 'T') then
    dsChild.DataSet := TfrmGenericGrid(MainForm.ActiveMDIChild).cdsMaster;
end;

El hijo:

Código Delphi [-]
TFormHijo=class (TFormPadre)
protected
  procedure DoOnShow; override;
end;

procedure TFormHijo.DoOnShow;
begin
  //No quieres llamar a inherited para que no haga lo del dataset, por eso lo comento
  //inherited;

  //Cualquier otra cosa que el hijo tenga que hacer....
end;

Un saludo,
LoPiTaL
Responder Con Cita
  #3  
Antiguo 11-09-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
Uia...muy buena idea...a ponerlo en práctica y comentar que pasa...

Mil gracias...

Saludos.
Responder Con Cita
  #4  
Antiguo 11-09-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
Solo una duda...en el form padre, debería declarar el procedure DoOnShow como virtual ?
Es decir...

TFormPadre=class (TForm)
...
procedure DoOnShow; virtual;
...

Estoy revisando la ayuda de Delphi sobre la declaración virtual, pero no encuentro la info, además de ser un inútil con el idiona inglés...ja...

Gracias nuevamente.
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
redefinir métodos virtuales waremovil C++ Builder 1 24-11-2011 23:07:40
por que tengo que poner el nombre del form en el procedure DarkBlue OOP 4 17-08-2011 07:37:25
redefinir constructor de TForm Bauhaus1975 OOP 4 20-12-2008 18:06:40
Thread OnShow walito Varios 4 17-10-2007 00:36:24
Ocultamiento de método heredado supermilloriver OOP 4 22-03-2007 05:20:56


La franja horaria es GMT +2. Ahora son las 10:27:20.


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