Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Saber que Formularios no se crearon (https://www.clubdelphi.com/foros/showthread.php?t=20261)

Mauro.NET 10-04-2005 18:27:21

Saber que Formularios no se crearon
 
Hola, como se puede saber via codigo todos los formularios que tiene
disponible mi aplicacion cuando aun estos no han sido creados?

Cuando hago un recorrido de Application.Components solo me dice
los formularios creados que se encuentran en memoria.

Por ahi he leidos augunos topicos del foro acerca de ello, pero hasta ahora nadie descubrio la forma de hacerlo?

Gracias.

Al González 10-04-2005 21:58:27

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

roman 11-04-2005 17:18:37

Muy interesante Al. Nunca había oído hablar de esta clase.

// Saludos


La franja horaria es GMT +2. Ahora son las 00:10:02.

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