让这更容易

时间:2014-01-21 21:18:23

标签: delphi colors label

如何在Delphi中简化这一过程?

Procedure colori1
Begin

 if Temperatura<=15 then
 begin
  Form1.Label1.Font.Color:=clBlue;
  Form1.Label2.Font.Color:=clBlue;
  Form1.Label3.Font.Color:=clBlue;
  Form1.Label4.Font.Color:=clBlue;
  Form1.Label5.Font.Color:=clBlue;
 end;

 if (Temperatura>=16) and (Temperatura<=18) then
 begin
  Form1.Label1.Font.Color:=clAqua;
  Form1.Label2.Font.Color:=clAqua;
  Form1.Label3.Font.Color:=clAqua;
  Form1.Label4.Font.Color:=clAqua;
  Form1.Label5.Font.Color:=clAqua;
 end;

 if (Temperatura>=19) and (Temperatura<=22) then
 begin
  Form1.Label1.Font.Color:=clLime;
  Form1.Label2.Font.Color:=clLime;
  Form1.Label3.Font.Color:=clLime;
  Form1.Label4.Font.Color:=clLime;
  Form1.Label5.Font.Color:=clLime;
 end;

 if (Temperatura>=23) and (Temperatura<=26) then
 begin
  Form1.Label1.Font.Color:=clYellow;
  Form1.Label2.Font.Color:=clYellow;
  Form1.Label3.Font.Color:=clYellow;
  Form1.Label4.Font.Color:=clYellow;
  Form1.Label5.Font.Color:=clYellow;
 end;

 if (Temperatura>=27) and (Temperatura<=29) then
 begin
  Form1.Label1.Font.Color:=$000080FF;
  Form1.Label2.Font.Color:=$000080FF;
  Form1.Label3.Font.Color:=$000080FF;
  Form1.Label4.Font.Color:=$000080FF;
  Form1.Label5.Font.Color:=$000080FF;
 end;

 if Temperatura>=30 then
 begin
  Form1.Label1.Font.Color:=clRed;
  Form1.Label2.Font.Color:=clRed;
  Form1.Label3.Font.Color:=clRed;
  Form1.Label4.Font.Color:=clRed;
  Form1.Label5.Font.Color:=clRed;
 end;
end;

如果我像这样使用“for cycle”:

For i:=0 to n do label[i].font.color:=clRed

我显然会收到错误,因为Delphi不知道label[i]的含义。有什么建议吗?

1 个答案:

答案 0 :(得分:11)

声明一个局部变量来保存颜色:

var
  Color: TColor;

然后决定颜色应该是什么:

if Temperatura <= 15 then
  Color := clBlue
else if Temperatura <= 18 then
  Color := clAqua;
else ...

然后将颜色分配给控件:

Form1.Label1.Font.Color := Color;
Form1.Label2.Font.Color := Color;
....

标签可以存储在数组或列表中。这样你就可以迭代它们来分配颜色。您可以在表单类中声明这样的数组:

FLabels: TArray<TLabel>;

在构造函数中,像这样分配它:

FLabels := TArray<TLabel>.Create(Label1, Label2, Label3, Label4, Label5);

要迭代它设置颜色,请执行以下操作:

var
  lbl: Tlabel;
....
for lbl in FLabels do
  lbl.Font.Color := Color;

您似乎正在使用全局变量Form1。没有该全局变量,您的代码会更好,并且将此过程(以及其他类似过程)转换为表单的方法。

相关问题