Ver Mensaje Individual
  #2  
Antiguo 10-04-2005
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Reputación: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile RegisterClass y TClassFinder.GetClasses

¡Buen día a todos!

Mauro:

Una manera de hacerlo es asegurándote de que cada clase de forma (formulario, como tu le llamas) sea registrada al inicio de la aplicación. Así, podrás utilizar un objeto TClassFinder para obtener una lista de todas las formas registradas, aún cuando no se tenga creada una instancia de alguna de ellas.

Supongiendo que tenemos dos formas en nuestra aplicación, TForm1 y TForm2, dónde la primera es autocreada como forma principal y la segunda no se instancía en ningún momento; con el código
Código Delphi [-]
...
implementation

{$R *.dfm}

Initialization
  RegisterClass (TForm2);
end.
al final de la unidad de la forma Form2, y el código
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    Procedure FormaRegistrada (Clase :TPersistentClass);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

{ El método auxiliar FormaRegistrada es la rutina de retrollamada
  ("callback") auxiliar, a utilizar por el método de enumeración
  TClassFinder.GetClasses }
Procedure TForm1.FormaRegistrada (Clase :TPersistentClass);
Begin
  { Si la clase enumerada es descendiente de TForm } 
  If (Clase <> TForm) And Clase.InheritsFrom (TForm) Then
    { Agregar su nombre en el cuadro de texto Memo1 } 
    Memo1.Lines.Add (Clase.ClassName);
End;

{ Manejadores de eventos }

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;

  With TClassFinder.Create Do
    Try
      { Enumerar todas las clases registradas }
      GetClasses (FormaRegistrada);
    Finally
      Free;
    End;
end;

Initialization
  RegisterClass (TForm1);
end.
en la unidad de TForm1, al oprimir el usuario el botón Button1 se introducirán en el cuadro de texto Memo1 los nombres de las dos clases de formas (TForm1 y TForm2).

Así pues, para cada forma adicional del proyecto sólo hay que agregar su respectivo registro (RegisterClass (TFormX);) en la sección Initialization de su unidad .pas.

Espero esto sea de utilidad, seguimos en contacto.

Al González.

Echale un vistazo a los nuevos Cursos Delphi
Responder Con Cita