Fórum Duvida Cruel QRLabels #195591

18/11/2003

0

Eu criei varios QRLabels com nomes como: QRL1, qrl2 , qrl3 , qrl4 , qrl5 etc... Eu queria usa-los dentro de uma estrutura FOR sem prescisar digitar todo o nome, eu pensei em algo assim mas é claro que nao funciona:

(´qrl´ + inttostr(Count)).caption := variavel;

Como eu poderia fazer isso ???


Neoramza

Neoramza

Responder

Posts

18/11/2003

Raserafim

você pode fazer um laço para passar por todos os componentes e verificar quais são do tipo que você quer alterar, fazendo a verificação através da classe. Fiz um exemplo que alterar o texto dos componentes Edit, basta você substituir a Classe TEdit pela classe do componente que você quer, e mudar a propriedade text para capition:

procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
for I := 0 to 5 do
if Components[I] is TEdit then
TEdit(Components[I]).Text := ´Rodrigo´;

end;


Responder

Gostei + 0

18/11/2003

Neoramza

Mas o problema é que eu vou gravar dados diferente em cada uma dessas QRLabels


Responder

Gostei + 0

18/11/2003

Raserafim

se você alterar a última linha para:

TEdit(Components[I]).Text := variável;

já vai ficar como você havia perguntado. Não estou entendendo como você quer atribuir valores diferentes que código não funciona. Me dê mais detalhes que posso tentar ajudar.


Responder

Gostei + 0

18/11/2003

Neoramza

Eu quero que por exemplo o qrLabel1.caption receba o valor . txtText1.caption, o qrLabel2.caption receba o valor . txtText2.caption, o qrLabel3.caption receba o valor . txtText3.caption até o qrLabel300.caption receba o valor . txtText300.caption sem precisar excrever tudo um por um assim:

qrLabel1.caption := txtText1.caption;
qrLabel2.caption := txtText2.caption;
qrLabel3.caption := txtText3.caption;
....
qrLabel300.caption := txtText300.caption;

ao em vez de escrever tudo um por um eu queria usar um comando FOR para fazer isso.

Será que agora eu conseguir me expressar bem? :?


Responder

Gostei + 0

18/11/2003

Einstein

vc deve usar um laço. para facilitar sua vida use componentes com nomes sequências. ex.: QRLabel1.Caption:=Edit1.Text;
então, se vc usar o loop FOR basta passar a variavel contadora pra nome dos Componentes. Ex.: QRLabel+InttoStr(I).Caption:=Edit+StrToInt(I).Text;


Responder

Gostei + 0

18/11/2003

Beppe

Você pode usar Form1.FindComponent(´QRLabel´ + IntToStr(I)), mas isto poderá percorrer o array de components inteiro pra achar o dito label: O(n²) = 300 x 300 = 90000.

Então você cria dois arrays, um para os labéis e outro para os edits.

type
  TForm1 = class(TForm)
  ...
  private
    QRLabels: array[1..300] of TQRLabel;
    Edits: array[1..300] of TEdit;
    procedure InitializeArrays;
  ...
  end;

procedure TForm1.InitializeArrays;
var
  I: Integer;
  Labs, Eds: Integer;
begin
  Labs := 0;
  Eds := 0;
  for I := 0 to ComponentCount - 1 do
  begin
    if Components[I] is TQRLabel then
    begin
      Inc(Labs);
      QRLabels[Labs] := Components[I];
    end else if Components[I] is TEdit then
    begin
      Inc(Eds);
      Edits[Eds] := Components[I];
    end;
  end;
end;

...
  for I := 1 to 300 do
    QRLabels[I].Caption := Edits[I].Text;
...



Responder

Gostei + 0

18/11/2003

Neoramza

vc deve usar um laço. para facilitar sua vida use componentes com nomes sequências. ex.: QRLabel1.Caption:=Edit1.Text; então, se vc usar o loop FOR basta passar a variavel contadora pra nome dos Componentes. Ex.: QRLabel+InttoStr(I).Caption:=Edit+StrToInt(I).Text;


Eu tentei fazer isso assimdentro do FOR:

QRLabel+InttoStr(I).Caption:=Edit+Inttostr(I).Text;

mas dava a seguinte mensagem de erro: ´Undeclared identifier: ´Edit´, ´QRLabel´

entao eu tentei fazer assim:

´QRLabel´+InttoStr(I).Caption:=´Edit´+Inttostr(I).Text;

agora o erro mudou para: Record, objct or data Type required

Não sei mais o que fazer. O q q deu errado ae?


Responder

Gostei + 0

18/11/2003

Neoramza

Por favor pessoal... Ajuda ae! :cry:


Responder

Gostei + 0

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

Aceitar