我是在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
永远不会在州内。