Selecao DevMedia QUERO SER PRIME

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 !


Cabal

Cabal

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:
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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar