Fórum Como Criar Forms em tempo de execução passando string? #324911
06/07/2006
0
Olá ! Gostaria de Saber como posso criar um form em tempo de execução, passando como parametro uma string. EX:
CriarForm(´Form_Menu´);
.
.
.
Procedure CriarForm(formulario:String);
...
end;
assim posso criar todos os forms da minha aplicação, somente passando o nome dos forms.
Valeu galera !
CriarForm(´Form_Menu´);
.
.
.
Procedure CriarForm(formulario:String);
...
end;
assim posso criar todos os forms da minha aplicação, somente passando o nome dos forms.
Valeu galera !
Cabal
Curtir tópico
+ 0
Responder
Posts
07/07/2006
Micheus
Vc poderá fazer isto se o nome passado for o nome da classe deste form.
Vou mostrar meu procedimento para fazer isto (podem haver outros):
1) Considero que os form´s serão criados em tempo de execução. Logo, no máximo nas opções de projeto estará definido para auto criação apenas o form principal;
2) a procedure para a criação do form ficaria assim:
3) Para poder criar os form´s deste modo, é necessário que a classe esteja registrada. Então alteramos o fonte do projeto da seguinte maneira:
a) acrescentamos a unit Classes na cláusula uses;
b) registramos os form´s na inicialização do programa, como no exemplo abaixo:
Para criar e mostrar o Form2 em tempo de execução, fariamos algo como:
Espero ter ajudado.
Vou mostrar meu procedimento para fazer isto (podem haver outros):
1) Considero que os form´s serão criados em tempo de execução. Logo, no máximo nas opções de projeto estará definido para auto criação apenas o form principal;
2) a procedure para a criação do form ficaria assim:
procedure CriaForm(StrFormClass :string); var Form :TForm; FormClass :TPersistentClass; begin try FormClass := FindClass(StrFormClass); except Raise Exception.CreateFmt(´Erro tentando localizar a classe do formulário "¬s"´, [StrFormClass]); end; Application.CreateForm(TComponentClass(FormClass), Form); if Assigned(Form) then try Form.ShowModal; finally Form.Free; end; end;
3) Para poder criar os form´s deste modo, é necessário que a classe esteja registrada. Então alteramos o fonte do projeto da seguinte maneira:
a) acrescentamos a unit Classes na cláusula uses;
b) registramos os form´s na inicialização do programa, como no exemplo abaixo:
program Projeto1; uses Classes, Forms, Unit1 in ´uMainForm.pas´ , Unit2 in ´Unit2.pas´ ; begin RegisterClasses([TForm2]); // registra a classe do Form2 Application.Initialize; Application.CreateForm(TMainForm, MainForm); Application.Run; end.
Para criar e mostrar o Form2 em tempo de execução, fariamos algo como:
procedure TMainForm.Button1Click(Sender: TObject); begin CriaForm(´Form2´); end;
Espero ter ajudado.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)