一个简单的MDI示范程序(Delphi)
1、将建立好的About窗体的Name属性设置为AboutBox,BorderStyle属性设置为bsDialog
2、以PVAboutU保存此About对话框窗体单元;
3、切换到Code Editor中的PctViewU标签,从Delphi主菜单选择【File | Use Unit】将PVAboutU单元包含近来;
4、按F12切换到MainForm主窗体,从菜单上选择【Help | About】,这样就产生一个OnClick处理事件;
5、为此事件添加代码如下:
procedure TMainForm.About1Click(Sender: TObject); begin AboutBox.ShowModal; end;
现在运行它,点击Run按钮,试一试Help菜单的About选项,运行效果如下:
六、进一步完善程序
此时这个程序已经可以运行了,但它不等于就没有值得完善的地方。
对于这个程序还有两个问题需要值得注意,它们容易混淆,首先,当启动该程序时,会显示一个空白MDI子窗口,这是因为Delphi应用程序会自动建立所有窗体。我们可以从自动产生的清单中删除MDI子窗体。
1、从Delphi主菜单中选择【Project | Options…】,将显示Project Option对话框;
2、点击Forms标签,其中“Auto-create forms”中显示的就是所有会自动创建产生的窗体清单;
3、点击其中不想要自动创建的窗体Child,选择 >按钮,就会从自动创建列表中删除该子窗口,并把它放置到“Available forms”列表中。
再次运行此程序,这一次将不显示空白MDI子窗体。
Caution
如果要从自动产生清单中删除一个窗体,就必须保证在用它之前要建立一个专门的窗体,如果不建立一个窗体,指向窗体的指针就不能初始化,这就意味着还没有为此指针赋一个有意义的值(记住指针是由Delphi自动产生)。试图用这个指针,其结果将会产生一个非法错误,当从自动产生清单中删除一个窗体后,就必须负责在用它之前建立它。
还有一个问题,就是在MDI窗体上点击关闭按钮时,发现子窗口并没有关闭,而是最小化,因此我们要修改它,使得点击关闭后真正被关闭。
1、在Form Designer中选择Child子窗体,选中窗体本身,确认在Object Inspector的Component Selector中选择的是Child。
2、双击Events页的OnClose事件,添加代码如下:
procedure TChild.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
把关闭动作设置为caFree,指示VCL关闭子窗体,并释放与窗体有关的内存,这时点击MDI子窗体关闭按钮就可以正常关闭了。
4、再次运行此程序,证明此程序的表现与前面所述的一样。