古いDelphiやBCBでフォルダ選択ダイアログを今風にしたいと思っています
#今までは定番のSHBrowseForFolderを使用していました
#上記は入力が出来無いのでUNCパスの指定(コピペ等)が辛い
vista以降ならIFileOpenDialogを使うと出来る情報には当たりましたが
これを古いDelphi、正確にはC++BuilderのVer.5(非unicode)で使う方法はありますでしょうか?
・IFileOpenDialog自体はCoCreateInstance(CLSID_FileOpenDialog,...で使えそうな気はする
・でも受け皿のIFileDialogが古いBCBには無い、これ上手く移植出来るかな?
・もし出来てももしかしたら日本語パスにunicodeで必須で使えない?
古い環境なので出来無いなら出来無いで諦めがつきます
代替案含め何か実現方法があればよろしくお願い致します
SHBrowseForFolder で解決しない場合 SelectDirectory を使うとある程度 新しい風の表示が出来ます
フォルダの参照ダイアログ
http://mrxray.on.coocan.jp/Delphi/plSamples/801_FolderBrowser.htm
SelectDirectoryの説明
https://docwiki.embarcadero.com/Libraries/Seattle/ja/Vcl.FileCtrl.SelectDirectory
vramさん、回答ありがとうございます
Mr.XRAYさんの所にもあるSelectDirectoryの3番目の構文が使えれば近い形になるのですが
この関数はDelphi 10 Seattle以降からなので古い環境では動かないんですよね・・・・
内部的にはIFileDialogを経由しているみたいなのでこの部分をなんとかして
手書き(WindowsAPIのみの記述)に出来無いかと思っている所です
Delphi10以降じゃないと動きませんか・・・
自分もDelphiXE5でのフォルダ選択は困っていたのですが
結局の所
TTreeViewで フォルダ構成のツリー表示
TListViewで フォルダ内構成の表示
と自作で解決させてしまっています
古くないDELPHI で DLL 作って、それを介して使用する
それはちょっと寂しいですね・・・
Delphi 10 Seattle以前の環境でも外部連携無しで書ける方法を見つけておくと使う人は居そうな気がします
手元に環境があるXE3からWinAPI関連のヘッダ引っ張り出してIFileDialogを再現しようとしてみましたが・・・
いかんせんBCB5はunicodeがダメなんでどうにもなりませんでした(逆にXE3ならいけそうだった)
流石にこれはもう無理かな、残念です
ツイート | ![]() |