使用Integer值作为参考

时间:2014-07-23 18:28:40

标签: delphi integer

我想根据从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上。我在这里做错了什么?

3 个答案:

答案 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;

依此类推。