熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

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

2022-06-13   來源: Delphi編程 

   一致的界面

  文件拷貝文件移動 文件更名以及後邊的改變當前目錄在形式上都表現為從一個源文件到一個目標文件因而可以采用統一的用戶界面即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函數這個函數允許在多個不同路徑中查找但可惜的是也許由於系統設計者的失誤這個函數並沒有返回它應該返回的東西(第一個匹配文件的全路徑名)而是仍把輸入的匹配符返回

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25233.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.