ページ 11

フォルダーの選択ダイアログ

Posted: 2011年3月02日(水) 14:13
by 水波形
最近必要になったので、調べまわって書いてみました。

BytePtr型がいまいち理解できていないので、とりあえず戻り値はString型でやってます。
BytePtrってmalloc関数使わないと文字入れられないのか思ってたけど、そうでもないのね。

一応動きますが、直せる方がいらっしゃいましたら直してください。
とりあえず、これだけあれば使えるかなぁ・・・って感じです。
後は適当に調べてください~

蛇足ですが、
SHBrowseForFolder関数で返って来る数値でファイルパスが決まるとは思ってもいなかった。
SHGetPathFromIDList関数はどうやって識別しているのか謎。
まあ、今の自分には理解できない事でしょうが・・・

良かったら使ってみてください~
重複あったらすいません。

確認ですが

Posted: 2011年3月03日(木) 15:46
by たかせ
ウインドー系のプログラムでないのでhMainWndを使用していなくて、そのためコンパイルエラーが出て気が付きました。

確認ですが
With bor
.hwndOwner=hMainWnd
.lpszTitle=DialogName
.ulFlags=Flags
.pidlRoot=Root
End With

With bor
.hwndOwner=hWnd
.lpszTitle=DialogName
.ulFlags=Flags
.pidlRoot=Root
End With
が正解ですね。

せっかくhWndを指定するので生かしたほうがよいと思います。
いかがでしょうか?

フォルダーの選択ダイアログ

Posted: 2011年3月04日(金) 00:55
by 水波形
確認ですが
With bor
.hwndOwner=hMainWnd
.lpszTitle=DialogName
.ulFlags=Flags
.pidlRoot=Root
End With



With bor
.hwndOwner=hWnd
.lpszTitle=DialogName
.ulFlags=Flags
.pidlRoot=Root
End With
が正解ですね。

せっかくhWndを指定するので生かしたほうがよいと思います。
いかがでしょうか?
おぶしっ。
はい、思いっきりミスです。

もともとは、まず自分で使う用に参考にしながら組んで、それから適当に関数にしてここに書きましたので、
そのときのミスですね・・・

↓修正版です
しなくても分かるかな?w

ちなみに何で関数の形にしてここに置くかと言うと、
自分がまだプログラミングのぷの字も知らない頃、とにかく慣れようと手当たり次第ここのコードをコピペしてました。
そのときに関数の形で置いてくれている方の物はものすごく助かったので、
自分も(多少ですが)公開できるようになった今、そんな人に向けて関数の形で書いてます。

はい、どーでもいいですね 笑

また修正点などありましたら、遠慮なく突っ込んであげてください~

Posted: 2011年3月04日(金) 02:06
by HSABP
DialogNameはBytePtrなので、
文字列と直接ひかくするのは良くない。

コード: 全て選択


   If DialogName[0]=0 Then
        lstrcpy(DialogName,"フォルダーの選択")
    End If
引数をDialogName As Stringにして
.lpszTitle=StrPtr(DialogName)
とでもすべき。

フォルダーの選択ダイアログ

Posted: 2011年3月05日(土) 14:20
by 水波形
DialogNameはBytePtrなので、
文字列と直接ひかくするのは良くない。
ぬ・・・そうなのですか・・・
やはりまだまだ自分は分かってない事が多いですね・・・

コード: 全て選択


If DialogName[0]=0 Then
        lstrcpy(DialogName,"フォルダーの選択")
    End If 
こちらに書き換えてご使用ください~