如何避免在StringGrid“打开IME”弹出?(How to avoid the “Open I

2019-09-17 08:46发布

在StringGrid,有时我得到下面当我用鼠标右键单击菜单无用。 这是一个Windows弹出?

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

我有goAlwaysShowEditor在我的选项。

我已StringGrid.PopupMenu我的弹出窗口。

我已经设置StringGrid.OnMouseDown显示我的弹出,如果这是一个正确的点击。

Answer 1:

您可以覆盖虚拟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;


Answer 2:

这是每一个Windows编辑控件中发现的弹出式菜单。 可能是世界上最知名的菜单(唯一的竞争来自系统菜单)。 你想要它,因为你的用户的期望它(和需要它)。 当您在单元格中编辑文本时, TStringGrid控制实际上创建了一个标准的Windows编辑控制,这是伟大的。 这样的话你得到它的弹出式菜单。

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

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



文章来源: How to avoid the “Open IME” popup in a StringGrid?
标签: delphi ime