How to preserve the default popup menu for a component (Views: 27)
Problem/Question/Abstract: Is there a way to keep the default popup menus for e.g. TMemo, TEdit if there is an explicit popup menu for the parent control? Answer: You have to trap the WM_CONTEXTMENU message on the level of the parent. Assuming the parent is the form you would add a message handler to the form: { ... } private procedure WMContextMenu(var Message: TWMContextMenu); message WM_CONTEXTMENU; { ... } and implement it like this: procedure TForm1.WMContextMenu(var Message: TWMContextMenu); var wnd: HWND; ctrl: TWinControl; begin if message.XPos > 0 then begin wnd := WindowFromPoint(Mouse.CursorPos); if wnd <> handle then begin ctrl := FindControl(wnd); if Assigned(ctrl) and (ctrl is TCustomEdit) then Exit; end; end else if ActiveControl is TCustomEdit then Exit; inherited; end; Doing the same if the parent with the menu is a panel or tabsheet or such is a bit more difficult, you have to subclass it via WindowProc, or make a descendent class to be able to trap the message. |