我正在做一个小型内部软件来搜索我公司的分行。除了分支行之外,我还在数据库中放置了一个电子邮件字段,如下所示:
我的目的是通过ShellExecute
打开一个窗口点击注册的电子邮件和软件发送电子邮件。我使用dgRowSelect
选项作为TRUE
,因此OnCellClick
事件无法正确识别单击的单元格。
在我的搜索中没有找到任何方法来做到这一点。然后我想到在场内使用TLabel
。我可以使用onclick
中的TLabel
事件,也可以更改光标图标。
如果TLabel
是一个很好的解决方案,我如何在DBGrid中添加TLabel?
或者什么是另一个好的解决方案?
答案 0 :(得分:1)
我猜dgRowSelect = true的目的是突出显示整个选定的行。 TLabel不是我想要的方式 - 我会设置dgRowSelect = false并在OnDrawColumnCell中绘制选定的行或创建我自己的固定dbgrid。 有一个类似的问题: how can i colour whole row in DBGrid with rowselect turned off?
无论如何,如果你想使用dgRowSelect = true并获得有关被点击单元格的有效信息,这里是:
type THackDBGrid=class(TDBGrid);
procedure TForm1.dbgrd1CellClick(Column: TColumn);
var p:TPoint;
col:TGridCoord;
i: Integer;
grid:THackDBGrid;
begin
p := Mouse.CursorPos;
grid := THackDBGrid(Column.Grid);
p := grid.ScreenToClient(p);
col := grid.MouseCoord(p.X,p.Y);
i := grid.RawToDataColumn(col.X);
Label1.Caption := 'Column index: ' + IntToStr(i);
end;