DirectoryOutline.Directory := ExtractFilePath(Path)Refresh/Update 無效,嘗試切換磁碟機又會導致單磁碟機環境崩潰利用 Delphi 提供的 Sample 元件原始碼,直接修改並編譯為增強版:
DirPlus,類別改名 TDirectoryOutlinePlusReset,強制重讀當前磁碟機目錄樹:
procedure TDirectoryOutlinePlus.Reset;
begin
ChDir(FDrive + ':');
GetDir(0, FDirectory);
FDirectory := ForceCase(FDirectory);
if not (csLoading in ComponentState) then BuildTree;
end;
DirPlus.tpu,加入元件調色盤 Samples 頁FileList.Align→放入新元件→設 Align=alLeft、FileList.Align=alClient→重新綁定 OnChangeprocedure 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;
重新編譯執行,目錄建立/刪除即時反映於畫面,並獲得功能更強的目錄樹元件。