旧Dephi(BCB5)でIFileOpenDialogのフォルダ選択


AND@岡山  URL  2023-12-19 04:17:08  No: 151305  IP: 192.*.*.*

古いDelphiやBCBでフォルダ選択ダイアログを今風にしたいと思っています
#今までは定番のSHBrowseForFolderを使用していました
#上記は入力が出来無いのでUNCパスの指定(コピペ等)が辛い

vista以降ならIFileOpenDialogを使うと出来る情報には当たりましたが
これを古いDelphi、正確にはC++BuilderのVer.5(非unicode)で使う方法はありますでしょうか?

・IFileOpenDialog自体はCoCreateInstance(CLSID_FileOpenDialog,...で使えそうな気はする
・でも受け皿のIFileDialogが古いBCBには無い、これ上手く移植出来るかな?
・もし出来てももしかしたら日本語パスにunicodeで必須で使えない?

古い環境なので出来無いなら出来無いで諦めがつきます
代替案含め何か実現方法があればよろしくお願い致します

編集 削除
vram  2023-12-19 06:05:52  No: 151306  IP: 192.*.*.*

SHBrowseForFolder で解決しない場合 SelectDirectory を使うとある程度 新しい風の表示が出来ます

フォルダの参照ダイアログ
http://mrxray.on.coocan.jp/Delphi/plSamples/801_FolderBrowser.htm

SelectDirectoryの説明
https://docwiki.embarcadero.com/Libraries/Seattle/ja/Vcl.FileCtrl.SelectDirectory

編集 削除
AND@岡山  2023-12-19 06:42:18  No: 151307  IP: 192.*.*.*

vramさん、回答ありがとうございます
Mr.XRAYさんの所にもあるSelectDirectoryの3番目の構文が使えれば近い形になるのですが
この関数はDelphi 10 Seattle以降からなので古い環境では動かないんですよね・・・・

内部的にはIFileDialogを経由しているみたいなのでこの部分をなんとかして
手書き(WindowsAPIのみの記述)に出来無いかと思っている所です

編集 削除
vram  2023-12-19 07:10:51  No: 151308  IP: 192.*.*.*

Delphi10以降じゃないと動きませんか・・・

自分もDelphiXE5でのフォルダ選択は困っていたのですが
結局の所
TTreeViewで フォルダ構成のツリー表示
TListViewで フォルダ内構成の表示
と自作で解決させてしまっています

編集 削除
AAAAA  2023-12-19 12:58:49  No: 151309  IP: 192.*.*.*

古くないDELPHI で DLL 作って、それを介して使用する

編集 削除
AND@岡山  2023-12-21 02:18:42  No: 151310  IP: 192.*.*.*

それはちょっと寂しいですね・・・
Delphi 10 Seattle以前の環境でも外部連携無しで書ける方法を見つけておくと使う人は居そうな気がします

編集 削除
AND@岡山  2024-01-09 05:05:39  No: 151353  IP: 192.*.*.*

手元に環境があるXE3からWinAPI関連のヘッダ引っ張り出してIFileDialogを再現しようとしてみましたが・・・
いかんせんBCB5はunicodeがダメなんでどうにもなりませんでした(逆にXE3ならいけそうだった)
流石にこれはもう無理かな、残念です

編集 削除