1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DelphiでWindowsエクスプローラー風のフォルダツリー選択「TFolderSelect」の紹介

Last updated at Posted at 2025-09-18

DelphiでWindowsエクスプローラー風のフォルダ選択UIを作る – TFolderSelectの紹介


はじめに

Delphiでフォルダを選択させるUIといえば、昔ながらの SelectDirectorySHBrowseForFolder が定番ですが、

  • 「今風じゃないUI…」
  • 「サイズや位置の指定ができない…」
  • 「クリックイベントの制御が難しい…」

といった不満を感じたことはありませんか?


🎯 この記事の目的

本記事では、Delphiで使える完全オリジナルの「フォルダ選択コンポーネント」
TFolderSelect を紹介します。特に「ツリー表示で自然に操作できる」ことを重視して設計されています。


🖼️ 実行結果

image.png


🔧 主な機能

  • ツリー形式の表示でフォルダ構造を直感的に選択
  • SelectFolder: 選択中のフォルダパスを取得・設定
  • SelectFolderCreateNew: サブフォルダ作成 + 自動リネームモード
  • SelectFolderBeginEdit: フォルダ名の編集開始
  • SelectFolderDelete: ごみ箱にフォルダを削除(SHFileOperation対応)
  • OnFolderSelect: ユーザーによる明示的な左クリック時のみ発火するイベント

🚀 使い方

インストール

  1. FolderSelect.pas をプロジェクトに追加してください。
  2. フォームに配置する場合は以下のようにコードで生成:
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 を実現したコンポーネントです。
個人開発・業務アプリ問わず、ぜひ一度使ってみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?