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