delphi TStringGrid和鼠标右键

时间:2017-09-27 09:04:46

标签: delphi mouseevent firemonkey right-click tstringgrid

我正在使用Delphi 10.1 Berlin制作多设备应用程序。我有一个TStringGrid,以便从查询中列出一些数据。

我还有一个弹出菜单(编辑,删除,...),但是为了编辑/删除项目,我必须使用鼠标左键单击一个单元格。

在显示弹出菜单之前,是否可以仅使用右键“选择一行”?

我试过了:

procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbRight then
    StringGrid1.Perform(WM_LBUTTONDOWN, 0, MakeLParam(Word(X), Word(Y)));
end;

但它在mbRightPerform()上显示错误。

1 个答案:

答案 0 :(得分:2)

您可以使用以下代码:

procedure TForm39.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: single);
var
  pf: TPointF;
begin
  if Button = TMouseButton.mbRight then
  begin
    with Sender as TStringGrid do
      SelectRow(RowByPoint(X, Y));
  // Do not use the grids PopupMenu property, it seems it
  // prevents this event handler comletely.
  // Instead, activate the menu manually here.
    pf := ClientToScreen(TPointF.Create(X, Y));
    PopupMenu1.Popup(pf.X, pf.Y);
  end;
end;

FireMonkey是在启用Scoped Enumerations的情况下编译的,因此mbRight按钮的问题可以通过在值前加上枚举类型(TMouseButton.mbRight)来解决。