HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
1109
ポテト(流星群)HSPでVBSのアレみたいな感じの入力ダイアログ5解決


ポテト(流星群)

リンク

2013/11/9(Sat) 10:02:22|NO.58035

HSPで
http://gyazo.com/7cce15128182b3dcfdbeb98b21e37535
こいつ出すことって出来ますか?



この記事に返信する


FunnyMaker

リンク

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

俺が参考になると思っていたサイトは役に立たなかったか…。



ONION software Copyright 1997-2023(c) All rights reserved.