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;