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

时间:2012-05-20 19:55:02

标签: delphi ime

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

popup screen capture

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

我的选项中有goAlwaysShowEditor。

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

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:7)

这是每个Windows EDIT控件中的弹出菜单。可能是世界上最知名的菜单(唯一的竞争来自系统菜单)。您想要它,因为您的用户的期待它(需要它)。当您编辑单元格中的文本时,TStringGrid控件实际上创建了一个标准的Windows EDIT控件,这很棒。因此,您将获得其弹出菜单。

此外,要显示您自己的弹出菜单(当您不编辑单元格时),您不需要设置OnMouseDown处理程序。设置PopupMenu属性就足够了。事实上,这是非常不好的使用OnMouseDown处理程序,以触发弹出菜单,因为那时菜单才会显示在用户右键点击控件(而不是,例如,当他按下“上下文“键盘上的按钮。”

如果你真的想你自己的弹出式菜单显示,即使用户正在编辑一个单元格,你真的给他他一贯的选择撤销,复制,剪切,粘贴,Unicode的东西,等等,手动。当然你不想要那个?