gpt4 book ai didi

Delphi XE3 stringgrid 固定单元格单击事件不触发

转载 作者:行者123 更新时间:2023-12-02 02:02:13 31 4
gpt4 key购买 nike

我在 Delphi 中有一个 StringGrid 组件。我想在用户单击固定单元格(标题)时捕获。

当我将FixedCellClick事件绑定(bind)到网格时,事件只能检测到使用鼠标左键的单击。如果我尝试使用正确的按钮,则不会发生任何事情。

procedure TForm1.StringGrid1FixedCellClick(Sender: TObject; ACol, ARow: Integer);
begin
ShowMessage('');
end;

解决办法是什么?

最佳答案

正如您所发现的,Click 事件通常与鼠标左键操作相关联。为了更普遍地处理鼠标按钮事件,Mouse 事件更有用。

在这种情况下,您可以使用 OnMouseButtonDown 事件。

注意:这并不完全对应于“点击”,因为它是响应初始鼠标按下事件而发生的,而不是可靠地响应鼠标按下- 在控件的同一区域中跟随鼠标移动。

但是,它通常已经足够好了。

OnMouseButtonDown 事件包含一个参数,用于标识所涉及的 Button 以及鼠标 XY 位置。它还包含一个 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;

关于Delphi XE3 stringgrid 固定单元格单击事件不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36585582/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com