Einzelnen Beitrag anzeigen

Ben

Registriert seit: 16. Apr 2003
Ort: Neumünster
73 Beiträge
 
Delphi 5 Standard
 
#2

Re: Prüfen, ob ein Popupmenü auf ist

  Alt 29. Jul 2004, 14:33
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
Ben Hübner
  Mit Zitat antworten Zitat