すみません。(以下コピペ)
;***** フォルダ選択ダイアログ表示 (comobj20.hsp) *****
newcom ShellApp, "Shell.Application"
sdim Folder,260
objFolder=ShellApp("BrowseForFolder",hwnd,"フォルダの選択",0,dirinfo(1))
;▼キャンセルの場合
if varuse(objFolder)==0 {
dialog "キャンセルされました。",0,"フォルダの選択"
ShellApp = 0
objFolder = 0
stop
}
;▼OKの場合は、選択されたパス名を取得する
objItems=objFolder("Items") : objItem=objItems("Item")
Folder=objItem("Path")
;▼取得したフォルダ名を表示
mes Folder
;▼オブジェクト変数の解放
objFolder=0
objItems =0
objItem =0
ShellApp =0
stop
*owari
;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか判定
if vartype(objFolder)==6 {
if varuse(objFolder)==1 : objFolder = 0
}
if vartype(objItems)==6 {
if varuse(objItems)==1 : objItems = 0
}
if vartype(objItem)==6 {
if varuse(objItem)==1 : objItem = 0
}
if vartype(ShellApp)==6 {
if varuse(ShellApp)==1 : ShellApp = 0
}
end
だと上手くいきますが、
;***** フォルダ選択ダイアログ表示 (foldialog.hsp) [ API版 ] *****
#module
;▼必要となるAPIや定数の定義
#uselib "shell32.dll"
#func SHGetPathFromIDList "SHGetPathFromIDList" int,int
#func SHBrowseForFolder "SHBrowseForFolderA" int
#uselib "ole32.dll"
#func CoTaskMemFree "CoTaskMemFree" int
#uselib "user32.dll"
#func SendMessage "SendMessageA" int,int,int,int
#deffunc foldlg str prm1,str prm2,int prm3
;*******************************************************************************
; フォルダ選択ダイアログ (foldlg)
;
; 戻り値 : 成功 stat=0, refstr=選択フォルダ名,失敗, stat=1
;
; ・書式 foldlg dlgtitle,deffolder,nOption
; ・引数 dlgtitle (str) : ダイアログタイトル名 (省略可)
; deffolder (str) : 初期フォルダ名
; nOption (int) : 0,1,$400(0) スタイルオプション値
;*******************************************************************************
mref ref,65
ls=strlen(prm1)
dlgtitle = prm1
if ls==0 : dlgtitle="フォルダを選択して下さい"
sdim deffolder,260
deffolder = prm2
if strlen(deffolder)==0 : deffolder=exedir
nOption = prm3 ;(0,1,$4000)
if (nOption!0)|(nOption!1)|(nOption!$4000) : nOption=0
dim browsinfo,64 : sdim retbuf,260
browsinfo(0) = hwnd
browsinfo(3) = varptr(dlgtitle)
browsinfo(4) = nOption
;BrowseCallback
;初期フォルダ指定可能
;
if deffolder!="" {
dim brproc, 9
browsinfo(5)=varptr(brproc) : browsinfo(6)=varptr(deffolder)
p=varptr(SendMessage)
brproc = $08247C83, $90177501, $102474FF, $6668016A, $FF000004
brproc(5) = $B8102474, p, $C031D0FF, $000010C2
}
SHBrowseForFolder varptr(browsinfo) : pidl=stat
SHGetPathFromIDList pidl,varptr(retbuf) : pidl=stat
CoTaskMemFree pidl
ref=retbuf : ls=strlen(retbuf)
if ls==0 : ret=1 : else : ret=0
dim browsinfo,0 : sdim retbuf,0 : sdim deffolder,0
return ret
#global
;***** sample *****
foldlg "",dir_exe,0
if stat=1 : stop
color 0,0,255 : pos 20,10 : mes refstr
stop
だと途中で動作が止まります。
何故でしょう?
長文失礼しました。