如何避免StringGrid中的"Open IME"弹出窗口?

Rob*_*ank 4 delphi ime

在StringGrid中,有时当我右键单击时,我会在下面看到不需要的菜单.这是一个Windows弹出窗口吗?

弹出屏幕截图

如何防止这个弹出窗口出现而不是我自己?

我在我的选项中有goAlwaysShowEditor.

我已将StringGrid.PopupMenu设置为我的弹出窗口.

我已设置StringGrid.OnMouseDown以显示我的弹出窗口,如果它是右键单击.

TLa*_*ama 8

您可以CreateEditor像这样覆盖虚拟方法(虽然不是一个好的解决方案,但我知道:-):

type
  TStringGrid = class(Grids.TStringGrid)
  protected
    function CreateEditor: TInplaceEdit; override;
  end;

implementation

function TStringGrid.CreateEditor: TInplaceEdit;
begin
  Result := inherited CreateEditor;
  TMaskEdit(Result).PopupMenu := Form1.PopupMenu1;
end;
Run Code Online (Sandbox Code Playgroud)


And*_*and 7

这是每个Windows EDIT控件中的弹出菜单.可能是世界上最知名的菜单(唯一的竞争来自系统菜单).你想要它,因为你的用户期望它(并且需要它).在单元格中编辑文本时,TStringGrid控件实际上会创建一个标准的Windows EDIT控件,这很棒.因此你得到它的弹出菜单.

此外,要显示您自己的弹出菜单(当您不编辑单元格时),您不需要设置OnMouseDown处理程序.设置PopupMenu属性就足够了.实际上,使用OnMouseDown处理程序触发弹出菜单是非常糟糕的,因为只有当用户右键单击控件时才会显示菜单(例如,当他按下他的"上下文"按钮时键盘).

如果您真的想要显示自己的弹出菜单,即使用户正在编辑单元格,您也必须手动为他提供撤消,复制,剪切,粘贴,Unicode内容等常用选项.当然你不想要那个?