FindComponent em todo o form

Delphi

21/10/2004

Tenho um RadioButton que está dentro de um Painel, que está dentro de um tabsheet, que está dentro de um pagecontrol. Mas suponhamos que não tenho o nome do painel, nem do tabsheet (são criados em tempo de execucao, assim como o radiobutton).
Como localizar um componente, dentro do form, indepentemente de onde ele estiver? Sem usar o For vI = 1 to TComponents.... Gostaria de ter um find direto...
Obrigado.


Crpavao

Crpavao

Curtidas 0

Melhor post

Carlos Pavão

Carlos Pavão

30/06/2015

Muito obrigado Mário. Na verdade nem lembro mais deste problema. Já faz 11 anos! Acho até interessante o seu interesse e é muito bom para as pessoas que pesquisam por aqui.
Grande abraço,
GOSTEI 1

Mais Respostas

Tap_pedroso

Tap_pedroso

21/10/2004

já tentou application.findcomponent(´nomedocomponente´)?


GOSTEI 0
Crpavao

Crpavao

21/10/2004

Na verdade, eu acho o componente atraves de vRadio.FindComponent(´RA123´). Depois faco:
If assigned(vRadio) Then
showmessage(´achou´)

Tudo isto funciona mas qdo troco o showmessage por :
vRadio.Checked := True dá acess violation.

Dá prá saber?

Obrigado


GOSTEI 0
Paulo_amorim

Paulo_amorim

21/10/2004

Olá

Você está fazendo [b:229ee49a15]vRadio[/b:229ee49a15].FindComponent ? Creio que o correto seria

vRadio := nil;
vRadio := Form1.FindComponent(´RA123´);
vRadio.Checked := Assigned(vRadio);


Espero que funcione
Até+


GOSTEI 0
Crpavao

Crpavao

21/10/2004

Paulo,

Dá erro pois vRadio está definico como tradioButton e, qdo usado o form1.component dá incompatibilidade entre tradiobutton e component.


GOSTEI 0
Paulo_amorim

Paulo_amorim

21/10/2004

Olá

Desculpe, eh necessário que se faça um TypeCast:

vRadio := TRadioButton( Form.FindComponent(´RA123´) );

Espero que ajude
Até+


GOSTEI 0
Crpavao

Crpavao

21/10/2004

Paulo,
O comando funcionou mas no assigned dá falso...
Tá f.., não?


GOSTEI 0
Fórum Vini

Fórum Vini

21/10/2004

[quote:4ee2e85e13=´Pavão´]Paulo,
O comando funcionou mas no assigned dá falso...
Tá f.., não?[/quote:4ee2e85e13]
Olá,
se dá falso é porque ele não achou..
Certifique-se de estar definindo o form como o Owner do componente na hora de criá-lo(Owner é diferente de Parent) :wink:
rd:= TRadioButton.Create(Form1); //Nesse exemplo Form1 é o Owner de rd



Espero ter ajudado,
Vinicius;


GOSTEI 0
Crpavao

Crpavao

21/10/2004

Vinicius,
Obrigado pela mão, mas o owner do radiobutton é um Painel, que foi criado em tempo de execução e não quero referenciá-lo (usá-lo). Dá prá encontrar este radiobutton sem indicar o Painel? Pois aí também este painel está dentro de um tabsheet.


GOSTEI 0
Crpavao

Crpavao

21/10/2004

sobe, cara, sobe...


GOSTEI 0
Fórum Vini

Fórum Vini

21/10/2004

[quote:0ad687cf3c=´Pavão´]Vinicius,
Obrigado pela mão, mas o owner do radiobutton é um Painel, que foi criado em tempo de execução e não quero referenciá-lo (usá-lo). Dá prá encontrar este radiobutton sem indicar o Painel? Pois aí também este painel está dentro de um tabsheet.[/quote:0ad687cf3c]
Não vejo motivo para você não querer usá-lo, mas então você vai ter que criar o RadioButton tendo o formulário como Owner, então o código irá funcionar normalmente.. observe que isso não impedirá que o RadioButton fique dentro do Panel, pois quem determina isso é a propriedade Parent, o Owner serve somente para o objeto pai destruir os filhos quando ele for destruído tbm...


GOSTEI 0
Paulo_amorim

Paulo_amorim

21/10/2004

Olá

COmo bem explicou o Vinicius, não tem problema deixar o TRadioButton no painel com Owner no Form, desde que o Parent seja o Painel

Creio que colocando o Form como Owner ele acha certinho...

Até+


GOSTEI 0
Crpavao

Crpavao

21/10/2004

Valeu Paulo, valeu Vinicius. Acho que agora tenho informação suficiente para tocar op barco.
Qq coisa estamos aqui.
Obrigado pela força.
Té outra..


GOSTEI 0
Mário Filho

Mário Filho

21/10/2004

...

var
vRadio: TRadioButton;
begin
vRadio := nil;
vRadio := TRadioButton(imp_guias_bolo.FindComponent('QRLabel'+trim(inttostr(i1))));
if Assigned(vRadio) then
TRadioButton(imp_guias_bolo.FindComponent('QRLabel'+trim(inttostr(i1)))).Checked:=true
else
TRadioButton(imp_guias_bolo.FindComponent('QRLabel'+trim(inttostr(i1)))).Checked:=false;

end;
GOSTEI 0
Mário Filho

Mário Filho

21/10/2004

...

*// Corrigindo:
*// o form1 deve estar declarado na sua Uses lá em cima no inicio do programa

var
vRadio: TRadioButton;
begin
vRadio := nil;
vRadio := TRadioButton(Form1.FindComponent('QRLabel'+trim(inttostr(i1))));
if Assigned(vRadio) then
TRadioButton(Form1.FindComponent('QRLabel'+trim(inttostr(i1)))).Checked:=true
else
TRadioButton(Form1.FindComponent('QRLabel'+trim(inttostr(i1)))).Checked:=false;

end;
GOSTEI 0
POSTAR