Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Menu einklappen (https://www.delphipraxis.net/213427-menu-einklappen.html)

Amateurprofi 27. Jul 2023 23:15


Menu einklappen
 
Ich benutze gelegentlich die WM_Help Message, die gesendet wird, wenn die F1-Taste gedrückt wird, während die Maus auf einen Menu-Eintrag zeigt, um eine .hlp Datei zu öffnen und zu dem für diesen Menu-Eintrag definierten Text zu springen.
Problem dabei:
Das Menu bleibt aufgeklappt und verdeckt teilweise den Hilfe-Text.
Ist nicht wirklich ein Problem, weil mit einem Klick in den Hilfe-Text das Menu eingeklappt wird, ist aber unschön.
Ich habe u.A. versucht einen Mausklick auf den Punkt(0,0) in der Form zu simulieren, was das Menu einklappen sollte.
Code:
   Mouse_Event(MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_ABSOLUTE,0,0,0,0);
   Mouse_Event(MOUSEEVENTF_LEFTUP or MOUSEEVENTF_ABSOLUTE,0,0,0,0);
Funktioniert aber nicht, sondern löst ein Klick auf den Menu-Eintrag aus.
Frage:
Wie kann ich bewirken, dass das Menu eingeklappt wird, ohne manuell irgendwo hinzuklicken.

Delphi-Quellcode:
PROCEDURE TMain.WMHelp(var Msg:TMessage);
var HlpId,X:Integer; PHInfo:PHelpInfo; MI:TMenuItem; Ctrl:Boolean;
begin
   Ctrl:=GetAsyncKeyState(VK_Control)<0;
   if Assigned(Menu) then begin
      PHInfo:=PHelpInfo(Msg.LParam);
      if PHInfo.iContextType=HELPINFO_MENUITEM then begin
         MI:=Menu.FindItem(PHInfo.iCtrlId,fkCommand);
         if Assigned(MI) then
            if Ctrl and (MI.Hint<>'') then begin
               X:=ScreenToClient(PHInfo.MousePos).X;
               ShowHint(X,MI.Hint) // Zeigt den Hint am unteren Rand des Fensters
            end else begin
//               Mouse_Event(MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_ABSOLUTE,0,0,0,0);
//               Mouse_Event(MOUSEEVENTF_LEFTUP or MOUSEEVENTF_ABSOLUTE,0,0,0,0);
               HlpId:=-1;
               if MI.IsLine then HlpId:=HelpTopicToHelpId('miBreakLine')
                  else HlpId:=HelpTopicToHelpId(MI.Name+Name);
               if HlpId<0 then HlpId:=HelpTopicToHelpId('Menu'+Name);
               if HlpId>=0 then ShowHelp(HlpId);
            end;
      end;
   end;
end;

Delphi.Narium 27. Jul 2023 23:24

AW: Menu einklappen
 
Eventuell How to close the main menu programmatically?

Amateurprofi 28. Jul 2023 01:26

AW: Menu einklappen
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1524992)

Danke für den Tipp.
Delphi-Quellcode:
  SendMessage(Handle, WM_CANCELMODE, 0, 0);
funktioniert perfekt.

Uwe Raabe 28. Jul 2023 01:44

AW: Menu einklappen
 
Ein simples EndMenu tut's auch.

Amateurprofi 28. Jul 2023 13:31

AW: Menu einklappen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1524994)
Ein simples EndMenu tut's auch.

Danke Uwe, funktioniert.
Frage mich, warum ich das nicht gefunden habe.
Hab mich um und dumm gesucht, zugegebenerweise nur bei TMenuItem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz