DelphiでWindowsエクスプローラー風のフォルダ選択UIを作る – TFolderSelectの紹介
はじめに
Delphiでフォルダを選択させるUIといえば、昔ながらの SelectDirectory
や SHBrowseForFolder
が定番ですが、
- 「今風じゃないUI…」
- 「サイズや位置の指定ができない…」
- 「クリックイベントの制御が難しい…」
といった不満を感じたことはありませんか?
🎯 この記事の目的
本記事では、Delphiで使える完全オリジナルの「フォルダ選択コンポーネント」
TFolderSelect
を紹介します。特に「ツリー表示で自然に操作できる」ことを重視して設計されています。
🖼️ 実行結果
🔧 主な機能
- ツリー形式の表示でフォルダ構造を直感的に選択
-
SelectFolder
: 選択中のフォルダパスを取得・設定 -
SelectFolderCreateNew
: サブフォルダ作成 + 自動リネームモード -
SelectFolderBeginEdit
: フォルダ名の編集開始 -
SelectFolderDelete
: ごみ箱にフォルダを削除(SHFileOperation対応) -
OnFolderSelect
: ユーザーによる明示的な左クリック時のみ発火するイベント
🚀 使い方
インストール
-
FolderSelect.pas
をプロジェクトに追加してください。 - フォームに配置する場合は以下のようにコードで生成:
procedure TFormMain.FormCreate(Sender: TObject);
begin
FFolderSelect := TFolderSelect.Create(Self);
FFolderSelect.Parent := Self;
FFolderSelect.Align := alClient;
FFolderSelect.OnFolderSelect := OnFolderSelect;
end;
procedure TFormMain.OnFolderSelect(Sender: TObject);
begin
Caption := FFolderSelect.SelectFolder;
end;
📁 初期表示フォルダを指定する
uses System.IOUtils;
procedure TFormMain.FormShow(Sender: TObject);
begin
FFolderSelect.ShowFolder(TPath.GetDocumentsPath);
end;
✨ Explorer風の操作感を再現
✅ 新しいフォルダを作成すると…
FFolderSelect.SelectFolderCreateNew;
→ 自動で名前編集状態に入り、ユーザーがそのままリネーム可能!
✅ 削除も対応(ごみ箱に送る)
FFolderSelect.SelectFolderDelete;
→ SHFileOperationW
を使用して、ごみ箱送りにも完全対応。
🚫 改善されたイベント制御
OnFolderSelect
は…
- 左クリックのみ発火
- 展開操作や右クリックでは発火しない
- 右クリック時は自動でそのノードを選択してからポップアップ表示できる
🛠 公開インターフェース一覧
メソッド / プロパティ名 | 説明 |
---|---|
SelectFolder |
選択中のフォルダパスを取得・設定 |
ShowFolder |
指定パスのフォルダをツリー上に展開して選択状態にする |
SelectFolderCreateNew |
サブフォルダを作成して即編集モード |
SelectFolderBeginEdit |
フォルダ名の変更を開始 |
SelectFolderDelete |
ごみ箱に削除 |
OnFolderSelect |
ユーザーが明示的に左クリックしたときのみ発火 |
✅ 実際に動かすとこうなる(例)
- ツリー表示でフォルダをナビゲート
- 新しいフォルダ作成→その場で名前編集
- フォルダ削除→ごみ箱に入る
- イベント制御→右クリックでも正しいノードが選ばれる
🔄 今後の拡張候補
- コンテキストメニュー連携用イベントの公開
- ノードごとのアイコン変更
- フィルタリングや仮想フォルダ対応
- 非同期読み込みへの拡張(大量フォルダ対策)
公開場所
📄 ライセンス
MIT または パブリックドメイン
👤 作者
VRAMの魔術師
✍️ まとめ
Delphi で 本当に使いやすいフォルダ選択UI を作るには、
既存のAPIではどうしても限界がありました。
TFolderSelect
は、それを超えて エクスプローラーに限りなく近いUX を実現したコンポーネントです。
個人開発・業務アプリ問わず、ぜひ一度使ってみてください!