需求類似檔案總管的 UI,嘗試舊世代 TDriveComboBox/TDirectoryListBox/TFileListBox (Win 3.1 遺物,醜陋不堪) 後,發現 Vcl.Shell.ShellCtrls 單元提供的 Shell Controls 才是現代正解。
uses Vcl.Shell.ShellCtrls;
var
C: TShellComboBox;
T: TShellTreeView;
L: TShellListView;
procedure TForm1.FormCreate(Sender: TObject);
begin
C := TShellComboBox.Create(Self);
T := TShellTreeView.Create(Self);
L := TShellListView.Create(Self);
C.Parent := Self;
T.Parent := Self;
L.Parent := Self;
{ 版面配置:ComboBox 頂部、TreeView 左側、ListView 填滿 }
T.Width := Screen.Width div 4;
C.Align := alTop;
T.Align := alLeft;
L.Align := alClient;
{ 關聯三大元件:ComboBox ↔ TreeView ↔ ListView }
T.ShellComboBox := C;
L.ShellTreeView := T;
L.ViewStyle := vsList; { 清單檢視模式 }
T.OnChange := TreeViewOnChange;
end;
procedure TForm1.TreeViewOnChange(Sender: TObject; Node: TTreeNode);
begin
Caption := T.SelectedFolder.PathName; { 標題列顯示當前路徑 }
end;
| 元件 | 關鍵屬性/事件 | 說明 |
|---|---|---|
| TShellTreeView | ShellComboBox | 關聯下拉選單,同步顯示路徑 |
| TShellListView | ShellTreeView | 關聯樹狀圖,同步顯示選中資料夾內容 |
| TShellListView | ViewStyle | vsIcon/vsList/vsReport/vsSmallIcon |
| TShellTreeView | OnChange | 選中資料夾變更事件 |
| TShellTreeView | SelectedFolder.PathName | 取得完整路徑字串 |
棄用 20 年前的 FileCtrl 元件,擁抱 ShellCtrls 才是構建現代檔案管理介面的正確選擇。