Fórum Componente a partir de uma string #255829

25/10/2004

0

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

Responder

Posts

25/10/2004

Afarias

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+


Responder

Gostei + 0

25/10/2004

Gabriel Ferrarini

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

Classe := TControlClass(FindClass(Nome));



Responder

Gostei + 0

25/10/2004

Gabriel Ferrarini

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

Sabe o que é?


Responder

Gostei + 0

25/10/2004

Afarias

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


Responder

Gostei + 0

25/10/2004

Gabriel Ferrarini

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


Responder

Gostei + 0

25/10/2004

Afarias

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


Responder

Gostei + 0

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

Aceitar