如何在关闭 rowselect 的情况下为 DBGrid 中的整行着色?

2024-04-16

RowSelect 破坏了 OnCellClick 的功能,因此我需要关闭 RowSelect。 那么如何通过突出显示当前行的所有单元格来模拟行选择的外观呢?


这对我有用(dgRowSelect=False and dgMultiSelect=False ):
声明 hack 类型DBGrid and GridDataLink访问受保护的方法 和两个变量

type
  THackGrid = class(TDBGrid);
  THackDataLink = class(TGridDataLink);
var
  HackGrid: THackGrid;
  HackDataLink: THackDataLink;

In OnFormCreate分配变量以使其在绘图时可用:

procedure TMyForm.FormCreate(Sender: TObject);
begin
  HackGrid := THackGrid(MainGrid);
  HackDataLink := THackDataLink(HackGrid.DataLink);
end;

并使用测试选定的行TGridDataLink.GetActiveRecord:

procedure TMyForm.MainGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if Not (gdSelected in State) and (HackGrid.Row = HackDataLink.GetActiveRecord + 1) then
    MainGrid.Canvas.Brush.Color := clInfoBk;

  MainGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在关闭 rowselect 的情况下为 DBGrid 中的整行着色? 的相关文章

随机推荐