ab.com コミュニティ https://www.activebasic.com/forum/ |
|
ファイルの複数選択 https://www.activebasic.com/forum/viewtopic.php?t=2668 |
ページ 1 / 1 |
作成者: | 水波形 [ 2011年4月09日(土) 21:53 ] |
記事の件名: | ファイルの複数選択 |
お世話になっています。 ファイルの選択ダイアログにて、ファイルの複数選択で躓いてしまいました。 ファイルが一つの場合、lpstrFileにファイルパスが返ってきますが、 複数を選択させるとlpstrFileにそのファイルがあるフォルダーが返ってくるようです。 これはどのようにしてフルパスを取得していくのでしょうか。 すいませんがお知恵をお貸しください。 よろしくお願いします。 |
作成者: | たかせ [ 2011年4月10日(日) 19:12 ] |
記事の件名: | Re: ファイルの複数選択 |
> ファイルの選択ダイアログにて、ファイルの複数選択で躓いてしまいました。 確認ですがそれはGetOpenFileNameですか? できればその部分のコードを記載願います。 ちなみにもしGetOpenFileNameであれば FlagsにOFN_ALLOWMULTISELECTを指定されましたか? |
作成者: | HSABP [ 2011年4月10日(日) 20:21 ] |
記事の件名: | |
複数選択のlpstrFileの中身は "フォルダ名\01つ目のファイル名\02つめのファイル名\03つめ...\0\0" と\0で区切って格納されてる。 \0を区切り文字として分解し一つ一つに wsprintf(fullpath, "%s%s", フォルダ名, ファイル名) とでもやる |
作成者: | 水波形 [ 2011年4月10日(日) 21:45 ] |
記事の件名: | |
たかせん様、HSABP様ご回答ありがとうございます。 HSABP様の助言から、以下のようなコードを書きました。 しかし、フォルダパスは取得出来るのですがファイル名が取得できませんでした。 ※wsprintf関数はいまいち使い方が分かりませんので・・・・・・ %s%sって何なのでしょうか?^^; [ここをクリックすると内容が表示されます]
コード: Sub MainWnd_CommandButton4_Click() Dim ofn As OPENFILENAME Dim FilePath[2049] As Byte 'ファイル名を取得 ofn.lStructSize=Len(ofn) ofn.hwndOwner=hMainWnd ofn.lpstrFilter=Ex"音楽 ファイル(wav;mp3;mid;midi;wma; 他)\0*.wav;*.mp3;*.mid;*.midi;*.wma;*.avi;*.aif;*.aifc;*.aiff;*.asf;*.;*.asx;*.au;*.m1v;*.m3u;*.mp2;*.mp2v;*.mpa;*.mpe;*.mpeg;*.mpg;*.mpv2;*.snd;*.wax;*.wm;*.wmx;*.wvx;*.wpl\0\0" ofn.nFilterIndex=0 ofn.lpstrFile=FilePath ofn.nMaxFile=2049 ofn.lpstrTitle="Soundファイルを開く" ofn.Flags=OFN_ALLOWMULTISELECT or OFN_HIDEREADONLY or OFN_LONGNAMES or OFN_EXPLORER If GetOpenFileName(ofn)=0 Then Exit Sub End If 'パスの分解 Dim n As Long Dim start As Long Dim directory As String Dim name As String 'フォルダーパス start=ofn.nFileOffset directory=Mid$(MakeStr(FilePath),1,start) name=Right$(directory,1) If name<>"\" Then directory=directory+"\" End If start=start+1 'ファイル名を取得していく Do n=InStr(start,MakeStr(FilePath),Ex"\0") If n=0 Then Exit Do End If name=Mid$(MakeStr(FilePath),start,n) SetSound(directory+name) start=start+n+1 Loop End SubSetSoundは、MCIコマンドへファイルパスを送るルーチンです。 すいませんが、修正の方お願いします。 |
作成者: | イグトランス [ 2011年4月10日(日) 23:57 ] |
記事の件名: | |
こんなかんじでどうでしょうか。
[ここをクリックすると内容が表示されます]
コード: Sub MainWnd_CommandButton4_Click() Dim ofn As OPENFILENAME Dim FilePath As String FilePath = ZeroString(2049) 'ファイル名を取得 ofn.lStructSize=Len(ofn) ofn.hwndOwner=hMainWnd ofn.lpstrFilter=Ex"音楽 ファイル(wav;mp3;mid;midi;wma; 他)\0*.wav;*.mp3;*.mid;*.midi;*.wma;*.avi;*.aif;*.aifc;*.aiff;*.asf;*.;*.asx;*.au;*.m1v;*.m3u;*.mp2;*.mp2v;*.mpa;*.mpe;*.mpeg;*.mpg;*.mpv2;*.snd;*.wax;*.wm;*.wmx;*.wvx;*.wpl\0\0" ofn.nFilterIndex=0 ofn.lpstrFile=StrPtr(FilePath) ofn.nMaxFile=2049 ofn.lpstrTitle="Soundファイルを開く" ofn.Flags=OFN_ALLOWMULTISELECT or OFN_HIDEREADONLY or OFN_LONGNAMES or OFN_EXPLORER If GetOpenFileName(ofn)=0 Then Exit Sub End If 'パスの分解 Dim n As Long Dim start As Long Dim directory As String Dim name As String 'フォルダーパス start=ofn.nFileOffset directory=Mid$(FilePath,1,start-1) name=Right$(directory,1) If name<>"\" Then directory=directory+"\" End If start=start+1 'ファイル名を取得していく Do n=InStr(start,FilePath,ZeroString(1)) If n=0 Or n=start Then Exit Do End If name=Mid$(FilePath,start,n-start-1) SetSound(directory+name) start=n+1 Loop End Sub |
作成者: | 水波形 [ 2011年4月11日(月) 22:24 ] |
記事の件名: | |
>>イグトランス様 回答ありがとうございます。 コードを拝見させていただきましたが、 う~ん・・・ 分かったような分からないような・・・・ とりあえずコピペさせていただきました。 少しずつ理解していきたいと思います。 ありがとうございました。 ☆宣伝☆ 組み込ませていただいたものを公開していますので、どうぞ。 http://www.activebasic.com/forum/viewtopic.php?t=2667 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |