一个MDI菜单的问题......(50分)

  • 主题发起人 主题发起人 Coolfaery
  • 开始时间 开始时间
C

Coolfaery

Unregistered / Unconfirmed
GUEST, unregistred user!
我建立了一个MDI Form后,再新建一个ChildForm后,ChildForm的菜单就把MDI菜单完全覆盖了,无论最大化、最小化都不能显示MDIForm的主菜单,唯有把ChildForm关掉才行,怎么办?
 
转载的,你看看

4.1.3 创建应用程序菜单与菜单融合 

  父窗口的菜单应作为应用程序主菜单。如果子窗口有菜单,则当子窗口在运行获得焦点并最大化时,子窗口的菜单项将融合父窗口菜单。

  创建父窗口与子窗口菜单的方法与创建普通窗体菜单类似,详细步骤见第一章。菜单融合是指程序运行过程中,子菜单与父窗口菜单的相互作用。如当子窗口获得焦点时,子窗口的菜单或插入主窗口的菜单中,或将替换部分或全部的父窗口菜单。

  进行菜单融合需设置的两个属性:

  ● 窗体的Menu属性

  ● 菜单项的GroupIndex属性

Menu属性定义窗体的活动菜单,而菜单融合只对活动菜单进行。 如果窗体有多个菜单部件,运行时可通过以下代码进行改变:

  Form1.Menu := SecondMenu; 

GroupIndex属性决定出现在菜单条中各菜单项的位置,在菜单融合中,GroupIndex 将

决定融合菜单是插入还是替换主窗体菜单条中的菜单。

  GroupIndex的缺省值是0,可以用下规则确定其值:

  1. 数值越小,菜单的位置越靠左。

  例如:GroupIndex为0的菜单将出现在菜单条中的最左端。随着GroupIndex数值的增大,菜单项依次向右排列。

  2. 若需替换主菜单中的某一菜单项,则将子菜单相应菜单项的GroupIndex设为与之相等的值。这条规则适合一个或多个菜单项。例如,主菜单中的"Edit"菜单项的GroupIndex 的值为1。将子菜单的一个或多个菜单项的GroupIndext的值设为1,则在运行时,这些菜单项替换主窗口的"Edit"菜单。

  将同一窗体的多个菜单项的GroupIndex设为相同值, 原有的排列顺序在菜单融合时将保持

不变。

  3. 若要在菜单融合时插入菜单项,需在主菜单中预留数值“位置”。例如,主菜单的两菜单项数值为0,5,则子菜单GroupIndex数值为1,2,3,4的菜单在融合时将插入其中。

  在使用MDI界面时,用户通常会打开多个窗体。为了使用户方便地进行窗体切换,常设有一个进行切换的菜单项.此菜单列出了打开窗体的名称,当用户选择其中的一个时,程序进行相应的窗体切换。在Delphi的MDI设计时,可非常方便地实现这一功能。方法是将父窗口的WindowMenu设置成该菜单项的名字即可。

 
后退
顶部