![]() |
Wie im IOTA-Package rauskriegen, ob die IDE gerade ein KontextMenü anzeigt?
Hallo,
mein IOTA-Package soll mal dies und jenes tun, aber natürlich NICHT dann, wenn die IDE gerade ein KontextMenü anzeigt. Über welchen Service o. Notifier kann man also rauskriegen, ob die IDE gerade ein KontexMenü anzeigt. Danke im Voraus ... |
AW: Wie im IOTA-Package rauskriegen, ob die IDE gerade ein KontextMenü anzeigt?
Sowas gibt es meines Wissens nicht mal in der VCL, geschweige denn in der OTAPI.
|
AW: Wie im IOTA-Package rauskriegen, ob die IDE gerade ein KontextMenü anzeigt?
Vielleicht geht es über so etwas wie FocusedEditor (=nil)?
|
AW: Wie im IOTA-Package rauskriegen, ob die IDE gerade ein KontextMenü anzeigt?
thx.
@UweRaabe, anno 2013 war mal unter ![]()
Delphi-Quellcode:
Beim Übertragen auf mein IOTA-Package bekam ich aber leider immer irgendwo ein Exception. Auch wenn ich in der PerformMessage-Proc anstelle von ActiveForm bzw. MainForm dann das Editor-Window angab. Letzteres ist ja (gemäß Post#13 in
unit PopupListEx;
// kopiert von: http://delphi.about.com/od/adptips2006/qt/popuplistex.htm interface uses windows,Controls; const CM_MENU_CLOSED = CM_BASE + 1001; CM_ENTER_MENU_LOOP = CM_BASE + 1002; CM_EXIT_MENU_LOOP = CM_BASE + 1003; var PopupWinIsUp : boolean = false; // von mir noch hinzugefügt am 12.04.2013 implementation uses Messages, Forms, Menus; type TPopupListEx = class(TPopupList) protected procedure WndProc(var Message: TMessage) ; override; private procedure PerformMessage(cm_msg : integer; msg : TMessage) ; end; { TPopupListEx } procedure TPopupListEx.PerformMessage(cm_msg: integer; msg : TMessage) ; begin // if Screen.Activeform <> nil then // Screen.ActiveForm.Perform(cm_msg, msg.WParam, msg.LParam) ; Application.MainForm.Perform(cm_msg, msg.WParam, msg.LParam) ; // von mir für die beiden Zeilen darüber eingefügt am 04.04.2013 end; procedure TPopupListEx.WndProc(var Message: TMessage) ; begin case message.Msg of WM_ENTERMENULOOP: begin PerformMessage(CM_ENTER_MENU_LOOP, Message); PopupWinIsUp := true; end; WM_EXITMENULOOP : begin PerformMessage(CM_EXIT_MENU_LOOP, Message); PopupWinIsUp := false; end; WM_MENUSELECT : with TWMMenuSelect(Message) do begin if (Menu = 0) and (Menuflag = $FFFF) then begin PerformMessage(CM_MENU_CLOSED, Message); PopupWinIsUp := false; end; end; end; inherited; end; initialization Popuplist.Free; //free the "default", "old" list PopupList:= TPopupListEx.Create; //create the new one // The new PopupList will be freed by // finalization section of Menus unit. end. ![]() @stahli, geht leider nicht, weil Editor.focused auch dann true ausgibt, wenn gerade das KontextMenü oder auch das Hauptmenü angezeigt wird. Ansonsten funktioniert Editor.focused allerdings normal. Ich habe das jetzt aber einfach so gelöst, indem ich mit meinem eigenen Spyer die Class des KontextMenü-Wins und die des Hauptmenü-Wins ermittelt habe und jetzt per FindWindow in einer TimerProc einfach danach suche. Also in etwa so:
Delphi-Quellcode:
aMenuWinIsVisible := (FindWindow('TCustomActionPopupMenuEx','') <> 0) // wenn KontextMenü sichtbar
or (FindWindow('TIDEStylePopupMenu','') <> 0); // wenn HauptMenü sichtbar |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz