【问题标题】:Delphi XE3 stringgrid fixed cell click event doesn't fireDelphi XE3 stringgrid 固定单元格点击事件不会触发
【发布时间】:2016-04-12 22:58:27
【问题描述】:

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

当我将FixedCellClick 事件绑定到网格时,事件只能检测到使用鼠标左键的点击。如果我用右键尝试,什么都不会发生。

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

解决办法是什么?

【问题讨论】:

    标签: delphi click stringgrid


    【解决方案1】:

    如您所见,Click 事件通常与鼠标左键操作相关联。要更一般地处理鼠标按钮事件,Mouse 事件更有用。

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

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

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

    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;
    

    【讨论】:

      【解决方案2】:

      TStringGrid 被硬编码为仅针对左键单击触发 OnFixedCellClick 事件。右键单击没有事件。您必须修改TStringGrid 的源代码,或者从TStringGrid 派生一个自定义组件,以便您可以覆盖虚拟MouseUp() 方法。

      【讨论】:

        猜你喜欢
        • 2020-12-27
        • 1970-01-01
        • 1970-01-01
        • 2013-05-19
        • 2015-12-19
        • 1970-01-01
        • 1970-01-01
        • 2018-04-18
        相关资源
        最近更新 更多