⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 017.htm

📁 很不错的delphi入门级教程
💻 HTM
📖 第 1 页 / 共 3 页
字号:
lang="ZH-CN">、</font>WIndows<font face="宋体" lang="ZH-CN">、</font>Help<fontface="宋体" lang="ZH-CN">三项。</font>File<font face="宋体" lang="ZH-CN">菜单项在子窗口生成时被子窗口同名菜单项所取代。设置</font>Windows<fontface="宋体" lang="ZH-CN">、</font>Help<font face="宋体" lang="ZH-CN">的</font>GroupIndex= 9<font face="宋体" lang="ZH-CN">,可以使子窗口生成时这两个菜单项仍存在。</p><p>  子窗口界面包括主菜单、目录树</font>(DirectoryOutline)<fontface="宋体" lang="ZH-CN">、文件列表框、</font> <font face="宋体" lang="ZH-CN">用于显示驱动器的标签集</font>(TabSet)<fontface="宋体" lang="ZH-CN">以及三个用于显示驱动器类型的</font>TImage<fontface="宋体" lang="ZH-CN">部件。 </p><p>  表</font>6.9 <font face="宋体" lang="ZH-CN">子窗口界面设计</p><p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p>部件 属性 功能</p><p>───────────────────────────────────────</font></p><p>FMForm ActiveControl=DirectoryOutline <font face="宋体" lang="ZH-CN">子窗口</p></font><p>Position=poDefault</p><p>Style=fsMDIChild</p><p>MainMenu1 <font face="宋体" lang="ZH-CN">主菜单</font></p><p>DriveTabSet Align=alTop <font face="宋体" lang="ZH-CN">显示驱动器</p></font><p>style=tsOwnerDraw</p><p>DirectoryOutline Align=alLeft <font face="宋体" lang="ZH-CN">显示当前驱动器的目录树</p></font><p>options=[ooDrawTreeRoot,</p><p>ooDrawFocusRect,ooStretchBitmaps]</p><p>FileList Align=alClient <font face="宋体" lang="ZH-CN">显示当前目录中的文件</p></font><p>FileType=[ftReadOnly,</p><p>ftHidden,ftSystem,ftArchive,ftNormal]</p><p>ShowGlyphs=True</p><p>Network(Image) Picture(Network.bmp) <font face="宋体" lang="ZH-CN">标志网络驱动器</p></font><p>Vsible=False</p><p>Floppy(Image) Picture(Floppy.bmp) <font face="宋体" lang="ZH-CN">标志软驱</p></font><p>Visible=False</p><p>Fixed(Image) Picture(Fixed.bmp) <font face="宋体" lang="ZH-CN">标志硬驱</p></font><p>Visible=False</p><font face="宋体" lang="ZH-CN"><p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</font></p><p> </p><font face="宋体" lang="ZH-CN"><p>子窗口主菜单包括</font>File<font face="宋体"lang="ZH-CN">、</font>Function<font face="宋体" lang="ZH-CN">、</font>Directory<fontface="宋体" lang="ZH-CN">三个菜单项,</font> <font face="宋体" lang="ZH-CN">分别用于完成文件的基本管理功能、其它管理功能和目录管理功能。</p><p>  由于对话框界面设计很简单,这里不再进行赘述。</font> <fontface="宋体" lang="ZH-CN">读者可直接参考后面将给出的对话框界面图</font>(<fontface="宋体" lang="ZH-CN">图</font>6.8---6.13)<font face="宋体" lang="ZH-CN">进行设计。</p><p> </font></p><p>6.4.2 <font face="宋体" lang="ZH-CN">子窗口的创建、布置和关闭</p><p> </p><p>  子窗口的创建、布置由父窗口的</font>Windows<font face="宋体"lang="ZH-CN">菜单控制,其菜单项如下:</p><p>  ●</font> New Windows : <font face="宋体" lang="ZH-CN">创建新的子窗口</font></p><p><font face="宋体" lang="ZH-CN">●</font> Tile : <font face="宋体" lang="ZH-CN">平铺</p><p>  ●</font> Cascade : <font face="宋体" lang="ZH-CN">层叠</p><p>  ●</font> ArrangeIcon : <font face="宋体" lang="ZH-CN">排列图标</p><p> </font> <font face="宋体" lang="ZH-CN">●</font> Minimized All : <fontface="宋体" lang="ZH-CN">极小化所有子窗口</p><p> </p><p>  子窗口的创建只需要简单调用窗体的</font>Create<font face="宋体"lang="ZH-CN">方法:</p><p> </p><p>  </font>FileMan := TFMForm.Create(Application);</p><p> </p><p><font face="宋体" lang="ZH-CN">子窗口的标准排列方式直接调用</font>MDI<fontface="宋体" lang="ZH-CN">窗口的标准方法</font>Tile<font face="宋体"lang="ZH-CN">、</font>Cascade<font face="宋体" lang="ZH-CN">和</font>ArrangeIcons<fontface="宋体" lang="ZH-CN">。</p><p>  极小化所有子窗口的实现利用</font>MDI<font face="宋体" lang="ZH-CN">窗口的两个属性:</font>MDIChildCount<fontface="宋体" lang="ZH-CN">和</font>MDIChildren<font face="宋体" lang="ZH-CN">:</p><p> </p><p>  </font>for i := 0 to MDICount - 1 do</p><p>MDIChildren[i].Windowstate := wsMinimized;</p><p> </p><p> </p><font face="宋体" lang="ZH-CN"><p>  子窗口关闭时释放内存空间,为此在子窗口</font>TFMForm<fontface="宋体" lang="ZH-CN">的</font>OnClose<font face="宋体" lang="ZH-CN">事件中令</p><p> </p></font><p>Action := OnFree<font face="宋体" lang="ZH-CN">;</p><p> </p><p>  为了保持和</font>Windows<font face="宋体" lang="ZH-CN">的</font>FileManager<font face="宋体" lang="ZH-CN">的一致性,我们也禁止关闭最后一个子窗口,这需要在子窗口的</font>OnCloseQuery<fontface="宋体" lang="ZH-CN">事件处理过程中实现:</p><p> </font></p><p>If FileManager.MDIChildCount &lt;= 1 then</p><p>CanClose := False;</p><p> </p><p>CanClose<font face="宋体" lang="ZH-CN">是</font>OnCloseQuery<font face="宋体"lang="ZH-CN">事件过程返回的一个参数,用于判定窗口是否可以关闭。</p><p>  由于这一过程归子窗口所有,因而</font>MDIChildCount<fontface="宋体" lang="ZH-CN">前必须加上其对象名</font>FileManager<fontface="宋体" lang="ZH-CN">。</p><p>  但不幸的是:这样一来我们的程序无法终止了!原来</font>MDI<fontface="宋体" lang="ZH-CN">窗口关闭前首先关闭其所有的子窗口。如果子窗口不能关闭,</font>MDI<fontface="宋体" lang="ZH-CN">窗口也不能关闭。</font></p><p><font face="宋体" lang="ZH-CN">为此我们需要判断发出关闭消息的是子窗口的系统菜单还是菜单的</font>Exit<fontface="宋体" lang="ZH-CN">项。</p><p>  定义一个全局变量</p><p> </p><p>  </font>var</p><p>ExitClick: Boolean;</p><p> </p><p><font face="宋体" lang="ZH-CN">在子窗口的</font>Exit1Click<font face="宋体"lang="ZH-CN">事件处理过程中:</p><p> </font></p><p>ExitClick := True;</p><p>FileManager.Exit1Click(Sender);</p><p> </p><p> </p><font face="宋体" lang="ZH-CN"><p>  子窗口关闭前可以利用这一全局变量检测是否应关闭:</p><p> </p><p>  </font>If (FileManager.MDIChildCount &lt;= 1) and (Not ExitClick) then</p><p>CanClose := False;</p><p> </p><p>6.4.3 <font face="宋体" lang="ZH-CN">文件控件的联系</p><p> </p><p>  在本例中我们使用了一组新的控件:</font>TabSet<font face="宋体"lang="ZH-CN">、</font>DirectoryOutline<font face="宋体" lang="ZH-CN">、</font>FileListBox<fontface="宋体" lang="ZH-CN">,用于显示和选择驱动器、目录和文件。与</font>(6.3)<fontface="宋体" lang="ZH-CN">中所用方法相比,使用这一组控件需要少量的代码支持。</p><p>  </font>TabSet<font face="宋体" lang="ZH-CN">与</font>DirectoryOutline<fontface="宋体" lang="ZH-CN">的联系在</font>TabSet<font face="宋体" lang="ZH-CN">的</font>Click<fontface="宋体" lang="ZH-CN">事件处理过程中建立:</p><p> </p><p>  </font>With DriveTabSet do</p><p>DirectoryOutline.Drive := Tabs[TabIndex][1];</p><p> </p><p>DirectoryOutline<font face="宋体" lang="ZH-CN">与</font>FileListBox<fontface="宋体" lang="ZH-CN">的联系在</font>DirectoryOutline<font face="宋体"lang="ZH-CN">的</font>Change<font face="宋体" lang="ZH-CN">事件处理过程中建立:</p><p> </font></p><p>FileList.Directory := DirectoryOutline.Directory;</p><p>FileList.Update;</p><p> </p><p>6.4.4 DriveTabSet<font face="宋体" lang="ZH-CN">的自画风格显示 </p><p>  </font>Dephi<font face="宋体" lang="ZH-CN">为一些控件提供了自画风格的显示,如</font>ListBox<fontface="宋体" lang="ZH-CN">、</font>ComboBox<font face="宋体" lang="ZH-CN">、</font>TabSet<fontface="宋体" lang="ZH-CN">等。</font> <font face="宋体" lang="ZH-CN">在缺省情况下,这些控件自动显示文本。而在自画风格下,拥有控件的窗体在运行时间内自己画出控件的每一项目。</font></p><p><font face="宋体" lang="ZH-CN">自画风格显示通常的应用是为项目除文本外再添加图形显示。能以自画风格显示的控件有一个共同特点:都拥有一个</font>TStrings<fontface="宋体" lang="ZH-CN">类型的项目链。由于</font>TStrings<font face="宋体"lang="ZH-CN">类的特点</font>(<font face="宋体" lang="ZH-CN">参第三章</font>)<fontface="宋体" lang="ZH-CN">,它们都可以加入一个和对应文本相联系的对象。</font><font face="宋体" lang="ZH-CN">而这正是自画风格显示的关键。</p><p>  通常情况下产生一个自画风格需要三个步骤:</p><p>  </font>1.<font face="宋体" lang="ZH-CN">设置自画风格;</p><p>  </font>2.<font face="宋体" lang="ZH-CN">向字符串链表添加图形对象;</p><p>  </font>3.<font face="宋体" lang="ZH-CN">画出自画项目。 </p></font><p>6.4.4.1 <font face="宋体" lang="ZH-CN">设置自画风格 </p><p>  控件属性</font>Style <font face="宋体" lang="ZH-CN">用于设置自画风格。对于</font>DriveTabSet<fontface="宋体" lang="ZH-CN">,我们把</font>Style <font face="宋体" lang="ZH-CN">属性设置为</font>tsOwnerDraw<fontface="宋体" lang="ZH-CN">。</p><p>  对于</font>ListBox<font face="宋体" lang="ZH-CN">、</font>ComboBox<fontface="宋体" lang="ZH-CN">等控件的设置与</font>TabSet<font face="宋体"lang="ZH-CN">略有差异,读者可参阅联机帮助文档。 </p></font><p>6.4.4.2 <font face="宋体" lang="ZH-CN">向字符串链表添加图形对象 </p><p>  </font>1.<font face="宋体" lang="ZH-CN">在应用程序中添加图片部件</p><p>  在本程序中我们设置了三个图片部件</font>NetWork<font face="宋体"lang="ZH-CN">、</font>Floppy<font face="宋体" lang="ZH-CN">、</font>Fixed<fontface="宋体" lang="ZH-CN">,并分别与三个位图文件</font>NetWork.bmp<fontface="宋体" lang="ZH-CN">、</font>Floppy.bmp<font face="宋体" lang="ZH-CN">、</font>Fixed.bmp<fontface="宋体" lang="ZH-CN">相关联。</p><p>  </font>2.<font face="宋体" lang="ZH-CN">把图片添加到字符串链表中</p><p>  根据字符串链表的性质,我们可以把对象与已存在的字符串建立联系,也可以同时添加字符串和对象。这里我们采用后一种方法。</p><p>  在子窗口的</font>OnCreate<font face="宋体" lang="ZH-CN">事件处理过程中,我们利用一个循环依次检测从</font>a<fontface="宋体" lang="ZH-CN">到</font>z<font face="宋体" lang="ZH-CN">的驱动器是否存在以及驱动器的类型。这利用了</font>WindwosAPI<font face="宋体" lang="ZH-CN">函数</font>GetDrivetype, <font face="宋体"lang="ZH-CN">如果驱动器不存在则返回</font>0<font face="宋体" lang="ZH-CN">,否则返回驱动器的类型</font>(DRIVE_REMOVABLE<fontface="宋体" lang="ZH-CN">、</font>DRIVE_FIXED<font face="宋体" lang="ZH-CN">、</font>DRIVE_REMOTE)<fontface="宋体" lang="ZH-CN">。根据驱动器类型我们可以判断与文本</font>(<fontface="宋体" lang="ZH-CN">驱动器名</font>)<font face="宋体" lang="ZH-CN">同时添加到</font>Tabs<fontface="宋体" lang="ZH-CN">中的不同图形对象。在添加过程中,</font>DriveTabSet<fontface="宋体" lang="ZH-CN">的</font>TabIndex<font face="宋体" lang="ZH-CN">被设置为当前驱动器。</font></p><p><font face="宋体" lang="ZH-CN">程序清单如下: </p></font><p>procedure TFMForm.FormCreate(Sender: TObject);</p><p>var</p><p>Drive, AddedIndex: Integer;</p><p>DriveLetter: Char;</p><p>begin</p><p>for Drive := 0 to 25 do</p><p>begin</p><p>DriveLetter := Chr(Drive + ord('a'));</p><p>case GetDrivetype(Drive) of</p><p>DRIVE_REMOVABLE:</p><p>AddedIndex := DriveTabSet.Tabs.AddObject(DriveLetter, Floppy.Picture.Graphic);</p><p>DRIVE_FIXED:</p><p>AddedIndex := DriveTabSet.Tabs.AddObject(DriveLetter, Fixed.Picture.Graphic);</p><p>DRIVE_REMOTE:</p><p>AddedIndex := DriveTabSet.Tabs.AddObject(DriveLetter, Network.Picture.Graphic);</p><p>end;</p><p>if UpCase(DriveLetter) = UpCase(FileList.Drive) then</p><p>DriveTabSet.TAbIndex := AddedIndex;</p><p>end;</p><p>end;</p><p>6.4.4.3 <font face="宋体" lang="ZH-CN">画出自画项目 </p><p>  当把一个控件的风格设置为自画时,</font>Windows<font face="宋体"lang="ZH-CN">不再负责往屏幕上画出控件的项目,而是为每个可见项目产生自画事件。应用程序可以通过处理自画事件画出控件的项目。 </p></font><p>1.<font face="宋体" lang="ZH-CN">确定自画项目的大小 </p><p>  对于</font>TabSet<font face="宋体" lang="ZH-CN">而言,这在</font>OnMeasureTab<fontface="宋体" lang="ZH-CN">事件处理过程中完成。我们需要把</font>DriveTabSet<fontface="宋体" lang="ZH-CN">每个标签的宽度增大到足以同时放下文本和位图。 </p></font><p>procedure TFMForm.DriveTabSetMeasureTab(Sender: TObject; Index: Integer;</p><p>var TabWidth: Integer);</p><p>var</p><p>BitmapWidth: Integer;</p><p>begin</p><p>BitmapWidth := TBitmap(DriveTabSet.Tabs.Objects[Index]).Width;</p><p>Inc(TabWidth, 2 + BitmapWidth);</p><p>end;</p><font face="宋体" lang="ZH-CN"><p>  由于</font>TStrings<font face="宋体"lang="ZH-CN">的</font>Objects<font face="宋体" lang="ZH-CN">属性中存放的对象都是</font>TObject<fontface="宋体" lang="ZH-CN">类型,并没有</font>Width<font face="宋体" lang="ZH-CN">属性,因而需要再把它转化为</font>TBitmap<fontface="宋体" lang="ZH-CN">类型的对象: </p><p> </font> BitmapWidth := TBitmap(DriveTabSet.Tabs.Objects[Index]).Width;</p><p align="center"><font face="宋体" lang="ZH-CN"> </font></p><hr  width="94%"></TD><TD CLASS="tt3" VALIGN="bottom" width="8%"  ><strong><A HREF="018.htm"><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR><A HREF="016.htm"><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR><A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR></strong></TD></TR></table></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -