MDI Form 中显示MDI Child窗体列表显示(请不要以为我没有全文检索就提问) ( 积分: 200 )

  • 主题发起人 主题发起人 BmwHans1
  • 开始时间 开始时间
B

BmwHans1

Unregistered / Unconfirmed
GUEST, unregistred user!
关于MDI应用中的子窗体列表显示,本人已在网上查了很多相关贴子,也找到了很多解决方法,但在我自己的程序中就是不行。首先介绍一下我的程序的实现:
1 主应用程序是一个框架,就是一个MDI Form,主菜单分本个部分,‘系统’菜单项包含一些类似于注销、修改密码、退出等所有登录用户都有的功能,‘窗口’菜单项中有对子窗体的排列方法,大家都知道可通过StandardAction实现;而具体的业务权限菜单取决于登录用户的权限动态生成,放在‘系统’菜单与‘窗口’菜单项之间,个数不确定,每个菜单还有子菜单
2 各个子窗体封装在.dll中,调用一个业务功能菜单,就是加载一个.dll,然后打开窗体,所有子窗体都是MDI Child。
3 当打开多个子窗体时,‘窗口’菜单下的几个排列子窗体的子菜单都可用,如层叠、竖排等,但如何实现在‘窗口’菜单下显示已打开的子窗体的列表?

我查了很多贴子,给出的主要解决方法是,将MDI Form的windowmenu设为‘窗口’这个菜单项即可。这个我也试了,我发现在设置静态菜单下是完全正确的,而我的是动态创建主菜单,这个方法试了就是不行。

另外,还有人提出,每个菜单项的快捷键不能相同,否则不能生成窗体列表,而我的程序会自动生成快捷键,把mainmenu.AutoHotkeys置为false也是如此,不知道为什么。

以上两个问题,请各位高手指教!
 
我是在ChildForm中用一个TMenuItem
procedure TForm2.FormCreate(Sender: TObject);
begin
FMenu := TMenuItem.Create(Self);
FMenu.Caption := Self.Caption;
FMenu.Tag := Self.Handle;
FMenu.OnClick := Form1.ChildMenuClick;
Form1.miWindow.Add(FMenu); //miWindow指'窗口'这个菜单
end;

procedure TForm2.FormActivate(Sender: TObject);
begin
FMenu.Checked := True;
end;

procedure TForm2.FormDeactivate(Sender: TObject);
begin
FMenu.Checked := False;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;


{ TForm1 }
procedure TForm1.ChildMenuClick(Sender: TObject);
begin
TForm(FindControl(THandle(TMenuItem(Sender).Tag))).BringToFront;
end;


第二个没遇到过,另:AutoHotkeys不是False是maManual吧
 
to ANiDelphi:
你说的这种方法需要通过自己写方法去实现,如果是这样的话,我可以获取子窗体个数及当前活动窗体的消息去实现。但我的想法是不通过编码,为什么通过设置MainMDIform.windowmenu不能实现呢?
 
那道又没有热心的高手赐教吗?大富翁现在怎么了,高手都去了别的坛子?
 
后退
顶部