Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mostrar forms segun nombre variable (https://www.clubdelphi.com/foros/showthread.php?t=20034)

lbidi 04-04-2005 14:53:47

Mostrar forms segun nombre variable
 
Hola a todos.
Resulta que en la empresa donde trabajo, tenemos las opciones de los menues en una base de datos. ( dbf y clipper ), y a su vez, el programa asociado a cada opcion. Ahora pasando los programas a delphi, nos encontramos con el siguiente problema:
Como podemos hacer para crear un form segun el nombre de la funcion que se encuentre en la opcion seleccionada de la base.
ex: La primera opcion de un menu es una funcion llamada "ingreso".
Creamos un form llamado "ingreso", pero como hacemos para convertir el
string "ingreso" de la base en un form que pueda ser llamado con ej.
ingreso.show. Me explico.
Tambien nuestra idea no es tener todos los form autocreate, sino crearlos on runtime.
Muchas gracias

Neftali [Germán.Estévez] 04-04-2005 17:31:37

Hay varias formas de plantearlo, una podría ser la siguiente...

(1) En tu Base de Datos almacena además de lo que necesites para el menú la clase del form asociado. Por ejemplo:
Ingresos => TFormIngresos (como esté definida la clase de ese form en su Unit .PAS).

(2) En tu formulario principal registra todas las clases de los forms a utilizar.

Código Delphi [-]
  ...
  initialization
    RegisterClass(TForm2);
    RegisterClass(TForm3);
    RegisterClass(TFormIngresos);
  
  finalization
    UnregisterClass(TForm2);
    UnregisterClass(TForm3);
    UnregisterClass(TFormIngresos);

(3) Una vez registradas todas las clases puedes crear los formulario obteniendo la clase correspondiente (si ha sido registrada) utilizando GetClass.

Código Delphi [-]
  procedure TForm1.Button1Click(Sender: TObject);
  var
    cl:TPersistentClass;
    F:TForm;
  begin
    // Acceder a la clase a partir del nombre (lo tendrás en la Base de Datos)
    cl := GetClass('TFormIngresos');  
    // La ha encontrado?   (debe estar registrada)
    if Assigned(cl) then begin
      // Crear el form
      F := TFormClass(cl).Create(Application);
      F.Show;
    end;
  end;

Espero haber sido claro.

jachguate 04-04-2005 18:18:08

Te recomiendo la lectura del siguiente hilo.

http://www.clubdelphi.com/foros/show...=RegisterClass

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 19:32:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi