Nur so 'ne Idee: Du könntest auch in der WndProc auf WM_INITMENUPOPUP (
Sent when a drop-down menu or submenu is about to become active.) reagieren und das aktuelle PopupMenu anhand des Handles suchen. Dann sparst du dir die Ableitung von TPopupMenu ganz:
Delphi-Quellcode:
case message.msg of
WM_INITMENUPOPUP:
begin
for I := 0 to Count - 1 do begin
if TPopupMenu(Items[I]).Handle = TWMInitMenuPopup(Message).MenuPopup then begin
{ sollte nie erreicht werden, wenn ein SubMenu geöffnet wird }
PopupMenu := TPopupMenu(Items[I]);
Break;
end;
end;
end;
WM_ENTERMENULOOP:
begin
MenuLoop := True; // Menu sichtbar
end;
WM_EXITMENULOOP:
begin
MenuLoop := False; // Menu nicht mehr sichtbar
PopupMenu := nil;
end;
end;