我想根据从Integer获得的值来更改TLabel的字体颜色。
var
i: Integer;
begin
ValueGenerator (i);
if i <= 14 then
begin
L1.Font.Color := clBlue;
end;
if i >= 15 then
begin
L1.Font.Color := clGreen;
end;
if i <= 29 then
begin
L1.Font.Color := clGreen;
end;
if i >= 30 then
begin
L1.Color := clYellow;
end;
if i <= 49 then
begin
L1.Color := clYellow;
end;
if i >= 50 then
begin
L1.Color := clRed;
end;
L1.Caption := IntToStr(i);
end;
值输出为0到100。 我有什么价值,我的TLabel总是在clGreen上。我在这里做错了什么?
答案 0 :(得分:7)
您的范围重叠,值20大于15且小于29,因此它首先设置一种颜色,然后设置另一种颜色,但它们都不会使代码的其余部分不执行 。所以首先你设置clGreen,然后你会遇到i小于49的情况,它会覆盖。
以下是您可能想要编写该代码的方法:
case i of
0..14: L1.Font.Color := clBlue;
15..29: L1.Font.Color := clGreen;
30..49: L1.Font.Color := clYellow;
50..100: L1.Font.Color := clRed;
end;
答案 1 :(得分:6)
而不是case
我会在这种情况下使用一些堆叠的if .. then .. else
,因此您不必关注每种颜色的整个范围,只是为了最大值
if i <= 14 then
L1.Color := clBlue
else if i <= 29 then
L1.Color := clGreen
else if i <= 49 then
L1.Color := clYellow
// can easily extended with
// else if i <= 79 then
// L1.Color := clMaroon
else
L1.Color := clRed;
答案 2 :(得分:0)
根据您的逻辑,您的颜色将始终为蓝色或绿色。你需要添加顶级条件:
if (i >= 15) and (i < 30) then
begin
L1.Font.Color := clGreen;
end;
依此类推。