首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 目錄管理進階:刪除目錄難題與元件擴充實戰

     編輯:Delphi

刪除目錄兩大難題

  1. RmDir 不允許刪除當前目錄:解法——先切換到父目錄:DirectoryOutline.Directory := ExtractFilePath(Path)
  2. 刪除後畫面不更新:Refresh/Update 無效,嘗試切換磁碟機又會導致單磁碟機環境崩潰

方案:擴充 DirectoryOutline 元件

利用 Delphi 提供的 Sample 元件原始碼,直接修改並編譯為增強版:

  1. 開啟原始碼,單元改名 DirPlus,類別改名 TDirectoryOutlinePlus
  2. 新增公有方法 Reset,強制重讀當前磁碟機目錄樹:
    procedure TDirectoryOutlinePlus.Reset;
        begin
          ChDir(FDrive + ':');
          GetDir(0, FDirectory);
          FDirectory := ForceCase(FDirectory);
          if not (csLoading in ComponentState) then BuildTree;
        end;
  3. 編譯為 DirPlus.tpu,加入元件調色盤 Samples 頁
  4. 設計時替換原元件:刪除舊→調整 FileList.Align→放入新元件→設 Align=alLeft、FileList.Align=alClient→重新綁定 OnChange

修正後的目錄建立/刪除代碼

procedure TFMForm.DeleteDirectory1Click(Sender: TObject);
var Path: String;
begin
  {$I-}
  Path := DirectoryOutline.Directory;
  DirectoryOutline.Directory := ExtractFilePath(Path);
  if MessageDlg('Delete ' + Path + '?', mtConfirmation, [mbYes, mbNo], 0) = idYes then
    RmDir(Path);
  if IOResult <> 0 then
    MessageDlg('Cannot remove directory!', mtWarning, [mbOk], 0)
  else
    DirectoryOutline.Reset; // 關鍵:重繪目錄樹
end;

procedure TFMForm.CreateDirectory1Click(Sender: TObject);
var NewDir: TNewDir; Dir: String;
begin
  {$I-}
  NewDir := TNewDir.Create(Self);
  with NewDir do
    if (ShowModal <> idCancel) and (DirName.Text <> '') then
      Dir := ExpandFileName(DirName.Text);
  MkDir(Dir);
  if IOResult <> 0 then
    MessageDlg('Cannot Create directory', mtWarning, [mbOk], 0)
  else
    DirectoryOutline.Reset;
end;

重新編譯執行,目錄建立/刪除即時反映於畫面,並獲得功能更強的目錄樹元件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved