如何在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]
的含义。有什么建议吗?
答案 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
。没有该全局变量,您的代码会更好,并且将此过程(以及其他类似过程)转换为表单的方法。