delphi TStringGrid 和鼠标右键
delphi TStringGrid and right mouse button
我正在使用 Delphi 10.1 Berlin 制作多设备应用程序。我有一个 TStringGrid
以便从查询中列出一些数据。
我还有一个弹出菜单(编辑、删除...),但是为了 edit/delete 一个项目,我必须使用鼠标左键单击一个单元格。
是否可以 "select a row" 在显示弹出菜单之前只使用右键?
我试过:
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;
但它在 mbRight
和 Perform()
上显示错误。
您可以使用以下代码:
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
) 来解决。
我正在使用 Delphi 10.1 Berlin 制作多设备应用程序。我有一个 TStringGrid
以便从查询中列出一些数据。
我还有一个弹出菜单(编辑、删除...),但是为了 edit/delete 一个项目,我必须使用鼠标左键单击一个单元格。
是否可以 "select a row" 在显示弹出菜单之前只使用右键?
我试过:
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;
但它在 mbRight
和 Perform()
上显示错误。
您可以使用以下代码:
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
) 来解决。