Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to avoid the "Open IME" popup in a StringGrid?

Tags:

delphi

ime

In a StringGrid, sometimes I get the unwanted menu below when I right-click. Is this a Windows popup?

popup screen capture

How to I prevent this popup from appearing rather than my own?

I have goAlwaysShowEditor in my Options.

I have set StringGrid.PopupMenu to my popup.

I've set StringGrid.OnMouseDown to show my popup if it's a right click.

like image 281
RobertFrank Avatar asked Dec 07 '22 14:12

RobertFrank


2 Answers

You can override the virtual CreateEditor method like this way (not a good solution though, I know :-):

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;
like image 116
TLama Avatar answered Dec 19 '22 16:12

TLama


That is the popup menu found in every Windows EDIT control. Possible the world's most known menu (the only competition comes from the system menu). You want it, because your user's expect it (and need it). When you edit the text in a cell, the TStringGrid control actually creates a standard Windows EDIT control, which is great. And thus you get its popup menu.

In addition, to show your own popup menu (when you are not editing a cell), you don't need to set the OnMouseDown handler. It is enough to set the PopupMenu property. In fact, it is very bad to use the OnMouseDown handler to trigger a popup menu, because then the menu will only be shown when the user right-clicks the control (and not, for instance, when he presses the "context" button on his keyboard).

If you really want your own popup menu to show, even when the user is editing a cell, you really have to give him his usual options for undo, copy, cut, paste, Unicode stuff, etc., manually. Surely you don't want that?

like image 23
Andreas Rejbrand Avatar answered Dec 19 '22 14:12

Andreas Rejbrand