Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#11

AW: TPopupMenu Popup überschreiben / DoPopup wird nie aufgerufen

  Alt 20. Okt 2017, 13:27
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat