Chamando forms a partir de uma String previamente criados
23/04/2020
0
Boa noite,
Tenho uma aplicação com vários Forms previamente criados pela plataforma do deplhi 2010 e são chamados pelo Delphi atraves de um Menu.
Ex:
Cadastro de Clientes:
CadastroCliente:=TcadastroCliente.Create(Self);
CadastroCliente.Showmodal;
CadastroCliente.Release;
Cadastro de Produtos:
CadastroProduto:=TcadastroProduto.Create(Self);
CadastroProduto.Showmodal;
CadastroProduto.Release;
É assim que eu chamo eles na minha aplicação. Agora quero ter um cadastro de opções onde eu vou cadastrar o programa e o Form que deve
ser chamado e criado dinamicamente. Nesta tabela vou ter um titulo e o nome do Form Ex:
Titulo: Cadastro geral de produtos
Form: CadastroProduto
Titulo: Cadastro geral de Clientes
Form: CadastroCliente
Como devo proceder para criar e mostrar estes Forms dinamicamente em tempo de execução.
Obr.
Tenho uma aplicação com vários Forms previamente criados pela plataforma do deplhi 2010 e são chamados pelo Delphi atraves de um Menu.
Ex:
Cadastro de Clientes:
CadastroCliente:=TcadastroCliente.Create(Self);
CadastroCliente.Showmodal;
CadastroCliente.Release;
Cadastro de Produtos:
CadastroProduto:=TcadastroProduto.Create(Self);
CadastroProduto.Showmodal;
CadastroProduto.Release;
É assim que eu chamo eles na minha aplicação. Agora quero ter um cadastro de opções onde eu vou cadastrar o programa e o Form que deve
ser chamado e criado dinamicamente. Nesta tabela vou ter um titulo e o nome do Form Ex:
Titulo: Cadastro geral de produtos
Form: CadastroProduto
Titulo: Cadastro geral de Clientes
Form: CadastroCliente
Como devo proceder para criar e mostrar estes Forms dinamicamente em tempo de execução.
Obr.
Paulo
Curtir tópico
+ 0
Responder
Posts
26/04/2020
Emerson Nascimento
tente assim:
a sintaxe é:
para funcionar você precisa registrar a classe. isso é possível adicionando
em cada formulário, no final do código, imediatamente antes do end.
por exemplo:
no form CadastroProduto:
no form CadastroCliente:
e assim por diante, em todos os forms que deseja chamar a partir da função CriaFormPeloNome().
ou, de forma mais simples, registrando os formulários no evento OnCreate do teu form principal. assim você pode registrar todos de uma vez.
note que uma forma elimina a outra. se optar por registrar pelo OnCreate do form principal, não é necessário registrar em cada form.
procedure TFormPrincipal.CriaFormPeloNome(const FrmNome: string); var FrmClass: TFormClass; Frm: TForm; begin try FrmClass := TFormClass(FindClass('T'+FrmNome)); Frm := FrmClass.Create(Application); Frm.ShowModal; Frm.Release; except on E:EClassNotFound do begin ShowMessage('Classe não encontrada.'+Chr(13)+ 'Para utilização de CriaFormPeloNome() é necessário registrar a classe.'); end; end; end;
a sintaxe é:
CriaFormPeloNome('CadastroProduto');
para funcionar você precisa registrar a classe. isso é possível adicionando
initialization RegisterClass(ClasseDoForm);
por exemplo:
no form CadastroProduto:
initialization RegisterClass(TCadastroProduto);
initialization RegisterClass(TCadastroCliente);
ou, de forma mais simples, registrando os formulários no evento OnCreate do teu form principal. assim você pode registrar todos de uma vez.
procedure TFormPrincipal.FormCreate(Sender: TObject); begin RegisterClass(TCadastroCliente); RegisterClass(TCadastroProduto); [...] end;
note que uma forma elimina a outra. se optar por registrar pelo OnCreate do form principal, não é necessário registrar em cada form.
Responder
Clique aqui para fazer login e interagir na Comunidade :)