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

📄 017.htm

📁 delphi教程
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<p>  以上控件前四个在</font>Component Palette(<font face="宋体" lang="ZH-CN">部件选择板</font>)<font
face="宋体" lang="ZH-CN">的</font>System<font face="宋体" lang="ZH-CN">页中,</font>DirectoryOutline<font
face="宋体" lang="ZH-CN">在</font>Component Palette<font face="宋体" lang="ZH-CN">的</font>Samples<font
face="宋体" lang="ZH-CN">页中。</p>
<p>  以上文件控件再加上文件编辑框、目录标签框</font>(<font
face="宋体" lang="ZH-CN">事实上是一般的编辑框、标签框</font>)<font
face="宋体" lang="ZH-CN">就可以构成一个完整的文件操作系统。它们之间的联系几乎不用代码支持,只要设置好相应的属性就可以了。</p>
<p> </font> FileEdit<font face="宋体" lang="ZH-CN">、</font>DirLabel<font
face="宋体" lang="ZH-CN">、</font>FileListBox<font face="宋体" lang="ZH-CN">、</font>FileFilterComloList<font
face="宋体" lang="ZH-CN">、</font> DirectoryListBox<font face="宋体" lang="ZH-CN">、</font>DriveComboList<font
face="宋体" lang="ZH-CN">六个控件间的属性联系如下: </p>
<p>  </font>DriveComboList .DirList := DirectoryListBox;</p>
<font face="宋体" lang="ZH-CN"><p>  </font>DirectoryListBox.DirLabel := DirLabel;</p>
<p>DirectoryListBox.FileList := FileListBox;</p>
<p>FileFilterComboList.FileList := FileListBox;</p>
<p>FileListBox.FileEdit := FileEdit; </p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上联系可以在设计时完成。只要打开相应属性的选择列表框进行选择即可。也可以在运行时利用如上的赋值语句建立联系。</p>
<p>  文件控件的关键属性基本上都在以上联系中反映出来了。除此之外,</font>FileFilterComboList<font
face="宋体" lang="ZH-CN">有一个</font>Filter<font face="宋体" lang="ZH-CN">属性,用来设置组合列表框的选择项;</font>FileListBox
<font face="宋体" lang="ZH-CN">有一个</font>Mask<font face="宋体" lang="ZH-CN">属性,用于设置显示文件的类型,这就允许</font>FileListBox<font
face="宋体" lang="ZH-CN">在脱离</font>FileFilterComboList<font face="宋体"
lang="ZH-CN">单独应用时仍能根据需要显示特定的文件。在</font>6.4<font
face="宋体" lang="ZH-CN">节中我们将应用这一功能。</p>
<p>  文件控件的方法、事件基本是从</font>ListBox<font face="宋体"
lang="ZH-CN">和</font>ComboBox<font face="宋体" lang="ZH-CN">中继承的。但</font>FileListBox
<font face="宋体" lang="ZH-CN">中有一个</font>ApplyFilePath<font face="宋体"
lang="ZH-CN">方法很有用,我们将在后边给出其用法。 </p>
</font><p>6.3.2 <font face="宋体" lang="ZH-CN">文件名浏览查找系统的设计思路 </p>
<p>  作为文件控件的应用实例,我们开发了一个简单的文件名浏览查找系统。这个系统可用于文件名的显示,把选中的文件写入列表框,并能按文件编辑框中输入的通配符对文件进行查找。</font></p>
<font face="宋体" lang="ZH-CN"><p>表</font>6.5 <font face="宋体" lang="ZH-CN">部件的设计</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</font></p>
<p><font face="宋体" lang="ZH-CN">部件 属性 功能</p>
<p>─────────────────────────────────────</font></p>
<p>FileCtrForm Position=poDefault <font face="宋体" lang="ZH-CN">主窗口</font></p>
<p>DirLabel <font face="宋体" lang="ZH-CN">显示当前目录</font></p>
<p>FileEdit TabOrder=0 <font face="宋体" lang="ZH-CN">显示当前文件</font>/<font
face="宋体" lang="ZH-CN">输入文件显示匹配符</font></p>
<p>FileListBox1 FileEdit=FileEdit <font face="宋体" lang="ZH-CN">显示当前目录文件</font></p>
<p>DirectoryListBox1 DirLabel=DirLabel <font face="宋体" lang="ZH-CN">显示当前驱动器目录</p>
</font><p>FileList= FileListBox1</p>
<p>DriveComboBox1 DirList= DirectoryListBox1 <font face="宋体" lang="ZH-CN">选择当前驱动器</font></p>
<p>FilterComboBox1 FileList=FileListBox1 <font face="宋体" lang="ZH-CN">选择文件显示类型</p>
</font><p>Filter='All Files(*.*)|*.*|</p>
<p>Source Files(*.pas)|*.pas|</p>
<p>Form Files(*.dfm)|*.dfm|</p>
<p>Project Files(*.dpr)|*.dpr'</p>
<p>ListBox1 <font face="宋体" lang="ZH-CN">显示选中或查找的文件</font></p>
<p>Button1 Caption='<font face="宋体" lang="ZH-CN">查找</font>' <font face="宋体"
lang="ZH-CN">按</font> FileEdit <font face="宋体" lang="ZH-CN">中的内容进行查找</font></p>
<p>Button2 Caption='<font face="宋体" lang="ZH-CN">退出</font>' <font face="宋体"
lang="ZH-CN">退出系统</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
</font><p>6.3.3 <font face="宋体" lang="ZH-CN">文件名浏览查找系统的功能和实现 </p>
</font><p>6.3.3.1 <font face="宋体" lang="ZH-CN">按指定后缀名显示当前目录中的文件 </p>
<p>  实现这一功能只需要在控件间建立正确的联系即可,不需要代码支持。建立联系的方法如</font>(6.3.1)<font
face="宋体" lang="ZH-CN">中的介绍。 </p>
</font><p>6.3.3.2 <font face="宋体" lang="ZH-CN">把选中的文件添加到列表框中 </p>
<p>  在</font>FileListBox1<font face="宋体" lang="ZH-CN">的</font>OnClick<font
face="宋体" lang="ZH-CN">事件中: </p>
</font><p>procedure TFileCtrForm.FileListBox1Click(Sender: TObject);</p>
<p>begin</p>
<p>if Searched then</p>
<p>begin</p>
<p>Searched := False;</p>
<p>ListBox1.Items.Clear;</p>
<p>Label5.Caption := 'Selected Files';</p>
<p>end;</p>
<p>if NotInList(ExtractFileName(FileListBox1.FileName),ListBox1.Items) then</p>
<p>ListBox1.Items.Add(ExtractFileName(FileListBox1.FileName));</p>
<p>end;</p>
<font face="宋体" lang="ZH-CN"><p>  </font>Searched<font face="宋体" lang="ZH-CN">是一个全局变量,用于标明</font>ListBox1<font
face="宋体" lang="ZH-CN">当前显示内容是查找的结果还是从</font>FileListBox1<font
face="宋体" lang="ZH-CN">中选定的文件。</font></p>
<p><font face="宋体" lang="ZH-CN">函数</font>NotInList<font face="宋体" lang="ZH-CN">用于判断待添加的字符串是否已存在于一个</font>TStrings<font
face="宋体" lang="ZH-CN">对象中。函数返回一个布尔型变量。</p>
<p>  </font>NotInList<font face="宋体" lang="ZH-CN">的具体实现如下。 </p>
</font><p>Function TFileCtrForm.NotInList(FileName: String;Items: TStrings): Boolean;</p>
<p>var</p>
<p>i: Integer;</p>
<p>begin</p>
<p>for I := 0 to Items.Count-1 do</p>
<p>if Items[i] = FileName then</p>
<p>begin</p>
<p>NotInList := False;</p>
<p>Exit;</p>
<p>end;</p>
<p>NotInList := True;</p>
<p>end; </p>
<p>6.3.3.3 <font face="宋体" lang="ZH-CN">按指定匹配字符串显示当前目录中的文件 </p>
<p>  当在</font>FileEdit<font face="宋体" lang="ZH-CN">中输入一个匹配字符串,并回车,文件列表框将显示匹配结果。这一功能在</font>FileEdit<font
face="宋体" lang="ZH-CN">的</font>OnKeyPress<font face="宋体" lang="ZH-CN">事件中实现。 </p>
</font><p>procedure TFileCtrForm.FileEditKeyPress(Sender: TObject; var Key: Char);</p>
<p>begin</p>
<p>if Key = #13 then</p>
<p>begin</p>
<p>FileListBox1.ApplyFilePath(FileEdit.Text);</p>
<p>Key := #0;</p>
<p>end;</p>
<p>end;</p>
<p><font face="宋体" lang="ZH-CN">  文件列表框提供的</font>ApplyFilePath<font
face="宋体" lang="ZH-CN">方法是解决这一问题的关键所在。 </font></p>
<p>6.3.3.4 <font face="宋体" lang="ZH-CN">按指定匹配字符串查找当前目录中的文件 </p>
<p>  为了进行比较,我们用另一种方法来实现文件的查找功能,即利用标准过程</font>FindFirst<font
face="宋体" lang="ZH-CN">、</font>FindNext<font face="宋体" lang="ZH-CN">。</font>FileList1<font
face="宋体" lang="ZH-CN">与</font>ListBox1 <font face="宋体" lang="ZH-CN">中的内容完全一致。</font></p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当用户单击“查找”按钮时,与</font>FileEdit
<font face="宋体" lang="ZH-CN">中字符串相匹配的文件将显示在</font>ListBox1<font
face="宋体" lang="ZH-CN">中。下面是实现代码。 </p>
</font><p>procedure TFileCtrForm.Button1Click(Sender: TObject);</p>
<p>var</p>
<p>i: Integer;</p>
<p>SearchRec: TSearchRec;</p>
<p>begin</p>
<p>Searched := True;</p>
<p>Label5.Caption := 'Search Result';</p>
<p>ListBox1.Items.Clear;</p>
<p>FindFirst(FileEdit.text,faAnyFile,SearchRec);</p>
<p>ListBox1.Items.Add(SearchRec.Name);</p>
<p>Repeat</p>
<p>i := FindNext(SearchRec);</p>
<p>If i = 0 then</p>
<p>ListBox1.Items.Add(SearchRec.Name);</p>
<p>until i &lt;&gt; 0;</p>
<p>end;</p>
<font face="宋体" lang="ZH-CN"><p>  </font>SearchRec<font face="宋体" lang="ZH-CN">是一个</font>TSearchRec<font
face="宋体" lang="ZH-CN">类型的记录。</font>TSearchRec<font face="宋体"
lang="ZH-CN">的定义如下: </p>
</font><p>TSearchRec = record</p>
<p>Fill: array[1..21] of Byte;</p>
<p>Attr: Byte;</p>
<p>Time: Longint;</p>
<p>Size: Longint;</p>
<p>Name: string[12];</p>
<p>end;</p>
<font face="宋体" lang="ZH-CN"><p> </font> <font face="宋体" lang="ZH-CN">在这一结构中提供了很多信息,灵活应用将给编程带来很大方便。下面我们举几个例子。</p>
<p>  </font>1. <font face="宋体" lang="ZH-CN">检测给定文件的大小。 </p>
</font><p>function GetFileSize(const FileName: String): LongInt;</p>
<p>var</p>
<p>SearchRec: TSearchRec;</p>
<p>begin</p>
<p>if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then</p>
<p>Result := SearchRec.Size</p>
<p>else</p>
<p>Result := -1;</p>
<p>end; </p>
<p><font face="宋体" lang="ZH-CN">这一程序将在下一节中应用。</p>
<p>  </font>2. <font face="宋体" lang="ZH-CN">获取给定文件的时间戳,事实上等价于</font>FileAge<font
face="宋体" lang="ZH-CN">函数。 </p>
<p>  </font>function GetFileTime(const FileName: String): Longint;</p>
<p>var</p>
<p>SearchRec: TSearchRec;</p>
<p>begin</p>
<p>if FindFirst(ExpandFileName(FileName),faAnyFile, SearchRec) = 0 then</p>
<p>Result := SearchRec.Time</p>
<p>else</p>
<p>Result := -1;</p>
<p>end; </p>
<p>3. <font face="宋体" lang="ZH-CN">检测文件的属性。如果文件具有某种属性,则 </p>
</font><p>SearchRec.Attr And GivenAttr &gt; 0 </p>
<p><font face="宋体" lang="ZH-CN">属性常量对应的值与意义如下表: </p>
<p>   表</font>6.6 <font face="宋体" lang="ZH-CN">属性常量对应的值与意义</p>
<p>━━━━━━━━━━━━━━━━━━━━</p>
<p>常量 值 描述</p>
<p>─────────────────────</p>
</font><p>faReadOnly $01 <font face="宋体" lang="ZH-CN">只读文件</p>
</font><p>faHidden $02 <font face="宋体" lang="ZH-CN">隐藏文件</p>
</font><p>faSysFile $04 <font face="宋体" lang="ZH-CN">系统文件</p>
</font><p>faVolumeID $08 <font face="宋体" lang="ZH-CN">卷标文件</p>
</font><p>faDirectory $10 <font face="宋体" lang="ZH-CN">目录文件</p>
</font><p>faArchive $20 <font face="宋体" lang="ZH-CN">档案文件</p>
</font><p>faAnyFile $3F <font face="宋体" lang="ZH-CN">任何文件</font> </p>
<font face="宋体" lang="ZH-CN"><p>━━━━━━━━━━━━━━━━━━━━ </p>
</font><p>6.4 <font face="宋体" lang="ZH-CN">文件管理综合举例:文件管理器的实现 </p>
<p>  在本章的最后,我们利用</font>Delphi<font face="宋体" lang="ZH-CN">提供的文件控件和文件管理函数开发一个简单的文件管理器。虽然这一文件管理器还无法和</font>Windows<font
face="宋体" lang="ZH-CN">提供的文件管理器相比拟,但它也为一般的文件操作提供了足够多的功能,而且如果读者感兴趣,还可以对它做进一步的扩充。在后边的拖放操作一章中,我们就为它提供了拖放支持,使它看起来更象一个“文件管理器”。</font></p>
<p>6.4.1 <font face="宋体" lang="ZH-CN">设计基本思路 </p>
</font><p>6.4.1.1 <font face="宋体" lang="ZH-CN">窗口设计 </p>
<p>  文件管理器的主窗口是一个多文档界面</font>(MDI)<font
face="宋体" lang="ZH-CN">。有关文件、目录的显示和文件管理功能的实现都放在子窗口中。在程序执行过程中将根据需要弹出一些完成不同操作的对话框。这些对话框都是在需要时动态生成的。表</font>6.7<font
face="宋体" lang="ZH-CN">给出了本程序所设计窗体的清单。 </p>
<p>   表</font>6.7 FileManger<font face="宋体" lang="ZH-CN">窗体清单</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>窗体类 功能</font> <font face="宋体" lang="ZH-CN">用于创建该类窗体的菜单项</p>
<p>──────────────────────────────────────</font></p>
<p>TFileManager <font face="宋体" lang="ZH-CN">主窗口 </font></p>
<p>TFMForm <font face="宋体" lang="ZH-CN">子窗口 </font>Windows|New Window</p>
<p>TFileAttrForm <font face="宋体" lang="ZH-CN">显示文件属性 </font>File|Properties;Function|Search</p>
<p>TChangeForm <font face="宋体" lang="ZH-CN">文件移动、拷贝、改名、改变</font>
File|Move.Cope.Rename <font face="宋体" lang="ZH-CN">当前目录等操作的输入对话框
</font>Directory|change Directory</p>
<p>TSearchForm <font face="宋体" lang="ZH-CN">输入待查找文件的名称和路径</font>
Function|Search</p>
<p>TDiskViewForm <font face="宋体" lang="ZH-CN">显示磁盘信息 </font>Function|Disk
View</p>
<p>TViewDir <font face="宋体" lang="ZH-CN">输入待创建的子目录 </font>Directory|CreateDirectory</p>
<p>TAboutBox <font face="宋体" lang="ZH-CN">显示版权信息 </font>Help|About</p>
<font face="宋体" lang="ZH-CN"><p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
</font><p>6.4.1.2 <font face="宋体" lang="ZH-CN">界面设计 </p>
<p>  主窗口界面主要是主菜单和用于表示当前目录、当前文件的状态条。 </p>
<p>   表</font>6.8 <font face="宋体" lang="ZH-CN">主窗口界面设计</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>部件 属性 功能</p>
<p> ─────────────────────────────</font></p>
<p>FileManager Style=fsMDI <font face="宋体" lang="ZH-CN">主窗口</p>
</font><p>WindowMenu=Windows</p>
<p>Position=poDefault </p>
<p>MainMenu1 <font face="宋体" lang="ZH-CN">主菜单</font></p>
<p>FilePanel Align=alBottom <font face="宋体" lang="ZH-CN">显示当前选中文件</p>
</font><p>BevelInner=bvLowered</p>
<p>BevelWidth=2</p>
<p>DirectoryPanel Align=alBottom <font face="宋体" lang="ZH-CN">显示当前选中目录</p>
</font><p>Alignment=taLeftJustify</p>
<p>BevelInner=bvLowered</p>
<p>BevelWidth=2</p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</font></p>
<p> </p>
<font face="宋体" lang="ZH-CN"><p>主窗口主菜单包括</font>File<font face="宋体"
lang="ZH-CN">、</font>WIndows<font face="宋体" lang="ZH-CN">、</font>Help<font

⌨️ 快捷键说明

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