Transformar var string em TComponentClass

02/10/2004

Boa noite colegas,

Como faço para transformação uma variavel string em tcomponetclass.

A intenção é poder chamar um formulario atraves dessa variavel string.

Desde já agradeço a atenção.

Antero Mendes


Anteromendes

Respostas

02/10/2004

Afarias

Vc deve usar o mecanismo de stream do Delphi. Usando a função FindClass para pegar a classe do Form q deseja criar, ex::


procedure TForm1.Button1Click(Sender: TObject);
var
  OutroFormClass: TFormClass;
  OutroForm: TForm;
begin

  // pegue a classe do form
  OutroFormClass := TFormClass(FindClass(´TForm2´));

  // crie e use o form como desejar, ex:
  Application.CreateForm(OutroFormClass, OutroForm);
  OutroForm.Show;

end;



Bom, mas para q isso funcione, a classe TForm2 deve estar registrada, para tanto, adicione ao final da unidade onde está declarada TForm2 o seginte código::

{... código da unit ...}

initialization
  RegisterClass(TForm2);

finalization
  UnRegisterClass(TForm2);

end.




T+


Responder Citar

04/10/2004

Anteromendes

Companheiro,

Realizei o teste com as informações que me enviastes, contudo ocorreu um erro dizendo ´class not found´.

fiz dessa maneira :

procedure Tform1.chama_form(aform : string);
var
  tela  : TFormClass;
  xform : TForm;
begin
  tela := TFormClass(FindClass(´aform´));
  Application.CreateForm(tela, xform);
  xform.ShowModal;
  xform.Free;
end;
.....
chama_form(´tform2´)


Registrei a classe (Tform2) no form2 e ainda persiste o erro. Não sei se está faltando alguma coisa. O form2 está para ser criado em tempo de execução.

[]s,


Responder Citar

04/10/2004

Afarias

Vc está colocando a variável entre aspas!!

tela := TFormClass(FindClass(´aform´));

quando tem q ser::

tela := TFormClass(FindClass(aform));


sem as aspas (já q aform é uma variável e não uma ´constante string´)


T+


Responder Citar

04/10/2004

Anteromendes

Companheiro,

Nota dez amigo, realmente eu coloquei de forma errada.

Muito obrigado pela ajuda, quando precisar estamos ai !

Atenciosamente,


Responder Citar