Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #9  
Antiguo 29-05-2004
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 dchaparro
Código Delphi [-]
procedure TFormBase.BtnNuevoClick(Sender: TObject);
begin
  with TFormEditBase.Create(Application) do
    try
      ShowModal;
    finally
      Free; 
  
  { etc } 
end;
El problema aquí es que el formulario base no conoce cuáles serán los descendientes del formulario de edición.

Si te fijas, tu necesitarías poder tener

TFormEditBase1.Create(Application)
TFormEditBase2.Create(Application)
...
TFormEditBaseN.Create(Application)

según sea el caso. Pero la sentencia debe estar en el formulario base y no en cada descendiente. Entonces requerirías poner la clase del formulario de edición (TFormEdit1, TFormEdit2, etc.) en una variable que tomase uno de estos valores según corresponda. Pero si lees detenidamente verás que es un poco extraño: los valores de dicha variable serían tipos de datos de manera que, ¿cuál sería el tipo de datos de tal variable?

La respuesta es: referencias de clase. Las referencias de clase son tipos de datos cuyas variables (variables de este tipo) toman como valores otros tipos de datos.

Para usarla declara una para tu formulario base de edición:

Código Delphi [-]
type
  TFormEditBase = class(TForm)
    ...
  end;

  TFormEditBaseClass = class of TFormEditBase;

Así, una variable de tipo TFormEditBaseClass podrá tomar como valores cualquier clase descendiente de TFormEditBase.

En la práctica lo que podrías hacer es agregar una de estas variables al formulario base:

Código Delphi [-]
type
  TFormBase = class(TForm)
  protected
    FormEditClass: TFormEditBaseClass;
  end;

y cambiar la creación del formulario de edición así:

Código Delphi [-]
procedure TFormBase.BtnNuevoClick(Sender: TObject);
begin
  with FormEditClass.Create(Application) do
    try
      ShowModal;
    finally
      Free; 
  
  { etc }
end;

Entonces, lo único que debes hacer es asignar el tipo correcto en el momento adecuado, por ejemplo, en el constructor de cada descendiente de TFormBase:

Código Delphi [-]
constructor TFormBaseN.Create(AOwner: TComponent);
begin
  inherited;

  FormEditClass := TFormEditBaseN;
end;

Para más información busca "Class references" en la ayuda de Delphi.

// Saludos

Última edición por roman fecha: 29-05-2004 a las 17:14:52.
Responder Con Cita
 



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 23:20:30.


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