quot;FindComponentquot; não funciona.

Delphi

12/04/2004

Bom dia pessoal.

Tenho que localizar um componente no form e o FindComponent não funciona. Olhem o código abaixo.

  qrlNomeSocio2: TQRLabel;
  qrlNomeSocio3: TQRLabel;
  qrlNomeSocio1: TQRLabel;
  // os componentes do form;

....

procedure TForm.ButtonClick(sender: TObject);
var i: integer;
begin
  for i := 1 to 4  do
   begin
    if FindComponent(´qrlNomeSocio´+IntToStr(i)) <> nil then
      SHowMEssage(´O componente existe!´)
     else
      ShowMessage(´O componente não existe!´);
    end; 
end;


Ele sempre cai na msg falando que o componente não existe.

Alguem saberia me dizer aonde está o erro, ou se o findcomponent tem alguma restrição com componentes do tipo QRLabel??

Qualquer ajuda é bem vinda..

Lucas!


Lucas Silva

Lucas Silva

Curtidas 0

Respostas

Motta

Motta

12/04/2004

tente

procedure TForm.ButtonClick(sender: TObject);
var i: integer;
begin
for i := 1 to 4 do
begin
if Assigned(FindComponent(´qrlNomeSocio´+IntToStr(i))) then
SHowMEssage(´O componente existe!´)
else
ShowMessage(´O componente não existe!´);
end;
end;


GOSTEI 0
Lucas Silva

Lucas Silva

12/04/2004

Motta,
Continua dando o mesmo erro, com este código que você me passou ai.

Alguem sabe como resolver isto?


GOSTEI 0
Nildo

Nildo

12/04/2004

Ok, vamos lá...
Os QrLabels ficam dentro de um TQuickRep certo?
O FindComponente NÃO pocura por componentes em todo seu formulário. Quando você coloca um QrLabel dentro de um TQuickRep, a propriedade PARENT destes QrLabels ficam sendo este TQuickRep.
Então o que você deve fazer é ao invez de usar o FindComponent, usar o [b:a4b93fb994]QuickRep1[/b:a4b93fb994].FindComponent
Será que isso resolve?


GOSTEI 0
Motta

Motta

12/04/2004

O Nildo tem razão !!


GOSTEI 0
Lucas Silva

Lucas Silva

12/04/2004

Nildo,
Isso que você pensou é totalmente lógico, mais também não deu certo.

Tentei fazer alguns exemplos(exemplos super básicos) aqui usando o FindComponent e nenhum deu certo.


Alguma sujestão? (ou exemplos)


Lucas!


GOSTEI 0
Lucas Silva

Lucas Silva

12/04/2004

O Nildo tem razão !!

Deve tá acontecendo alguma coisa aqui, a função FindComponent não dá nenhum resultado....


GOSTEI 0
Nildo

Nildo

12/04/2004

Na verdade ele retorna NIL se não achar.
Faz assim, clica sobre o QRLabel e apert SHIFT+ALT+F11 (object treeview) e veja dentro de qual controle (componente) que este QRLabel está. Vamos supor que esteja dentro de algum outro componente que esteja dentro do QuickRep, caso aconteça isso então nao vai funcionar. Então voce tem que fazer o mesmo esquema:

ComponenteOndeOLabelEstá.FindComponent


GOSTEI 0
Lucas Silva

Lucas Silva

12/04/2004

Nildo,
O componente está dentro de um quickrep e de uma banda (rbTitle)..

Se eu deu QuickRep1.FindComponent não dá certo.

Eu teria que dá um FindComponent dentro da banda??

se sim, como eu faria isto....

Obrigado,
Lucas.


GOSTEI 0
Nildo

Nildo

12/04/2004

RbTitle.FindComponent


GOSTEI 0
Lucas Silva

Lucas Silva

12/04/2004

  var c: TComponent
  c := qrband1.FindComponent(´qrlNomeSocio1´);
    if C <> nil then
      ShowMessage(´existe´);

Assim não deu certo....


 var c: TComponent

    c := QuickReport1.Bands.TitleBand.FindComponent(´qrlNomeSocio1´);
     if C <> nil then
      ShowMessage(´existe´);


E assim também não deu certo..


Será que tem jeito de usar este findComponent dentro do quickReport?

Alguem já fez coisa do tipo?


GOSTEI 0
Nildo

Nildo

12/04/2004

Ok, eu testei aqui e a seguinte solução funcionou:

   if Formulario_do_QuickReport.FindComponent( ´qrlNomeSocio1´ ) = nil then
      ShowMessage(´Ihhhh, deu NIL´);


Se não der a mensagem quer dizer que funcionou!
neste caso não importa que ele pertença à Banda X


GOSTEI 0
Lucas Silva

Lucas Silva

12/04/2004

Agora funcionou blz,
Muito obrigado nildo, Valeu pela atenção ai.


GOSTEI 0
Lucas Silva

Lucas Silva

12/04/2004

Muito estranho nildo.
se eu colocar este código no formCreate do meu relatório funciona blz
             if FindComponent(´qrlNomeSocio1´) <> nil then
      SHowMEssage(´o componente existe´);


agora se eu colocar numa procedure que eu criei não funciona mais..,.
você sabe o que pode ser?


GOSTEI 0
Nildo

Nildo

12/04/2004

Aí vc tem que analisar seu código...


GOSTEI 0
Lucas Silva

Lucas Silva

12/04/2004

Aí vc tem que analisar seu código...

é verdade, mais de qualquer forma valeu, já encontrei uma solução aqui.


GOSTEI 0
POSTAR