当dgRowSelect = FALSE我怎样才能检测OnDrawColumnCell方法中所选择的行?
未选定单元格,但包含所选单元格的行。
当dgRowSelect = FALSE我怎样才能检测OnDrawColumnCell方法中所选择的行?
未选定单元格,但包含所选单元格的行。
下面的代码似乎工作。 在TDBGrid
仍然保持SelectedRows
更新(即使它不会吸引他们没有dgRowSelect
启用),所以你仍然可以访问它们在你的绘制代码。 (你还需要启用dgMultiSelect
,即使dgRowSelect
是没有必要的。)
该代码可以让电网做所有的绘图,只需设置Canvas.Brush.Color
所选行。 提供的颜色将由绘制代码用于单个细胞如果该单元的状态恰好是被覆盖gdSelected
。
我设置所选行的颜色clFuchsia
,离开只是所选单元格的默认颜色透明度(网格是丑陋 clFuchsia
选择的行,但它的作品展示):
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer;
Column: TColumn; State: TGridDrawState);
var
Selected: Boolean;
Grid: TDBGrid;
begin
Grid := TDBGrid(Sender);
if not (gdSelected in State) then
begin
Selected := Grid.SelectedRows.CurrentRowSelected;
if Selected then
Grid.Canvas.Brush.Color := clFuchsia;
end;
Grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
的上述样品的结果,在选择了第一和第三行:
你当然可以,只是使用的通常选择的颜色clHighLight
; 我发现它是混乱的,但因为未选定的行的当前单元格完全匹配选定行的颜色。 如果他们直接彼此相邻,它的视觉恼人。