一个简单的MDI示范程序(Delphi)
Note
在上面的方法中,ExtractFileName函数是用来从路径中提取文件名的函数,文件名包含在OpenPictureDialog的FileName属性中,相关的函数包括ExtractFilePath、ExtractFileDir、ExtractFileDrive和ExtractFileExt。
Note
前面我们说过所有动态创建的对象到最后都要用Free删除掉,但是上面的代码中好像违反了这个规律,实际上并没有,因为VCL将负责释放分配给MDI子窗口的内存。注意TChild构造程序中的单个参数是Self;这是通知VCL,MDI子窗体的拥有者就是此MDI窗体窗口。当MDI窗体消失时,它将删除所有MDI子对象。
3、按下F12键,切换到主窗体MainForm,现在从菜单中选择【File | Save As…】,将会显示该菜单项处理事件。
4、键入以下代码:
procedure TMainForm.SaveAs1Click(Sender: TObject); begin if SavePictureDialog.Execute then begin with ActiveMDIChild as TChild do { 检查MDI子窗体是否被激活,只保存激活窗体的图像文件} Image.Picture.SaveToFile(SavePictureDialog.FileName); end; end;
这段代码比较简洁,头两行是用来检查MDI子窗口是否被激活,如果是激活的窗体,就会显示“Save a Picture”对话框,若用户点击OK,那就将用TPicture类的SaveToFile方法把图像存到盘上去。
Note
前面的这段代码中用到了as操作符,ActiveMDIChild属性返回一个指向TForm对象的指针,在这种情况下,实际上只需要一个指向TChild对象的指针(MDI子类是从TForm类派生来的),as操作符把ActiveMDIChild变量强制转化为一个TChild指针,如果as不能完成这种强制转化,as后面的语句将被忽略。
在继续讲解前,我们先把这个工程保存起来,将Unit1保存为PctViewU.pas,将工程文件dpr保存为PictView。
三、为【Windows】菜单编写代码
1、F12切换到MainForm窗体上,从窗体上MainMenu菜单上选择【Windows | Tile】;
2、只需要为此事件处理程序中输入一行代码即可,最终的事件处理代码如下:
procedure TMainForm.ile1Click(Sender: TObject); begin Tile; end;
3、切换到MainForm窗体,并为菜单【Windows | Cascade】创建代码,如下:
procedure TMainForm.Cascade1Click(Sender: TObject); begin Cascade; end;
4、切换到MainForm窗体,再次为菜单【Windows | Arrange All】创建代码如下:
procedure TMainForm.ArrangeAll1Click(Sender: TObject); begin ArrangeIcons; end;
好,主窗体工作完成了,下面将进行创建MDI子窗体。
四、创建MDI子窗体
MDI子窗体非常简单,实际上不必写任何代码,只要操作下列各步即可:
1、用工具栏上的New Form按钮或者通过主菜单上的【File | New Form】来创建一个新窗体;
2、把它的Name属性设置为Child,Caption属性将被忽略,因为在运行阶段将要动态设置此属性;
3、把FormStyle属性设置为fsMDIChild,为了把这个窗体当做MDI子窗体来处理,这是必须的。
为窗体本身要做的就这些,下面就在此窗体上放置一个Image组件,Image组件将显示用户选择的图形文件。
1、点击组件选项板上的Additional标签,点击Image按钮,并把它放置到Child窗体上;
2、把它的Name属性设置为Image;
3、把它的Stretch属性设置为True;
4、把它的Align属性设置为alClient,Image组件将缩放到窗体的客户区大小;
5、选择Delphi主菜单的【File | Save】,以MDIChild保存此窗体单元。
6、切换到Code Editor,点击PctViewU标签,然后从Delphi主菜单选择【File | Use Unit】,选择MDIChild单元,点击OK,这样该工程就可以编译了。
此时,整个MDI子窗体看上去如下:
我们的程序还没有完成,因为还差一个About框,此时我们更渴望看到程序的运行,先点击Run按钮,就可以运行程序了,选择【File | Open…】就可以打开任何图形文件了。
注意MDI子窗口会自动缩放它所包含的图形,打开几个文件,然后试一试Window菜单的Cascade和Tile选项。
五、建立About对话框