![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#4
|
||||
|
||||
|
Me parece que no captaste la esencia:
Para crear una forma (u otro objeto) de manera genérica necesitas referencias de clases mientras que lo que tú tienes son los nombres de las clases que obtienes de una tabla. La fábrica mantiene una relación entre las referencias y los nombres: Código:
+----------+--------+ | Nombre | Clase | +----------+--------+ | 'TForm1' | TForm1 | | 'TForm2' | TForm2 | | 'TForm3' | TForm3 | | 'TForm4' | TForm4 | +----------+--------+ A continuación te pongo la unidad que define la fábrica. Puedes copiarla y pegarla completa: Código:
unit FabForm;
interface
uses
Classes, Forms;
type
TFabrica = class
private
Lista: TStringList;
function GetClase(Nombre: String): TFormClass;
public
constructor Create;
destructor Destroy; override;
procedure Registrar(Clase: TFormClass);
property Clases[Nombre: String]: TFormClass read GetClase;
end;
var
Fabrica: TFabrica;
implementation
constructor TFabrica.Create;
begin
inherited;
Lista := TStringList.Create;
end;
destructor TFabrica.Destroy;
begin
Lista.Free;
inherited;
end;
procedure TFabrica.Registrar(Clase: TFormClass);
var
I : Integer;
begin
I := Lista.IndexOf(Clase.ClassName);
// Registrar si no lo está ya
if I = -1 then Lista.AddObject(Clase.ClassName, TObject(Clase));
end;
function TFabrica.GetClase(Nombre: String): TFormClass;
var
I : Integer;
begin
I := Lista.IndexOf(Nombre);
Assert(I <> -1, 'Clase no registrada');
Result := TFormClass(Lista.Objects[i]);
end;
initialization
Fabrica := TFabrica.Create;
finalization
Fabrica.Free;
end.
Código:
unit Unit1; interface type TForm1 = class(TForm) ... end; implementation uses FabForm; initialization Fabrica.Registrar(TForm1); end. ClaseForma := Fabrica.Clases[NombreForma]; te da la referencia de clase que necesitas y ahora puedes crear el formulario con: ClaseForma.Create(nil) Espero que ahora esté más claro. Si tienes dudas pregunta otra vez. // Saludos Última edición por roman fecha: 02-08-2003 a las 04:56:54. |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|