我通过监视OnDrawColumnCell
为列着色来自定义在 DBGrid 中绘图。当我阅读事件处理程序State
时,我成功地捕获gdSelected
了所选单元格中的字体并为其着色。但是当我 monitor 时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
enum 而从不监视gdRowSelected
。dgRowSelect
启用时,整个gdSelected
行中的每个单元格都处于状态。但仍然gdRowSelected
从未处于该状态。