Fórum TComponentClass #282081
18/05/2005
0
Desde já muito obrigado pela atenção.
Davicarrano
Curtir tópico
+ 0Posts
18/05/2005
Davicarrano
eu tenho uma variavel com o nome dele
eu quero chamar ele no programa
entao eu tenho q usar a função Application.CreateForm
so que o 1º parametro é do tipo TComponentClass
entao eu tenho q achar o TComponentClass do formulario
eu fiz assim
NomeForm:=´form_Clientes´
Application.CreateForm(FindComponent(NomeForm),NomeForm);
mas ai da erro de tipos incompativeis TComponentClass e TComponent
Gostei + 0
18/05/2005
Marioguedes
TComponentClass não é uma propriedade do formulário e sim uma coisa chamada ´Referencia de Classe´. Isso possibilta fazer rotinas genéricas de instanciação de classes sem que necessariamente se conheça a classe que será usada, como é o caso de CreateForm.
Gostei + 0
18/05/2005
Massuda
var Componente: TComponent; ... Componente := FindComponent(´...NomeDoComponente...´); // nome da classe: Componente.ClassName // referência da classe: Componente.ClassType
Application.CreateForm(FindComponent(NomeForm).ClassType, NomeForm);
Gostei + 0
18/05/2005
Davicarrano
Gostei + 0
18/05/2005
Massuda
Application.CreateForm(TComponentClass(FindComponent(NomeForm).ClassType), NomeForm);
Gostei + 0
18/05/2005
Davicarrano
com a ajuda de vcs deu pra elaborar um esquema q funciona
esse codigo
Application.CreateForm(TComponentClass(FindClass(´T´+NomeForm)), NomeForm);
para criar o form e realmente so funciona se registrar a classe
initialization
RegisterClass(TfrmClientes);
no form frmClientes...
valeu galera...
Gostei + 0
18/05/2005
Marco Salles
No primeiro tópico
http://forum.devmedia.com.br/viewtopic.php?t=63052&sid=a032bccda9d42905441bd9fa3ea27732
Citação do tópico
Neste Ultimo , voce chegou a uma conclusão:
[b:ba530d1bf3]O Problema que o segundo paramentro Deste Método , no meu entendimento , não é o Nome do Form [/b:ba530d1bf3].... :arrow: Fica então , um código , sem utilidade :cry: :cry: :cry:
Porque tanto faz Escrever
Application.CreateForm(TComponentClass(FindClass(´T´+frmClientes)), frmClientes); [/quote] Ou Application.CreateForm(TfrmClientes,frmClientes);
Não sei se estou conseguindo atingir o[color=darkred:ba530d1bf3][b:ba530d1bf3] Ponto X[/b:ba530d1bf3][/color:ba530d1bf3] Da questão
Eu acho que seria maravilhoso , colocar tambem o segundo parametro No [color=darkred:ba530d1bf3][b:ba530d1bf3]Formato String [/b:ba530d1bf3][/color:ba530d1bf3], como voce consegui , fazer com o Primeiro
[b:ba530d1bf3]E Este que é o Ponto[/b:ba530d1bf3]... :wink: Feito isto , ai sim , voce realmente atingiu seu objetivo[color=darkred:ba530d1bf3][/color:ba530d1bf3]
Gostei + 0
19/05/2005
Davicarrano
Gostei + 0
19/05/2005
Marco Salles
Application.CreateForm(TComponentClass(FindClass(´T´+frmClientes)), frmClientes);
No primeiro parametro , sim , mas no segundo paramentro desse jeito
acho que não da..
Por exemplo:
Suponha um Edit1.text:=frmClientes
a instrução
Application.CreateForm(TComponentClass(FindClass(´T´+Edit1.Text)), Edit1.Text);
:arrow:
[b:b28aac6cb3]Cho que nen compila[/b:b28aac6cb3] :cry: :cry: :cry: :cry:
Entendeu aonde estou querendo chegar :?: :?: :?:
Gostei + 0
19/05/2005
Davicarrano
Gostei + 0
19/05/2005
Marco Salles
Veja amigo... Eu tb Testei e olhe o erro que dá
[URL=http://www.imageshack.us][img:9ec021a496]http://img282.echo.cx/img282/6246/imagemerropassagemparametro4xn.jpg[/img:9ec021a496][/URL]
[b:9ec021a496]Erro que deveria da mesmo.. Não sei como voce consegui[/b:9ec021a496] :?: :?:
Gostei + 0
20/05/2005
Davicarrano
por exemplo:
var nomeform:string;
...
nomeform:=´form2´;
Application.CreateForm(TComponentClass(FindClass(´T´+nomeform)), nomeform);
Esse tipo de discussao tira muitas duvidas da gente...
Obrigado Marco Salles, pela atenção ...
Gostei + 0
20/05/2005
Marco Salles
Veja , coloquei a Variavel String . conforme voce sugeriu
Não da erro de compilação
Mas na hora de executar eu obtive erro
o Meu código Foi:
procedure TForm1.Button1Click(Sender: TObject); var nomeform:string; begin nomeform:=´form2´; Application.CreateForm(TComponentClass(FindClass(´T´+nomeform)), nomeform); Form2.show; end;
Qual o código que voce esta usando para Apresentar o Formulário Supostamente Criado Por voce Usando a Variavel NomeForm :?: :?:
Coloque aqui , Por gentileza
Gostei + 0
20/05/2005
Davicarrano
var
nomeform:string;
begin
nomeform:=´form2´;
Application.CreateForm(TComponentClass(FindClass(´T´+nomeform)), nomeform);
TForm(nomeform).show;
end;
e no fim do Form2 eu coloquei
initialization
RegisterClass(TForm2);
Lembrando que la em Project - Options, eu tirei o form 2 do Auto-Create e coloquei no Availables Forms
Olha se assim vai funcionar...
Gostei + 0
20/05/2005
Massuda
Postei no [url=http://forum.clubedelphi.net/viewtopic.php?t=63052]seu outro tópico[/url] uma função que criava um form a partir do nome da classe do form (é exatamente o que você está fazendo). Dê uma olhada e veja a diferença que existe entre elas.
Tem um problema com o seu código que é um memory leak que ocorre cada vez que o form é criado; a memória utilizada pela string que você passa como argumento é perdida quando o form é criado. Dependendo do uso da função no programa isso pode representar algumas dezenas de bytes por chamada que vão sendo consumidos da memória e nunca são retornados.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)