Duvida Cruel QRLabels
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 ???
(´qrl´ + inttostr(Count)).caption := variavel;
Como eu poderia fazer isso ???
Neoramza
Curtidas 0
Respostas
Raserafim
18/11/2003
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;
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;
GOSTEI 0
Neoramza
18/11/2003
Mas o problema é que eu vou gravar dados diferente em cada uma dessas QRLabels
GOSTEI 0
Raserafim
18/11/2003
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.
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.
GOSTEI 0
Neoramza
18/11/2003
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? :?
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? :?
GOSTEI 0
Einstein
18/11/2003
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;
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;
GOSTEI 0
Beppe
18/11/2003
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.
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; ...
GOSTEI 0
Neoramza
18/11/2003
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?
GOSTEI 0
Neoramza
18/11/2003
Por favor pessoal... Ajuda ae! :cry:
GOSTEI 0