DBGrid自定义绘制gdRowSelected不起作用

时间:2013-11-24 03:25:18

标签: delphi drawing delphi-xe2 tdbgrid

我是在DBGrid中自定义绘图,通过监视OnDrawColumnCell为列着色。当我读取事件处理程序的State时,我成功捕获gdSelected并为所选单元格中的字体着色。但是当我监视gdRowSelected时,它永远不存在,因此我无法确定何时选择了一行。

为什么gdRowSelected不适用?这是一个错误,还是故意的功能?

这是我目前的绘画方式。选择行时,它应该以红色显示该行中的文本。

procedure TForm1.gItemsDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Rec: TRect;
  function C: TCanvas;
  begin
    Result:= gItems.Canvas;
  end;
begin
  //Evaluating gdSelected works fine, but not gdRowSelected
  if gdRowSelected in State then begin
    C.Font.Color:= clRed;
  end else begin
    C.Font.Color:= clWhite;
  end;
  C.Brush.Style:= bsSolid;
  C.Brush.Color:= clBlack;
  C.Pen.Style:= psClear;
  C.FillRect(Rect);
  C.Brush.Style:= bsClear;
  C.Pen.Style:= psSolid;
  Rec:= R;
  DrawText(C.Handle, PChar(Column.Field.AsString), Length(Column.Field.AsString),
    Rec, 0);
end;

文档说明

  

gdRowSelected - 选择了行。

但它永远不会在州内。


修改

我尝试启用选项dgRowSelect并确实进行了更改,但它仍然只监控gdSelected枚举,而不是gdRowSelected。启用dgRowSelect后,gdSelected处于整行中每个单元格的状态。但是gdRowSelected永远不会在州内。

0 个答案:

没有答案