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(使用前将#替换为@)