Ok, Problem hat sich gelöst.
Zunächst muss eine
Unit ExPopupList erstellt und eingebunden werden:
Code:
unit ExPopupList;
interface
uses Controls;
const
CM_MENUCLOSED = CM_BASE - 1;
CM_ENTERMENULOOP = CM_BASE - 2;
CM_EXITMENULOOP = CM_BASE - 3;
implementation
uses Messages, Forms, Menus;
Type
TExPopupList = class( TPopupList )
protected
procedure WndProc(var Message: TMessage); override;
end;
procedure TExPopupList.WndProc(var Message: TMessage);
Procedure Send( msg: Integer );
Begin
If Assigned( Screen.Activeform ) Then
Screen.ActiveForm.Perform( msg, Message.wparam,
Message.lparam );
End;
begin
Case message.Msg Of
WM_ENTERMENULOOP: Send( CM_ENTERMENULOOP );
WM_EXITMENULOOP : Send( CM_EXITMENULOOP );
WM_MENUSELECT :
With TWMMenuSelect( Message ) Do
If (Menuflag = $FFFF) and (Menu = 0) Then
Send( CM_MENUCLOSED );
End;
inherited;
end;
Initialization
PopupList.Free;
PopupList:= TExPopupList.Create;
end.
Im Programm lässt sich das Öffnen und Schließen von Menüs dann so erkennen:
Code:
procedure CMMenuClosed(var Msg: TMessage ); message CM_MENUCLOSED;
procedure CM_ENTERMENULOOP(var Msg: TMessage ); message CM_ENTERMENULOOP;
procedure TMainForm.CMMenuClosed(var msg: TMessage);
begin
Tag := 0;
end;
procedure TMainForm.CM_ENTERMENULOOP(var Msg: TMessage);
begin
Tag := 1;
end;
Hier im Beispiel habe ich in MainForm.Tag festgelegt, ob ein Menü geöffnet ist (1) oder nicht (0).
Vielleicht könnte das in die Code-Library aufgenommen werden, habe schon häufiger gesehen, dass es gefragt wurde.
Gruß, Ben