对话框的OnCloseQuery事件处理过程的程序清单如下
procedure TEditFormFormCloseQuery(Sender: TObject; var CanClose: Boolean)
var
Res: Real;
k: Integer;
begin
if IsCancel = False then
begin
val(ResulttextResk)
if (Res > ) or (Res < ) then k := ;
if k <> then
begin
MessageDlg(非法输入 !mtWarning[mbOK])
Resulttext := ;
CanClose := False;
ResultSetFocus;
end;
end;
end;
文件和系统的关闭
文件关闭须调用CloseFile过程
CloseFile(MethodFile)
并对系统的状态重新进行设置
系统关闭时首先检测当前是否有打开的文件若有则先关闭文件这在主窗口的OnCloseQuery事件中实现
实现文件关闭的程序清单如下
procedure TRecFileFormCloseButtonClick(Sender: TObject)
begin
if FileOpened then
begin
CloseFile(MethodFile)
FileOpened := False;
ClearGrid;
OpenButtonEnabled := True;
NewButtonEnabled := True;
CloseButtonEnabled := False;
RecFileFormCaption := FormCaption;
end;
end;
实现系统关闭前检查的程序清单如下
procedure TRecFileFormFormCloseQuery(Sender: TObject;
var CanClose: Boolean)
begin
if FileOpened then
closeFile(MethodFile)
end;
记录文件小结
我们所举的例子虽然简单但基本覆盖了记录文件操作的主要方面这里关键问题在于灵活应用Delphi提供的文件管理函数同时为了保证程序的健壮性应对异常进行捕获并处理在数据库应用技术发展的今天记录文件的重要性也许有所下降但对象我们这里所处理的简单问题它仍有用武之地
这里所举的例子一次只能处理一个文件但读者可以很容易把它改为一个MDI程序虽然对于这里的实际情况来说似乎并无必要
文件控件的应用
Delphi文件管理的最大特色是提供了一组文件操作控件利用这些控件我们可以快速开发一个文件名浏览系统其功能强大与其所需书写代码之少所形成的强烈反差正是Dephi生命力的体现
文件控件及其相互关系
Delphi提供的专用文件控件如下表所示
表 Delphi专用文件控件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
控件名 功能
─────────────────────────────────────
DriveComboBox 驱动器组合列表框用于选择当前驱动器
FileListBox 文件列表框用于显示当前目录中的文件和选中当前文件
FilterComboBox 文件类型组合列表框用于选择显示文件的类型
DirectoryOutline 目录树(节专门介绍)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
以上控件前四个在Component Palette(部件选择板)的System页中DirectoryOutline在Component Palette的Samples页中
以上文件控件再加上文件编辑框目录标签框(事实上是一般的编辑框标签框)就可以构成一个完整的文件操作系统它们之间的联系几乎不用代码支持只要设置好相应的属性就可以了
FileEditDirLabelFileListBoxFileFilterComloList DirectoryListBoxDriveComboList六个控件间的属性联系如下
DriveComboList DirList := DirectoryListBox;
DirectoryListBoxDirLabel := DirLabel;
DirectoryListBoxFileList := FileListBox;
FileFilterComboListFileList := FileListBox;
FileListBoxFileEdit := FileEdit;
以上联系可以在设计时完成只要打开相应属性的选择列表框进行选择即可也可以在运行时利用如上的赋值语句建立联系
文件控件的关键属性基本上都在以上联系中反映出来了除此之外FileFilterComboList有一个Filter属性用来设置组合列表框的选择项FileListBox 有一个Mask属性用于设置显示文件的类型这就允许FileListBox在脱离FileFilterComboList单独应用时仍能根据需要显示特定的文件在节中我们将应用这一功能
文件控件的方法事件基本是从ListBox和ComboBox中继承的但FileListBox 中有一个ApplyFilePath方法很有用我们将在后边给出其用法
文件名浏览查找系统的设计思路
作为文件控件的应用实例我们开发了一个简单的文件名浏览查找系统这个系统可用于文件名的显示把选中的文件写入列表框并能按文件编辑框中输入的通配符对文件进行查找
表 部件的设计
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
部件 属性 功能
─────────────────────────────────────
FileCtrForm Position=poDefault 主窗口
DirLabel 显示当前目录
FileEdit TabOrder= 显示当前文件/输入文件显示匹配符
FileListBox FileEdit=FileEdit 显示当前目录文件
DirectoryListBox DirLabel=DirLabel 显示当前驱动器目录
FileList= FileListBox
DriveComboBox DirList= DirectoryListBox 选择当前驱动器
FilterComboBox FileList=FileListBox 选择文件显示类型
Filter=All Files(**)|**|
Source Files(*pas)|*pas|
Form Files(*dfm)|*dfm|
Project Files(*dpr)|*dpr
ListBox 显示选中或查找的文件
Button Caption=查找 按 FileEdit 中的内容进行查找
Button Caption=退出 退出系统
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
文件名浏览查找系统的功能和实现
按指定后缀名显示当前目录中的文件
实现这一功能只需要在控件间建立正确的联系即可不需要代码支持建立联系的方法如()中的介绍
把选中的文件添加到列表框中
在FileListBox的OnClick事件中
procedure TFileCtrFormFileListBoxClick(Sender: TObject)
begin
if Searched then
begin
Searched := False;
ListBoxItemsClear;
LabelCaption := Selected Files;
end;
if NotInList(ExtractFileName(FileListBoxFileName)ListBoxItems) then
ListBoxItemsAdd(ExtractFileName(FileListBoxFileName))
end;
Searched是一个全局变量用于标明ListBox当前显示内容是查找的结果还是从FileListBox中选定的文件
[] [] [] []