Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear form si solo tengo su nombre como string (https://www.clubdelphi.com/foros/showthread.php?t=26186)

RJF 15-10-2005 18:58:49

Crear form si solo tengo su nombre como string
 
Eso, en el proyecto tengo varios formularios y en una matriz el nombre de cada uno de ellos, ahora como puedo crear los formularios

Application.CreateForm(TForm2,vFormu);

si yo en lugar de tener Tform2 :TFormClass tengo 'Tform2':String
Vale acalrar que no puedo agregar nada en los demas formularios ya creados, solo en el formulario que se va a encargar de crearlos, es medio raro lo que pido pero creanme que necesito eso para una etapa de mi sistema.

Al que le interese le cuento el rollo, resulta que estoy creando los niveles de usuarios y la seguridad en los distintos Formularios y botones de los mismos y para esto se me ocurrio guardar el nombre de todos los botones de cada formulario en una tabla con los correspondientes permisos, para obtener una lista de los formularios hice un parseo del proyecto.dpr donde se guardan los nombres de las unidades y ahora en un formulario de configuracion en el sistema en tiempo de ejecucion necesito hacer esto
Obtener la lista de formularios
Crear los formularios en tiempo ejecucion (nunca los tengo creados) para asi poder recorrer los botones y crear todo el tema del formulario de configuracion, se entendio ? sino no importa mucho solo necesito lo del principio.

Muchas gracias
PD: he leido un par de mensajes de foro en donde hablan de crear las clases y demas pero creo que esta no es mi solucion, mi problema es que no tengo el nombre del formulario mas que como string.

roman 15-10-2005 21:08:05

Algo como

Form := TForm(GetClass('TForm2'));

// Saludos

RJF 17-10-2005 18:18:52

Gracias ROMAN aunque sigo con problemas, mira
Código Delphi [-]
var
i,j : Integer;
vFormu: TForm;
formu: Tformclass;
texto,cadena: string;
archivo,archivo2 : textfile;
begin
...
 
AssignFile(archivo,'listaForm.dat');
Reset(archivo);
while not Eof(archivo) do
begin
  Readln(archivo,texto);
  Formu := TFormClass(GetClass('form2')); //con 'Tform2' tampoco funciona
  Application.CreateForm(formu,vFormu);
  for j := 0 to vformu.ComponentCount -1 do
   if vformu.Components[j] is TButton then
   begin
    TButton(vformu.Components[j]).enabled := false;
    ShowMessage(TButton(vformu.Components[j]).Caption);
   end;
end;
CloseFile(archivo);
end;
Algo que vean mal ? Sugerencias ?

Editado:
Creo que estoy encerrado en mi problema, porque tengo que registrar la clase de Tform2 para que lo anterior funcione pero vuelvo a lo mismo solo tengo el nombre del formulario como string

ASAPLTDA 09-12-2021 14:53:28

Crear forma por nombre
 
Código Delphi [-]
procedure CreateFormFromName( const FormName : string);
var 
  fc : TFormClass; 
  f  : TForm;
begin 
  fc := TFormClass(FindClass(FormName)); 
  f  := fc.Create(Application); f.Show;
end;

en la forma debe añadir:


initialization
RegisterClass(T Fnombre de la forma);

ASAPLTDA 09-12-2021 18:18:08

crear forma por nombre firemonkey Solucion
 
https://stackoverflow.com/questions/...e-form-by-name

Código Delphi [-]
procedure TFMENU.CreateFormFromName(const FormName : string);
var
  ObjClass: TFmxObjectClass;
  NewForm: TCustomForm;
  w_ModalResult:Integer;
begin
 // ObjClass := TFmxObjectClass(GetClass(ClassName));
  ObjClass := TFmxObjectClass(GetClass(FormName));

  if ObjClass = nil then
    Exit;

  NewForm := ObjClass.Create(Self) as TCustomForm;
  if Assigned(NewForm) then
     begin
      NewForm.ShowModal(
      procedure(ModalResult: TModalResult)
      begin
        w_ModalResult:= ModalResult ;
 

      end);
     end;
end;


PD SOLUCION ENVIADA POR ULISES V EN WHATSAPP DELPHI EN ESPAÑOL


La franja horaria es GMT +2. Ahora son las 01:07:04.

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