请问这个效果(动态菜单)该怎么做啊??
我想做一个效果就是在程序的右上角有一个按钮,点击按钮可以显示程序打开的窗体名称...注意,是打开的,然后窗体关闭的时候,这里也就不显示了.
比如程序有10个窗体(我没用mdi子窗体,就是普通的窗体),如果用户在使用打开了其中任意几个,那这个按钮就动态的显示打开的菜单名称..比如,打开基本信息单录入后. 按钮点击可显示这个'基本信息单录入', 打开多个,可以通过这个按钮快速切换不同的菜单操作....
求方法......求实例....... 谢谢!
[解决办法]
- Delphi(Pascal) code
或者根据窗口名列表来显示procedure TForm1.ComboBox1Change(Sender: TObject);begin if Assigned(Application.FindComponent(Trim(ComboBox1.Text))) then TForm(Application.FindComponent(Trim(ComboBox1.Text))).Show;end;其它子form中维护这个窗口名列表就行了,比如procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);begin Form1.ComboBox1.Items.Delete(form1.ComboBox1.Items.IndexOf(Self.Caption));end;procedure TForm2.FormShow(Sender: TObject);begin if Form1.ComboBox1.Items.IndexOf(Self.Caption)<0 then form1.ComboBox1.Items.Add(Self.Caption); form1.ComboBox1.ItemIndex:=Form1.ComboBox1.Items.IndexOf(Self.Caption);end;
[解决办法]
用一个 Combobox。记录每打开一个Form记录下Form对象。
窗口关闭时,再删除。
这样,你即可以知道有几个FOrm打开,具体哪几个,显示出它的标题,Form的所有信息都可以
[解决办法]
用TPopupMenu菜单也可以.
每打开一个窗口,就添加到TPopupMenu菜单里.
每关闭一个窗口则减少相应的项.关闭最后一个的时候将此按钮也隐藏或释放掉
[解决办法]
太不厚道了,会的人都从来不授业解惑的,还说什么20分太少,这类人真是蹦着分去的,楼主,百度下你就知道:
1.动态生成菜单项
var
FirstItem: TMenuItem;
SecondItem: TMenuItem;
begin
FirstItem := TMenuItem.Create(Self);
FirstItem.Caption := ‘FirstName’;
PopupMenu1.Items.Add(FirstItem); //添加一级分类
SecondItem := TMenuItem.Create(Self);
SecondItem.Caption := ‘SecondName’;
FirstItem.Add(SecondItem);//添加二级分类
ThirdItem := TMenuItem.Create(Self);
ThirdItem.Caption := ‘ThirdName’;
ThirdItem.OnClick := MenuClick;
SecondItem.Add(ThirdItem);//添加三级节点
end;
2.自定义动态菜单的事件
//先自定义一个函数
procedure TForm1.MenuClick(Sender: TObject);
var
i: Integer;
begin
ShowMessage(TMenuItem(Sender).Caption);//显示当前点击的菜单项的Caption
end;
//将自定义函数赋给菜单项
FirstItem := TMenuItem.Create(Self);
FirstItem.Caption := FirstName;
FirstItem.OnClick := MenuClick; //增加这句
PopupMenu1.Items.Add(FirstItem); //添加一级分类
3.去掉菜单项Caption中的&符号
FirstItem := TMenuItem.Create(Self);
FirstItem.AutoHotkeys := maManual;//增加这句
PopupMenu1.AutoHotkeys := maManual;//或者增加这句
FirstItem.Caption := ‘FirstName’;
FirstItem.OnClick := MenuClick;
PopupMenu1.Items.Add(FirstItem); //添加一级分类
至于popupmenu的click事件,可以以过程形式再另写出来,如上面代码中FirstItem.OnClick := MenuClick;其中Menuclick就是click事件的过程名。楼主可以慢慢捉摸下。。。。