请教:怎样判断一个菜单是处于“打开”还是“关闭”的状态? 什么菜单?能否说清楚一点?大哥!弹出式?用 API AnyPopup 可以判断~............. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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^ 是这样的,你需要先定义一个变量,然后采用下面的方法弹出菜单就可以判断是否菜单已经弹出:aBool:=True;TrackPopupMenu(PopupMenu1.Handle, ...);aBool:=False;......if aBool then ShowMessage('菜单已经弹出'); 谢谢上面的回复。但还不能解决提出的问题。关键问题在于怎样才知道一个谈出菜单(TPopupMenu)是处于关闭(收起/不显示)的状态。打开(弹出/显示)状态显然不难判断,菜单都有OnClick事件,或拦截WM_INITMENU也可,但菜单关闭却没有相应的事件处理句柄。我昨晚的研究结果是:有一个WM_EXITMENULOOP消息在菜单收起前会发送给菜单,如拦截下来,大概就可知道菜单被收起/关闭了。但拦截不下。主窗体好象未接收这个消息。试试POPUPLIST(他应该负责处理这个消息),但它的wndproc在protected里,无法直接在程序里修改。如果我建一个TPOPUPLIST的子类,以修改它的wndproc,我又怎样把他插到程序里呢?呜呼哀哉!黔驴技穷啊! 快捷键控制 一个日期问题,请高手帮帮忙!!!--------------------在线等. 为什么BED控件在数据库中某字段长度大于255时会出问题? 菜鸟问题! DBGrid的一个问题 这次少一点,看还行不行! 加分再求药品销售管理信息系统的数据库!!! 关于软件升级的解决方案 请问各位我安装好一个ocx后,该如何使用?????? 如何在文件尾部填加信息,而不用重写整个文件(不是文本文件)! 接口问题-2 再问关于数据排序的问题?(30)
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^
aBool:=True;
TrackPopupMenu(PopupMenu1.Handle, ...);
aBool:=False;
......if aBool then ShowMessage('菜单已经弹出');
打开(弹出/显示)状态显然不难判断,菜单都有OnClick事件,或拦截WM_INITMENU也可,
但菜单关闭却没有相应的事件处理句柄。我昨晚的研究结果是:有一个WM_EXITMENULOOP消息在菜单收起前会发送给菜单,如拦截下来,大概就可知道菜单被收起/关闭了。但拦截不下。主窗体好象未接收这个消息。试试POPUPLIST(他应该负责处理这个消息),但它的wndproc在protected里,无法直接在程序里修改。
如果我建一个TPOPUPLIST的子类,以修改它的wndproc,我又怎样把他插到程序里呢?呜呼哀哉!黔驴技穷啊!