什么菜单?能否说清楚一点?大哥!
弹出式?用 API AnyPopup 可以判断~
.............

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Menus;type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        MainMenu1: TMainMenu;
        fggfdfg1: TMenuItem;
        ggg1: TMenuItem;
        ggg2: TMenuItem;    procedure ggg2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
      i:integer;
      b:boolean;
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.DFM}
    procedure TForm1.ggg2Click(Sender: TObject);
    var
       form2:Tform2;
    begin
       if b=false then
         begin
           b:=true;
           showmessage('菜单是打开的');
           button1.Caption :='现在菜单被打开';
           form2:=Tform2.Create(application);
           form2.Show;
           ggg2.Checked :=true;
         end  else
         showmessage('菜单已经被打开,你的这项操作无效');
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
         b:=false;
    end;end.unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
      TForm2 = class(TForm)
        procedure FormDestroy(Sender: TObject);
        procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementationuses Unit1;{$R *.DFM}procedure TForm2.FormDestroy(Sender: TObject);
    beginend;procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
     form1.ggg2.Checked :=false;
      form1.Button1.Caption:='菜单现在是关闭的';
      form1.b:=false;
    end;end.
    嗯,刚刚试过的
    有可能和你想要的不大一样^V^
      

  2.   

    是这样的,你需要先定义一个变量,然后采用下面的方法弹出菜单就可以判断是否菜单已经弹出:
    aBool:=True;
    TrackPopupMenu(PopupMenu1.Handle,  ...);
    aBool:=False;
    ......if aBool then ShowMessage('菜单已经弹出');
      

  3.   

    谢谢上面的回复。但还不能解决提出的问题。关键问题在于怎样才知道一个谈出菜单(TPopupMenu)是处于关闭(收起/不显示)的状态。
    打开(弹出/显示)状态显然不难判断,菜单都有OnClick事件,或拦截WM_INITMENU也可,
    但菜单关闭却没有相应的事件处理句柄。我昨晚的研究结果是:有一个WM_EXITMENULOOP消息在菜单收起前会发送给菜单,如拦截下来,大概就可知道菜单被收起/关闭了。但拦截不下。主窗体好象未接收这个消息。试试POPUPLIST(他应该负责处理这个消息),但它的wndproc在protected里,无法直接在程序里修改。
    如果我建一个TPOPUPLIST的子类,以修改它的wndproc,我又怎样把他插到程序里呢?呜呼哀哉!黔驴技穷啊!