Como mudar o conteúdo das labels em um laço for?

10/08/2008

0

:?: Estou com a seguinte dúvida, estou precisando que as captions (que são Label1 até Label5) recebam valores através de um laço for como no exemplo abaixo:

Var Conta :Integer;
Tipo :String;

begin
For Conta := 1 to 5 do
begin
Tipo := ´Valor´ + IntToStr(Conta);
Labelx.caption := dm1.Vendas.Fieldvalues[Tipo];
end;
end

A dúvida está no label como faço para utilizar um label apenas, mudando apenas o número dele como foi efetuado com o fieldvalues.


Viperflexmaster

Viperflexmaster

Responder

Post mais votado

11/08/2008

Olá!

Faça o seguinte:

Var
  Conta, i : Integer;
  Tipo, NomeLabel :String;
begin
  For Conta := 1 to 5 do
  begin
    Tipo := ´Valor´ + IntToStr(Conta);
    NomeLabel := ´Label´ + IntToStr(Conta);

    for i := 0 to ComponentCount -1 do
    if (Components[i] is TLabel) and 
    (Components[i].Name = NomeLabel) then
    begin
      TLabel(Components[i]).Caption := dm1.Vendas.Fieldvalues[Tipo].AsString;
    end;
  end;
end;



Webjoel

Webjoel
Responder

Mais Posts

11/08/2008

Paulo_amorim

Olá

Esse algoritmo tem menor desempenho quanto mais componentes o formulário tiver.
Para se evitar o laço, pode-se procurar diretamente os labels com a função FindComponent(name: String)

var
  i: Integer;
begin
  for i := 1 to 5 do
  begin
    try
  TLabel(FindComponent(´Label´ + IntToStr(i)) ).Caption := dm1.Vendas.Fieldvalues[Tipo].AsString;
catch
 <seu tratamento de erro>
end;
end;


Espero que ajude

Até+


Responder

11/08/2008

Marco Salles

acho que todo mundo sem querer foi na sua onda

dm1.Vendas.Fieldvalues[Tipo]; :?: :?: :?:
o certo seria assim :
dm1.Vendas.Fieldvalues[Tipo].asstring;
Aonde Tipo tem quer ser uma String...

Portando [u:d05fe291cf]´acho´[/u:d05fe291cf] que nun Rola variando i do jeito que fora colocado...

Outra opção , e tentar fazer ...

var
i:integer;
umlabel:TLabel;
begin
with SeuDataSet do
  begin
   for i:=0 to FieldCount -1 do
    begin
     Fields.Fields[i].FocusControl;
     umLabel:=TLabel(ActiveControl.Parent.Controls[i]);
     umLabel.Caption:=FieldList[i].AsString;
    end;
  end;
end;



Responder

15/08/2008

Viperflexmaster

Valeu funcionou direitinho. :D


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar