Componente a partir de uma string

Delphi

25/10/2004

Gostaria de saber se é possível criar um componente a partir de uma string onde eu teria por exemplo ´TEdit´, ´TDBGrid´, para poder criar um formulário em tempo de execução me baseando em uma tabela onde eu informo que tipo de componente representará cada campo.


Gabriel Ferrarini

Gabriel Ferrarini

Curtidas 0

Respostas

Afarias

Afarias

25/10/2004

Vc pode usar a função [b:bd9010df10]FindClass[/b:bd9010df10]

ex::

procedure TForm1.CriarObjeto(ClasseObjeto: string);
var
  Classe: TControlClass;
  Objeto: TControl;
begin
  Classe := TControlClass(FindClass(ClasseObjeto));
  Objeto := Classe.Create(Self);
  Objeto.Parent := Self;
  {...}
end;


Neste exemplo ClasseObjeto deve ser uma classe derivada de TControl (TButton, TEdit, etc...)

Para usar a função FindClass as classes q se deseja trabalhar devem estar previamente Registradas. Para isso vc usa a função RegisterClasses, ex:

initialization
  RegisterClasses([TButton, TEdit, TPanel]);
finalization
  UnRegisterClasses([TButton, TEdit, TPanel]);




T+


GOSTEI 0
Gabriel Ferrarini

Gabriel Ferrarini

25/10/2004

Cara... valeu... era isso mesmo.
Só gostaria de uma explicaçãozinha sobre a linha:

Classe := TControlClass(FindClass(Nome));



GOSTEI 0
Gabriel Ferrarini

Gabriel Ferrarini

25/10/2004

Vixi, acho que deu bosta...
Agora tá dando internal error SY424.

Sabe o que é?


GOSTEI 0
Afarias

Afarias

25/10/2004

|Classe := TControlClass(FindClass(Nome));

1) FindClass retorna a classe pelo nome contido na variável Nome
2) Como o retorno da função é TPersistentClass, é realizado um TypeCast para TControlClass


|Vixi, acho que deu bosta...
|Agora tá dando internal error SY424.

Erros internos não tem exatamente um motivo -- a Borland recomenda q estes erros sejam enviados para ´investigação´ (provavelmente algum bug)


T+


GOSTEI 0
Gabriel Ferrarini

Gabriel Ferrarini

25/10/2004

Então se eu chamar um classe como uma função passando como parâmetro outra classe é feito um typecast??

Se for aprendi mais uma :D


GOSTEI 0
Afarias

Afarias

25/10/2004

|Então se eu chamar um classe como uma função passando como
|parâmetro outra classe é feito um typecast??

+/- isso... :D

Isto não é só para classes mas para qualquer tipo.


T+


GOSTEI 0
POSTAR