0

我只知道我在这里做了一些非常愚蠢的事情,但我似乎无法弄清楚。

我第一次尝试在 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;

我收到一个编译错误,告诉我某些东西不是整数值。我想我只是把整个事情弄错了。请各位好心人告诉我我应该做什么?

谢谢!

4

1 回答 1

0

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

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

文档中明确说明了这一点,当您遇到困难时,该文档始终值得一读。

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

Canvas.Brush.Color := TColor(StrToInt('$'+CCol));
于 2013-08-11T13:58:19.007 回答