三阶魔方基础教程的简单方式 DELPHI基础教程:文件管理(三)[4]
DELPHI基础教程:文件管理(三)[4]
目录删除过程的实现代码如下
procedure TFMForm DeleteDirectory Click(Sender: TObject)
var
path: String;
k: Integer;
begin
{$I }
path := DirectoryOutline Directory;
DirectoryOutline Directory := ExtractFilePath(Path)
if MessageDlg( Delete + path + ? mtConfirmation [mbYes mbNo] ) = idYes then
RmDir(path)
if IOResult <> then
MessageDlg( Cannot remove directory! The path might not +
exist non empty or is the current logged directory mtWarning [mbOk] )
else
DirectoryOutline Reset;
end;
修改后的目录创建过程如下
procedure TFMForm CreateDirectory Click(Sender: TObject)
var
NewDir: TNewDir;
Dir: String;
begin
{$I }
NewDir := TNewDir Create(self)
with NewDir do
begin
CurrentDir Caption := DirectoryOutline Directory;
if (ShowModal <> idCancel) and (DirName Text <> ) then
Dir := ExpandFileName(DirName text)
end;
MkDir(Dir)
if IOResult <> then
MessageDlg( Cannot Create directory mtWarning [mbOk] )
else
DirectoryOutline Reset;
end;
当完成了这些工作 把程序重新编译 运行后 可以发现我们所希望实现的功能完全实现了!同时 我们有了一个更好的目录树部件
改变当前目录
改变当前目录的实现非常简单 只要修改DirectoryOutline的Directory属性 但需注意的是 当改变后目录所在驱动器也发生变化时应相应修改DriveTabSet的当前值 由于驱动器名与DriveTabSet的索引属性TabIndex之间并没有确定的对应关系 因而需要通过一个循环进行查找匹配
Change Directory的菜单事件处理过程是FileChange 即与文件的移动 拷贝 更名共用一个事件处理过程 详细情况请读者参看( )中的介绍
改变当前目录的实现如下
procedure TFMForm ChangeDirectory(Todir: String)
var
i: Integer;
begin
{$I }
ChDir(ToDir)
if IOResult <> then
MessageDlg( Cannot find directory mtWarning [mbOk] )
else
begin
with DirectoryOutline do
begin
Directory := ToDir;
Refresh;
if DriveTabSet Tabs[DriveTabSet TabIndex][ ]<>drive then
for I := to do
if DriveTabSet Tabs[i][ ] = drive then
begin
DriveTabSet TabIndex := i;
Exit;
end;
end;
end;
end;
一些问题的处理
子窗口的标题
Windows的文件管理器是我们设计的楷模 在子窗口显示标题上也不例外 我们把当前目录加上文件的类型作为子窗口的标题
过程CreateCaption用于生成子窗口的标题
procedure TFMForm CreateCaption;
var
Cap: String;
begin
Cap := DirectoryOutline Directory;
Cap := cap+ +FileList mask;
Caption := Cap;
end;
当前目录或文件显示类型发生变化时改变子窗口的标题 如DirectoryOutline的Change事件处理过程和ViewType菜单项的Click事件处理过程就调用了该过程
状态条的显示
状态条用于显示当前目录和当前选中文件 它们的值在DirectoryOutline 和FileList的Change事件处理过程中修改
DirectoryOutline和FileList最终的Change事件处理过程如下
procedure TFMForm DirectoryOutlineChange(Sender: TObject)
begin
CreateCaption;
FileList clear;
FileList Directory := DirectoryOutline Directory;
FileList Update;
FileManager DirectoryPanel Caption := DirectoryOutline Directory;
end;
procedure TFMForm FileListChange(Sender: TObject)
begin
with FileList do
begin
if (ItemIndex >= ) and (Not HasAttr(FileName faDirectory)) then
begin
TheFileName := FileName;
FileManager FilePanel Caption :=
Format( %s %d bytes [TheFileName GetFileSize(TheFileName)])
end
else
FileManager FilePanel Caption := ;
end;
end;
版本信息
当用户单击主窗口的Help|About菜单项时将弹出一个About对话框 用于显示版本信息(如图 )
这一对话框是用Delphi提供的模板做的
菜单项的变灰与使能
File菜单中定义的文件管理功能只有当活动焦点在FileList(即有当前选中文件)时才起作用 否则所有菜单项应变灰 以免导致系统崩溃
这一功能在File菜单的Click事件处理过程中实现 这一点并不很容易被人想到 希望读者能从中受到启发
procedure TFMForm File Click(Sender: TObject)
var
FileSelected: Boolean;
begin
FileSelected := FileList ItemIndex >= ;
Open Enabled := FileSelected;
Delete Enabled := FileSelected;
Copy Enabled := FileSelected;
Move Enabled := FileSelected;
Rename Enabled := FileSelected;
Properties Enabled := FileSelected;
end;
判断是否有文件被选中是通过检测ItemIndex属性是否大于等于 来实现的
FileSelected := FileList ItemIndex >= ;
可重用的文件处理模块
库单元fmxutils是一个代码库 提供了若干文件处理模块 这些模块除在本程序中使用外 读者可以在其它应用程序中直接调用 而且不必重新编译 只要在Uses子句中包含即可 从中我们可以体会到 Delphi 以库单元为中心的程序组织方式提供了一种较完善的代码重用机制
小结
文件管理器是一个较为综合的例程 使用到了绝大部分以文件名 文件句柄以及其它参数(除文件变量)为操作对象的文件管理过程/函数 同时也提供了一些程序设计开发的思想 我们的介绍是以程序功能模块来组织的 我建议读者在学习并试图自己建立这一程序时采用同样的方法 ( )中的内容或许是一开始就应了解的 但其它完全可以按顺序逐步地扩充 最后得到一个完整的程序 这一例程在后边的拖放操作和异常处理等章节中还要用到 读者可以以此为基础进一步完善它 使它真正成为一个完全实用的程序
![三阶魔方基础教程的简单方式 DELPHI基础教程:文件管理(三)[4]](http://img.zhputi.com/uploads/ec8e/ec8e9e10c20b1266b7b9a8784503300687096.jpg)
文件管理是在开发一个高级的Windows程序中不可避免的要涉及到的问题 本章介绍的思路和方法将为读者成为一个熟练的程序员奠定基础
返回目录DELPHI基础教程
编辑推荐
Java程序设计培训视频教程
J EE高级框架实战培训视频教程
Visual C++音频/视频技术开发与实战
Oracle索引技术
ORACLE G数据库开发优化指南
Java程序性能优化 让你的Java程序更快 更稳定
C嵌入式编程设计模式
Android游戏开发实践指南
lishixinzhi/Article/program/Delphi/201311/25235