Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 02-08-2003
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
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 |
+----------+--------+
Cuando obtienes el nombre de una clase la fábrica te da la referencia de clase necesaria para construir la forma.

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.
En la unidad de cada formulario que desees 'almacenar' en la tabla registras la clase:

Código:
unit Unit1;

interface

type
  TForm1 = class(TForm)
  ...
  end;

implementation

uses FabForm;

initialization
  Fabrica.Registrar(TForm1);
end.
Finalmente, suponte que NombreForma es una variable string que contiene el nombre de una forma obtenido de tu tabla y que ClaseForma es una variable de tipo TFormClass. La asignación

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.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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:31:07.


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