-1

只是一个快速的,忙于分配......有人可以检查我的逻辑在这个函数上是否正确,因为它似乎不起作用,编译时我没有得到任何错误

我这样调用函数:

lblcolor.color :=  colorChooser(intVariable);

该函数必须将标签设为绿色、红色、黄色或蓝色,如下面的代码所示,但它似乎不起作用。

还是你们认为我必须为此使用案例陈述。

function ColorChooser(difference : integer): TColor;
begin
     if difference = 0 then
     begin
       Result := clGreen;
     end
     else if (difference >= 1) and (difference <= 3) then
     begin
        Result := clYellow;
     end
     else if (difference >= 4) 
          and (difference <= 8) then
     begin
        Result := clRed;
     end
     else
        Result := clBlue;

end;
4

2 回答 2

7

您在这里有一个主要的格式问题。:-) 问题是标签默认采用其父级的颜色,并且也是透明的(意味着它的背景不可见)。将标签的Transparent属性设置False为在设计时在对象检查器中或在FormShow运行时在您的事件中。

现在,让我们清理您的代码:

function ColorChooser(difference : integer): TColor;
begin
  Result := clBlue;
  if difference = 0 then
    Result := clGreen
  else if (difference >= 1) and (difference <= 3) then 
    Result := clYellow
  else if (difference >= 4) and (difference <= 8) then
    Result := clRed;
end;

要测试它:

procedure TForm1.Button1Click(Sender: TObject);
begin
  lblColor.Color := ColorChooser(Random(8));
end;

现在,一种更简洁的编写方式:

function ColorChooser(difference : integer): TColor;
begin
  case difference of
    0: Result := clGreen;
    1..3: Result := clYellow;
    4..8: Result := clRed
  else
    Result := clBlue;
  end;
end;
于 2013-04-13T20:21:07.073 回答
1

您正在设置标签的背景颜色。一个始终透明的控件。所以什么也没有发生。

lbl.Font.Color改为设置。

至于您的功能, case 语句要干净得多:

case difference of
0:
  Result := clGreen;
1..3:
  Result := clYellow;
4..8:
  Result := clRed;
else
  Result := clBlue;
end;

如果您确实想设置背景颜色,则必须将标签的Transparent属性设置为False.

于 2013-04-13T20:20:29.857 回答