其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

DELPHI基础教程:文件管理(三)[2]


发布日期:2020年09月17日
 
DELPHI基础教程:文件管理(三)[2]

一致的界面

文件拷贝文件移动 文件更名以及后边的改变当前目录在形式上都表现为从一个源文件到一个目标文件因而可以采用统一的用户界面即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函数这个函数允许在多个不同路径中查找但可惜的是也许由于系统设计者的失误这个函数并没有返回它应该返回的东西(第一个匹配文件的全路径名)而是仍把输入的匹配符返回

[] [] [] []

               

上一篇:DELPHI基础教程:文件管理(三)[3]

下一篇:DELPHI基础教程:文件管理(三)[1]