Delphi:StringGrid、位置和上下文菜单

标签 delphi delphi-2010 popupmenu tstringgrid

我在使用 TStringGrid 和弹出菜单时遇到问题

我想知道从弹出菜单中选择一个项目时上次处于事件状态的单元格的行/列。但是,当我单击弹出菜单时,StringGrid.Row 返回为 -1。

我试过使用 MouseToCell 作为 OnClick 的一部分,但即使在设置 SG.Row 之后它仍然在弹出菜单例程中返回 -1 ......我怀疑问题是网格失去了焦点。

是否有任何解决方案不需要 OnClick 设置全局变量?

我正在使用链接到弹出菜单上的项目的操作列表,以确保工具栏和弹出菜单之间的操作一致

最佳答案

恐怕我没有完全理解你的意思。当我左键单击字符串网格中的一个单元格时,它会被选中,但当我右键单击它时不会。当我右键单击它时,会显示弹出菜单(如果已分配),并且在 MenuItemClick 上我可以轻松阅读 rowcol当前选中。见 example video .

我猜你真的想要这个:你想要右键单击来更改事件单元格以及左键单击。这很容易做到:

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;

关于Delphi:StringGrid、位置和上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3522971/

相关文章:

python - 将多个wx.EVT_MENU绑定(bind)到同一个方法?

delphi - Hook TNotifyEvent/寻找使用方法和过程指针的正确方法

multithreading - 如何在OmniThreadLibrary 3中暂停/恢复线程?

delphi - Delphi XE 3 形式的动画 gif

delphi - 如何在DataSnap 2010中获取客户端IP

multithreading - TThread.Execute没有按预期方式被调用

android - 如何将标题添加到 PopupMenu 上的组,而不是子菜单

delphi - 如何将ListView标题栏的弹出菜单与项目弹出菜单一起设置?

delphi - 是否有更好的方法将所有数据集字段及其属性复制到另一个数据集?

c# - WCF 和 Delphi - 我应该使用 bytes[] 还是字符串?