|
|
2013/11/9(Sat) 10:02:22|NO.58035
|
|
2013/11/9(Sat) 11:37:34|NO.58036
擬似的にそのようなダイアログを出すモジュールを作ってみましたが、どうでしょうか?
まともに出す方法は、すみませんが、分かりません。
MessageBox関数には用意されていないようですし...。何か別のAPIでもあるんですかね...。
正規の方法は他の方が教えてくれるかもしれません。
#module M_DLG1
#uselib "User32.dll"
#func EnableWindow "EnableWindow" int,int
#deffunc MDlg_GetMes int WID ,str char_title ,str char_call ,array list_hwnd ,array results
;[書式]
; MDlg_GetMes P1,文字列1,文字列2,Array1,Array2
;
; P1 : ダイアログとして使用したいウィンドウのウィンドウID
; 文字列1 : ダイアログウィンドウのタイトルバー文字列
; 文字列2 : ユーザーに投げかけるメッセージ
; Array1 : マウス入力とキーボード入力を無効化する対象のウィンドウのハンドルのリスト。1次元整数型配列変数。
; Array2 : 結果を保存する文字列型配列変数。
; 要素(0) : ("OK","Cancel") = (OKが押された,キャンセルが押された)
; 要素(1) : ユーザーが入力したメッセージ
repeat length(list_hwnd) : EnableWindow list_hwnd(cnt),0 : loop ;ウィンドウの無効化
WID_sel = ginfo_sel ;現在の操作先ウィンドウのIDを記録
;< ウィンドウ作成 >
screen WID,400,150,2+8+16
title char_title
syscolor 5 : boxf
sysfont 17 : syscolor 8 : pos 10,10 : mes char_call
objmode 1,1
buf_input = "" : pos 10,122 : input buf_input,380,18,0
objsize 80,25
pos 310,30 : button gosub "OK",*push_OK
pos 310,60 : button gosub "キャンセル",*push_Cancel
gsel WID,2
;< 待機 >
onexit gosub *push_Cancel ;ウィンドウの「閉じる」ボタン対策
status = 0
repeat
if status = 1 : results(0) = "OK" : break
if status = 2 : results(0) = "Cancel" : break
await 100
loop
;< 帰る処理 >
gsel WID,-1
results(1) = buf_input
repeat length(list_hwnd) : EnableWindow list_hwnd(cnt),1 : loop ;ウィンドウの有効化
gsel WID_sel,0 ;操作先ウィンドウを元に戻す
onexit 0 ;onexit 無効化
return
*push_OK
status = 1
return
*push_Cancel
status = 2
return
#global
*Lab1
screen 0,600,400,0 : title "ウィンドウ1"
font msgothic,80,16 : mes "ウィンドウ1"
hwnds(0) = hwnd
screen 1,600,400,0 : title "ウィンドウ2"
font msgothic,80,16 : mes "ウィンドウ2"
hwnds(1) = hwnd
wait 50
MDlg_GetMes 2,"タイトルバー文字列","メッセージを入力してください。",hwnds,reply
if reply(0) = "OK" : mes "メッセージ↓\n" + reply(1)
; !!! 注意 !!!
; 命令実行後は onexit のジャンプ先が変更され、かつ割り込みが無効化されています。
; 実行後に適宜対処してください。
| |
|
2013/11/9(Sat) 12:48:44|NO.58040
>FunnyMakerさん
モジュールまで作ってくださって有難うございます。
矢張りHSPからというのは厳しいのですかね…
WinAPIでの検索でも引っ掛からないから、VBS側で作ってるのですかね?
何はともあれFunnyMakerさんのモジュールで殆ど同じような物が出来るので、
これで解決とさせていただきます。
VBSの入力ボックスについて知っている方がいらっしゃいましたら良ければ
書き込みお願いします。
|
|
2013/11/9(Sat) 19:55:10|NO.58055
VBS使って表示
#module "mod_VBS_InputBox"
//変数 = InputBox(prompt_str, title_str, default_str, xpos, xpos, helpfile_str , context)
//パラメータは http://msdn.microsoft.com/ja-jp/library/cc410238.aspx を参照
//戻り値がint型の0ならキャンセルされた、文字列型変数ならOKされた
#define global ctype InputBox(%1="",%2="",%3="",%4=$80000000,%5=$80000000,%6="",%7=0) _InputBox(%1,%2,str(%3),%4,%5,%6,%7)
#defcfunc _InputBox str prompt_str,str title_str,str default_str,int xpos,int ypos,str helpfile_str ,int context,local f
if vartype(objVBsc)=4 {
newcom objVBsc, "ScriptControl"
objVBsc("Language")="VBScript"
//毎回"AddCode"すれば良いんだろうけど、一度にパラメータ省略に合わせたFunctionを登録
vbs = {"
Function inBox0(m,t,d,x,y,h,c)
inBox0 = InputBox(m,t,d,x,y,h,c)
End Function
Function inBox3(m,t,d,x,y,h,c)
inBox3 = InputBox(m,t,d)
End Function
Function inBox2(m,t,d,x,y,h,c)
inBox2 = InputBox(m,t,d,x,y)
End Function
Function inBox1(m,t,d,x,y,h,c)
inBox1 = InputBox(m,t,d,,,h,c)
End Function
"}
objVBsc->"AddCode" vbs
}
if helpfile_str="" {f | 2}
if xpos=$80000000 or ypos=$80000000 {f | 1}//X,Yどちらか省略されたら両方省略として処理
comres res
objVBsc->"Run" "inBox"+f ,prompt_str, title_str, default_str, xpos, ypos, helpfile_str, context
return res
#deffunc InputBox_end onexit
delcom objVBsc
return
#global
i = InputBox("InputBoxテスト","VBS InputBox","default")
if vartype(i)=2 {mes i}else{mes "キャンセルされた"}
| |
|
2013/11/9(Sat) 21:31:26|NO.58057
>>暇人さん
有難うございます。VBSを使うっての出来るんですね・・・
MSDNのを見つつゆっくり読んでいってみます。
|
|
2013/11/10(Sun) 10:29:17|NO.58068
俺が参考になると思っていたサイトは役に立たなかったか…。
|
|