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

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

2013-11-23 17:51:53  來源: Delphi編程 

  目錄刪除過程的實現代碼如下

  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游戲開發實踐指南

[]  []  []  []  


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