德尔福色彩转换问题

时间:2013-08-11 13:53:08

标签: delphi dbgrid

我只是知道我在做一些非常愚蠢的事情,但我似乎无法坚持下去。

我第一次尝试在DBGrid中为单元格的背景着色,这是我迄今为止所避免的。我有一个名为“Buttoncolour”的字段,它以“CCFFCC”的形式保存十六进制颜色。我有另一个专栏,我想要的颜色,称为“ColourDescription”。我想使用十六进制颜色代码为“ColourDescription”单元格的画布着色。

我有这段代码:

 procedure TProductForm.MDBGrid2DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TDBGColumn;
  State: TGridDrawState);
var
   CCol : String;
begin
   if column.fieldname = 'ColourDescription' then begin
      CCol := ProdGroupQuery.FieldByName('Buttoncolour').AsString;
      Canvas.Brush.Color:= StringToColor(CCol);
   end;
end;

我收到编译错误,告诉我某些东西不是整数值。我认为我只是弄错了。你们中的任何一个人都可以告诉我我应该做什么吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您的字符串是十六进制编码的。为了让StringToColor对其进行解码,必须在字符串前加上$符号。

Canvas.Brush.Color := StringToColor('$'+CCol);

这在documentation中已经明确,当你遇到困难时,这总是值得一读。

调用StrToInt而不是StringToColor可能更简单,因为StringToColor的功能超出了你的需要。

Canvas.Brush.Color := TColor(StrToInt('$'+CCol));
相关问题