函数NotInList用于判断待添加的字符串是否已存在于一个TStrings对象中函数返回一个布尔型变量
NotInList的具体实现如下
Function TFileCtrFormNotInList(FileName: String;Items: TStrings) Boolean;
var
i: Integer;
begin
for I := to ItemsCount do
if Items[i] = FileName then
begin
NotInList := False;
Exit;
end;
NotInList := True;
end;
按指定匹配字符串显示当前目录中的文件
当在FileEdit中输入一个匹配字符串并回车文件列表框将显示匹配结果这一功能在FileEdit的OnKeyPress事件中实现
procedure TFileCtrFormFileEditKeyPress(Sender: TObject; var Key: Char)
begin
if Key = # then
begin
FileListBoxApplyFilePath(FileEditText)
Key := #;
end;
end;
文件列表框提供的ApplyFilePath方法是解决这一问题的关键所在
按指定匹配字符串查找当前目录中的文件
为了进行比较我们用另一种方法来实现文件的查找功能即利用标准过程FindFirstFindNextFileList与ListBox 中的内容完全一致
当用户单击查找按钮时与FileEdit 中字符串相匹配的文件将显示在ListBox中下面是实现代码
procedure TFileCtrFormButtonClick(Sender: TObject)
var
i: Integer;
SearchRec: TSearchRec;
begin
Searched := True;
LabelCaption := Search Result;
ListBoxItemsClear;
FindFirst(FileEdittextfaAnyFileSearchRec)
ListBoxItemsAdd(SearchRecName)
Repeat
i := FindNext(SearchRec)
If i = then
ListBoxItemsAdd(SearchRecName)
until i <> ;
end;
SearchRec是一个TSearchRec类型的记录TSearchRec的定义如下
TSearchRec = record
Fill: array[] of Byte;
Attr: Byte;
Time: Longint;
Size: Longint;
Name: string[];
end;
在这一结构中提供了很多信息灵活应用将给编程带来很大方便下面我们举几个例子
检测给定文件的大小
function GetFileSize(const FileName: String) LongInt;
var
SearchRec: TSearchRec;
begin
if FindFirst(ExpandFileName(FileName) faAnyFile SearchRec) = then
Result := SearchRecSize
else
Result := ;
end;
这一程序将在下一节中应用
获取给定文件的时间戳事实上等价于FileAge函数
function GetFileTime(const FileName: String) Longint;
var
SearchRec: TSearchRec;
begin
if FindFirst(ExpandFileName(FileName)faAnyFile SearchRec) = then
Result := SearchRecTime
else
Result := ;
end;
检测文件的属性如果文件具有某种属性则
SearchRecAttr And GivenAttr >
属性常量对应的值与意义如下表
表 属性常量对应的值与意义
━━━━━━━━━━━━━━━━━━━━
常量 值 描述
─────────────────────
faReadOnly $ 只读文件
faHidden $ 隐藏文件
faSysFile $ 系统文件
faVolumeID $ 卷标文件
faDirectory $ 目录文件
faArchive $ 档案文件
faAnyFile $F 任何文件
━━━━━━━━━━━━━━━━━━━━
文件管理综合举例文件管理器的实现
在本章的最后我们利用Delphi提供的文件控件和文件管理函数开发一个简单的文件管理器虽然这一文件管理器还无法和Windows提供的文件管理器相比拟但它也为一般的文件操作提供了足够多的功能而且如果读者感兴趣还可以对它做进一步的扩充在后边的拖放操作一章中我们就为它提供了拖放支持使它看起来更象一个文件管理器
设计基本思路
窗口设计
文件管理器的主窗口是一个多文档界面(MDI)有关文件目录的显示和文件管理功能的实现都放在子窗口中在程序执行过程中将根据需要弹出一些完成不同操作的对话框这些对话框都是在需要时动态生成的表给出了本程序所设计窗体的清单
表 FileManger窗体清单
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
窗体类 功能 用于创建该类窗体的菜单项
──────────────────────────────────────
TFileManager 主窗口
TFMForm 子窗口 Windows|New Window
TFileAttrForm 显示文件属性 File|Properties;Function|Search
TChangeForm 文件移动拷贝改名改变 File|MoveCopeRename 当前目录等操作的输入对话框 Directory|change Directory
TSearchForm 输入待查找文件的名称和路径 Function|Search
TDiskViewForm 显示磁盘信息 Function|Disk View
TViewDir 输入待创建的子目录 Directory|CreateDirectory
TAboutBox 显示版权信息 Help|About
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
界面设计
主窗口界面主要是主菜单和用于表示当前目录当前文件的状态条
表 主窗口界面设计
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
部件 属性 功能
─────────────────────────────
FileManager Style=fsMDI 主窗口
WindowMenu=Windows
Position=poDefault
MainMenu 主菜单
FilePanel Align=alBottom 显示当前选中文件
BevelInner=bvLowered
BevelWidth=
DirectoryPanel Align=alBottom 显示当前选中目录
Alignment=taLeftJustify
BevelInner=bvLowered
BevelWidth=
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
主窗口主菜单包括FileWIndowsHelp三项File菜单项在子窗口生成时被子窗口同名菜单项所取代设置WindowsHelp的GroupIndex = 可以使子窗口生成时这两个菜单项仍存在
子窗口界面包括主菜单目录树(DirectoryOutline)文件列表框 用于显示驱动器的标签集(TabSet)以及三个用于显示驱动器类型的TImage部件
表 子窗口界面设计
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
部件 属性 功能
───────────────────────────────────────
FMForm ActiveControl=DirectoryOutline 子窗口
Position=poDefault
Style=fsMDIChild
MainMenu 主菜单
DriveTabSet Align=alTop 显示驱动器
style=tsOwnerDraw
DirectoryOutline Align=alLeft 显示当前驱动器的目录树
options=[ooDrawTreeRoot
ooDrawFocusRectooStretchBitmaps]
FileList Align=alClient 显示当前目录中的文件
FileType=[ftReadOnly
ftHiddenftSystemftArchiveftNormal]
ShowGlyphs=True
Network(Image) Picture(Networkbmp) 标志网络驱动器
Vsible=False
Floppy(Image) Picture(Floppybmp) 标志软驱
Visible=False
Fixed(Image) Picture(Fixedbmp) 标志硬驱
Visible=False
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[] [] [] []