一致的界面
文件拷贝文件移动 文件更名以及后边的改变当前目录在形式上都表现为从一个源文件到一个目标文件因而可以采用统一的用户界面即ChangeForm对话框
这四个菜单项共用一个Click事件处理过程通过对Sender参数的检测决定将要打开对话框的标题和显示内容当用户按OK键关闭且目标文件(目录)非空时程序弹出一个消息对话框要求用户进一步确认而后执行相应的动作
共用的事件处理过程FileChange的程序清单如下
procedure TFMFormFileChange(Sender: TObject)
var
ChangeForm: TChangeForm;
IsFile: Boolean;
begin
ChangeForm := TchangeFormCreate(Self)
IsFile := True;
with ChangeForm do
begin
if Sender = Move then Caption := Move
else if Sender = Copy then Caption := Copy
else if Sender = Rename then Caption := Rename
else if Sender = ChangeDirectory then
begin
Caption:=Change Directory;
IsFile:=False;
end
else Exit;
if IsFile then
begin
CurrentDirCaption := FileListDirectory;
FromFileNameText := FileListFileName;
ToFileNameText := ;
end
else
begin
CurrentDirCaption := DriveTabSetTabs[DriveTabSetTabIndex];
FromFileNameText := DirectoryOutlineDirectory;
ToFileNameText := ;
end;
if (ShowModal <> idCancel) and (ToFileNameText <> ) then
ConfirmChange(Caption FromFileNameText ToFileNameText)
end;
end;
其中用到的自定义私有过程ConfirmChange用于执行相应的动作
procedure TFMFormConfirmChange(const ACaption FromFile ToFile: String)
begin
if MessageDlg(Format(%s %s to %s [ACaption FromFile ToFile])
mtConfirmation [mbYes mbNo] ) = idYes then
begin
if ACaption = Move then
MoveFile(FromFile ToFile)
else if ACaption = Copy then
CopyFile(FromFile ToFile)
else if ACaption = Rename then
RenameFile(FromFile ToFile)
else if ACaption = Change Directory then
changeDirectory(ToFile)
FileListUpdate;
end;
end;
显示文件属性
当程序执行Properties 菜单项的Click 事件处理过程时首先弹出一个TFileAttrForm类型的对话框显示文件的属性
当用户修改并确认后程序重新设置文件属性
Properties菜单项的Click事件处理过程如下
procedure TFMFormPropertiesClick(Sender: TObject)
var
Attributes NewAttributes: Word;
FileAttrForm: TFileAttrForm;
begin
FileAttrForm := TFileAttrFormCreate(self)
ShowFileAttr(FileAttrFormFileListFileNameFileListDirectory)
end;
其中过程ShowFileAttr的实现如下
procedure TFMFormShowFileAttr(FileAttrForm:TFileAttrForm;
AFileNameDirectory:String)
var
AttributesNewAttributes: Word;
begin
with FileAttrForm do
begin
FileNameCaption := AFileName;
FilePathCaption := Directory;
ChangeDateCaption := DateTimeToStr(FileDateTime(AFileName))
Attributes := FileGetAttr(AFileName)
ReadOnlyChecked := (Attributes and faReadOnly) = faReadOnly;
ArchiveChecked := (Attributes and faArchive) = faArchive;
SystemChecked := (Attributes and faSysFile) = faSysFile;
HiddenChecked := (Attributes and faHidden) = faHidden;
if ShowModal <> idCancel then
begin
NewAttributes := Attributes;
if ReadOnlyChecked then NewAttributes := NewAttributes or faReadOnly
else NewAttributes := NewAttributes and not faReadOnly;
if ArchiveChecked then NewAttributes := NewAttributes or faArchive
else NewAttributes := NewAttributes and not faArchive;
if SystemChecked then NewAttributes := NewAttributes or faSysFile
else NewAttributes := NewAttributes and not faSysFile;
if HiddenChecked then NewAttributes := NewAttributes or faHidden
else NewAttributes := NewAttributes and not faHidden;
if NewAttributes <> Attributes then
FileSetAttr(AFileName NewAttributes)
end;
end;
end;
以上过程中用到的函数FileDataTime在fmxutils单元中定义返回一个TDatatime类型的变量
function FileDateTime(const FileName: String) SystemTDateTime;
begin
Result := FileDateToDateTime(FileAge(FileName))
end;
其它文件管理功能的实现
在子窗口的Function菜单中定义了一些其它的文件管理功能
● Search :查找一个给定名字的文件若存在则显示该文件属性
● Disk View :显示当前驱动器的大小和剩余空间
● View type :确定显示文件的类型
文件查找
当用户单击Search菜单项时程序弹出一个对话框(如图)要求输入待查找的文件名和查找路径文件名可以是通配符当用户确认后程序显示第一个匹配文件的属性(如图)查找不到匹配文件则给出相应的信息
在实现这一功能的最初设计中我试图使用FileSearch函数这个函数允许在多个不同路径中查找但可惜的是也许由于系统设计者的失误这个函数并没有返回它应该返回的东西(第一个匹配文件的全路径名)而是仍把输入的匹配符返回
[] [] [] []