如何保持与dgRowSelect选定行的轨道=假(how to keep track of sele

2019-07-04 23:20发布

当dgRowSelect = FALSE我怎样才能检测OnDrawColumnCell方法中所选择的行?

未选定单元格,但包含所选单元格的行。

Answer 1:

下面的代码似乎工作。 在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 ; 我发现它是混乱的,但因为未选定的行的当前单元格完全匹配选定行的颜色。 如果他们直接彼此相邻,它的视觉恼人。



文章来源: how to keep track of selected rows with dgRowSelect = False