Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#1

Menu einklappen

  Alt 28. Jul 2023, 00:15
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;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....

Geändert von Amateurprofi (28. Jul 2023 um 00:21 Uhr) Grund: Vergessen die WMHelp Prozedur einzufügen
  Mit Zitat antworten Zitat