加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何使用dgRowSelect = False跟踪所选行

发布时间:2020-12-15 10:06:04 所属栏目:大数据 来源:网络整理
导读:当dgRowSelect = False时,如何检测OnDrawColumnCell方法中的选定行? 不是选定的单元格,而是包含所选单元格的行. 解决方法 下面的代码似乎有效. TDBGrid仍然保持SelectedRows更新(即使没有启用dgRowSelect也不会使用它们),因此您仍然可以在绘图代码中访问它
当dgRowSelect = False时,如何检测OnDrawColumnCell方法中的选定行?

不是选定的单元格,而是包含所选单元格的行.

解决方法

下面的代码似乎有效. TDBGrid仍然保持SelectedRows更新(即使没有启用dgRowSelect也不会使用它们),因此您仍然可以在绘图代码中访问它们. (即使不需要dgRowSelect,您仍然需要启用dgMultiSelect.)

代码让网格完成所有绘图,只需在选定的行上设置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颜色;但是我发现它很混乱,因为未选中行的当前单元格与所选行的颜色完全匹配.如果他们直接相邻,那在视觉上很烦人.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读