Delphi XE3 stringgrid固定单元格单击事件不';t火
我在Delphi中有一个StringGrid组件。我想捕捉用户单击固定单元格(标题)的时间 当我将Delphi XE3 stringgrid固定单元格单击事件不';t火,delphi,click,stringgrid,Delphi,Click,Stringgrid,我在Delphi中有一个StringGrid组件。我想捕捉用户单击固定单元格(标题)的时间 当我将FixedCellClickevent绑定到网格时,event只能使用鼠标左键检测单击。如果我用正确的按钮尝试,什么都不会发生 procedure TForm1.StringGrid1FixedCellClick(Sender: TObject; ACol, ARow: Integer); begin ShowMessage(''); end; 解决方案是什么?TStringGrid被硬编码为
FixedCellClick
event绑定到网格时,event只能使用鼠标左键检测单击。如果我用正确的按钮尝试,什么都不会发生
procedure TForm1.StringGrid1FixedCellClick(Sender: TObject; ACol, ARow: Integer);
begin
ShowMessage('');
end;
解决方案是什么?
TStringGrid
被硬编码为仅对左键单击触发OnFixedCellClick
事件。没有右键单击事件。您必须修改TStringGrid
的源代码,或者从TStringGrid
派生自定义组件,以便可以覆盖虚拟的MouseUp()
方法。TStringGrid
是硬编码的,仅在单击左键时触发OnFixedCellClick
事件。没有右键单击事件。您必须修改TStringGrid
的源代码,或者从TStringGrid
派生一个自定义组件,以便可以覆盖虚拟的MouseUp()
方法。正如您所发现的,单击事件通常与鼠标左键操作相关联。要更普遍地处理鼠标按钮事件,鼠标
事件更有用
在这种情况下,您可以使用OnMouseButtonDown事件
注意:这与“点击”并不完全对应,因为它是响应初始鼠标按下事件而发生的,而不是可靠地响应控件同一区域中的鼠标按下和鼠标上下
然而,这通常已经足够好了
OnMouseButtonDown事件包括一个参数,用于标识所涉及的按钮
,以及鼠标的X
和Y
位置。它还包括一个ShiftState
,用于检测事件期间的Ctrl键和/或Shift键状态(如果相关)
您可以使用这些按钮来检测在固定行/列中按下的鼠标右键:
procedure TfrmMain.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
var
grid: TStringGrid;
col, row: Integer;
fixedCol, fixedRow: Boolean;
begin
grid := Sender as TStringGrid;
if Button = mbRight then
begin
grid.MouseToCell(X, Y, col, row);
fixedCol := col < grid.FixedCols;
fixedRow := row < grid.FixedRows;
if (fixedCol and fixedRow) then
// Right-click in "header hub"
else if fixedRow then
// Right-click in a "column header"
else if fixedCol then
// Right-click in a "row header"
else
// Right-click in a non-fixed cell
end;
end;
过程TfrmMain.StringGrid1MouseDown(发送方:TObject;
按钮:tmouse按钮;
换档:t换档状态;
十、 Y:整数);
变量
网格:TStringGrid;
列,行:整数;
fixedCol,fixedRow:布尔值;
开始
grid:=作为TStringGrid的发送方;
如果按钮=mbRight,则
开始
网格鼠标单元(X,Y,col,row);
fixedCol:=col
正如您所发现的,单击事件通常与鼠标左键操作相关联。要更普遍地处理鼠标按钮事件,鼠标
事件更有用
在这种情况下,您可以使用OnMouseButtonDown事件
注意:这与“点击”并不完全对应,因为它是响应初始鼠标按下事件而发生的,而不是可靠地响应控件同一区域中的鼠标按下和鼠标上下
然而,这通常已经足够好了
OnMouseButtonDown事件包括一个参数,用于标识所涉及的按钮
,以及鼠标的X
和Y
位置。它还包括一个ShiftState
,用于检测事件期间的Ctrl键和/或Shift键状态(如果相关)
您可以使用这些按钮来检测在固定行/列中按下的鼠标右键:
procedure TfrmMain.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
var
grid: TStringGrid;
col, row: Integer;
fixedCol, fixedRow: Boolean;
begin
grid := Sender as TStringGrid;
if Button = mbRight then
begin
grid.MouseToCell(X, Y, col, row);
fixedCol := col < grid.FixedCols;
fixedRow := row < grid.FixedRows;
if (fixedCol and fixedRow) then
// Right-click in "header hub"
else if fixedRow then
// Right-click in a "column header"
else if fixedCol then
// Right-click in a "row header"
else
// Right-click in a non-fixed cell
end;
end;
过程TfrmMain.StringGrid1MouseDown(发送方:TObject;
按钮:tmouse按钮;
换档:t换档状态;
十、 Y:整数);
变量
网格:TStringGrid;
列,行:整数;
fixedCol,fixedRow:布尔值;
开始
grid:=作为TStringGrid的发送方;
如果按钮=mbRight,则
开始
网格鼠标单元(X,Y,col,row);
fixedCol:=col