GARANTIR DESCONTO

Fórum quot;FindComponentquot; não funciona. #225362

12/04/2004

0

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

Responder

Posts

12/04/2004

Motta

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;


Responder

Gostei + 0

12/04/2004

Lucas Silva

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

Alguem sabe como resolver isto?


Responder

Gostei + 0

12/04/2004

Nildo

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?


Responder

Gostei + 0

12/04/2004

Motta

O Nildo tem razão !!


Responder

Gostei + 0

12/04/2004

Lucas Silva

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!


Responder

Gostei + 0

12/04/2004

Lucas Silva

O Nildo tem razão !!

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


Responder

Gostei + 0

12/04/2004

Nildo

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


Responder

Gostei + 0

12/04/2004

Lucas Silva

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.


Responder

Gostei + 0

12/04/2004

Nildo

RbTitle.FindComponent


Responder

Gostei + 0

12/04/2004

Lucas Silva

  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?


Responder

Gostei + 0

12/04/2004

Nildo

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


Responder

Gostei + 0

12/04/2004

Lucas Silva

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


Responder

Gostei + 0

12/04/2004

Lucas Silva

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?


Responder

Gostei + 0

13/04/2004

Nildo

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


Responder

Gostei + 0

13/04/2004

Lucas Silva

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

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


Responder

Gostei + 0

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

Aceitar