以前 私が自分用に作ったモジュールです。(コメントなし)
ご不明な点がありましたら質問してください。(自分でも忘れている部分も有りますが)
ご自由に改変&使用下さい。
p3 に初期ファイル名を入力。
// http://yokohama.cool.ne.jp/chokuto/urawaza/struct/OPENFILENAME.html ←参考
//////////////////////////////////////////////////
// GetFileDialog p1,p2,p3,p4,p5 //
// p1 == str Filter //
// p2 == str FilterInfo //
// p3 == str DefaultFileName //
// p4 == int DefaultFilterIndex //
// p5 == int (0) 開く //
// (1) 保存 //
// 戻り値 //
// stat >= 1 取得したファイル数 //
// stat == 0 取得失敗 //
// refstr 取得したファイル名 //
//////////////////////////////////////////////////
#uselib "Comdlg32.DLL"
#module
#func GetOpenFileName "GetOpenFileNameA" int
#func GetSaveFileName "GetSaveFileNameA" int
#define OFN_FILEMUSTEXIST $00001000 //複数選択用
#define OFN_ALLOWMULTISELECT $00000200 //複数選択用
#define OFN_EXPLORER $00080000 //複数選択用
#define OFN_HIDEREADONLY $00000004 //「書込み禁止」チェックボックスを無効にします。
#define BUFSIZE 1024*10
#deffunc GetFileDialog str Fil,str FilInfo,str DefaultFileName,int DFIndex,int OpenSaveFlg
sdim aplFilter , (strlen(Fil)+strlen(FilInfo))*2 //FILTERSIZE
sdim usrFilter , (strlen(Fil)+strlen(FilInfo))+4 //FILTERSIZE
sdim filename , BUFSIZE+1
filename=DefaultFileName
DefaultFilterIndex=DFIndex
Filter=""+Fil
FilterInfo=""+FilInfo
fss=0
iss=0
getstr f,Filter,fss,0 : fss+=strsize
getstr i,FilterInfo,iss,0 : iss+=strsize
usrFilter=""+i+" ("+f+")@"+f+"@@"
aplFilter=""
brflg=0
repeat
getstr f,Filter,fss,0 : fss+=strsize : if strsize=0 : brflg+
getstr i,FilterInfo,iss,0 : iss+=strsize : if strsize=0 : brflg+
if brflg>=1 : break
aplFilter+=""+i+" ("+f+")@"+f+"@"
await 0
loop
aplFilter+="@"
start = 0
repeat
mutch=instr(aplFilter,start,"@")
if mutch = -1 : break
poke aplFilter , start + mutch , $00
start += mutch + 1
await 0
loop
start = 0
repeat
mutch=instr(usrFilter,start,"@")
if mutch = -1 : break
poke usrFilter , start + mutch , $00
start += mutch + 1
await 0
loop
lpstrInitialDir=dir_cur
dim ofn,22
ofn.0 = 88 ; lStructSize
ofn.1 = hwnd ; hwndOwner
ofn.2 = hInstance ; hInstance
ofn.3 = varptr(aplFilter) ; lpstrFilter
ofn.4 = varptr(usrFilter) ; lpstrCustomFilter
ofn.5 = FILTERSIZE ; nMaxCustFilter
ofn.6 = DefaultFilterIndex ; nFilterIndex
ofn.7 = varptr(filename) ; lpstrFile
ofn.8 = BUFSIZE ; nMaxFile
ofn.9 = 0 ; lpstrFileTitle
ofn.10= 0 ; nMaxFileTitle
ofn.11= varptr(lpstrInitialDir) //0 ; lpstrInitialDir
ofn.12= 0 ; lpstrTitle
if OpenSaveFlg&1 : {
ofn.13= OFN_FILEMUSTEXIST | OFN_EXPLORER | OFN_HIDEREADONLY ; Flags
GetSaveFileName varptr(ofn)
} else {
ofn.13= OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER | OFN_HIDEREADONLY ; Flags
GetOpenFileName varptr(ofn)
}
if stat=0 : return 0
sdim getfilename,1024*10
sdim rfs,1024*10
st=0
ss=0
repeat
getstr gfn,filename,ss,0 : ss+=strsize+1 : if strsize=0 : break : else : {
if cnt>0 : getfilename+="\n"
getfilename+=gfn
}
st=cnt
await 0
loop
if st=0 : st=1 : rfs=filename : else : {
ss=0
a=""
getstr a,getfilename,ss,0 : ss+=strsize
repeat st
if cnt>0 : rfs+="\n"
getstr b,getfilename,ss,0 : ss+=strsize
rfs+=""+a+"\\"+b
loop
}
mref st_,64 : st_=st
mref rfs_,65 : rfs_=rfs
return
#global
//////////////////////////////////////////////////
// 制作開始日 2009/06/01 23:40 //
// 最終更新日 2009/06/03 16:55 //
// (C)VGM //
//////////////////////////////////////////////////
//以下サンプルプログラム
title "GetFileDialog SampleProgram"
Filter ="*.hsp" + "\n"
Filter+="*.bmp;*.gif;*.jpg;*.ico" + "\n"
Filter+="*.mid;*.mp3;*.wav;*.wma" + "\n"
Filter+="*.txt;*.doc" + "\n"
Filter+="*.*"
FilterInfo ="HSPsource" + "\n"
FilterInfo+="画像ファイル" + "\n"
FilterInfo+="音楽ファイル" + "\n"
FilterInfo+="文書ファイル" + "\n"
FilterInfo+="すべてのファイル"
DefaultFileName="mod_GetFileDialog.hsp"
DFIndex=0
OSFlg=0
font MSGothic,12
GetFileDialog Filter,FilterInfo,DefaultFileName,DFIndex,OSFlg
if stat=0 : mes "取得失敗" : stop
mes refstr
mes "取得ファイル数:"+stat
stop