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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0529
ボノhgimg3のhgdrawについて19解決


ボノ

リンク

2015/5/29(Fri) 21:12:37|NO.69472

hgimg3のhgdraw命令についてですが、

hgdraw 0で、全画面の描画。
hgdraw 1で、予めhgviewで指定した座標内を描画。
hgdraw 2は意味がわかりません。描画命令に描画しないという意味があるのか、
使い道がわかりません。
hgdraw 4で、画面消去せず維持。hgdraw 5で、画面消去せずhgviewの指定範囲を描画。

hgdraw 2を除いて上記の解釈で合ってますでしょうか?

【サンプル】
hgview 802,430,257,20
hgdraw 5
gmode 2,257,20
pos 930,440
hgrotate A_TEXT,0,0
hgsync 16

hgview 822,545,105,40
hgdraw 5
gmode 0,210,80
pos 872,565
hgrotate B_PICTURE,0,0,,105,40
hgsync 16

hgview 942,545,105,40
hgdraw 5
gmode 0,210,80
pos 994,565
hgrotate C_PICTURE,0,0,,105,40
hgsync 16

私は、所々のオブジェクトをある条件下で描画させるプログラムを組んでいるのですが、
上記のプログラムを実行すると、B_PICTUREが消えてしまいます。
hgdraw~hgsync間にhgrotateを使って画像やtexmesを描画させているのですが、描画する度に
他のオブジェクトが消えてしまう現象が発生して困っています。
色々なモード(hgdraw)を使うとわかりにくいので、単純にhgdraw 5(画面消去しない/指定箇所を描画)で
描画しているのですが、なぜかオブジェクトが消えてしまったりと訳がわかりません。
画面消去をせず、描画だけなのだから消えるわけないと思うのですが、私が誤った理解をしているので
しょうか?
HSPのサンプルも1つしかなく、hgdraw 0と1しか使っておらず、背景テクスチャなども使っていないので
参考になりませんでした。
どなたかhgdrawのモードについて詳しく教えて頂けませんでしょうか。
上記のサンプルでおかしい場所や当方が間違った解釈をしている場合はご指摘頂けると助かります。
よろしくお願い致します。



この記事に返信する


暇人

リンク

2015/5/30(Sat) 01:50:37|NO.69497

hgdraw 2 は背景色や背景テクスチャでクリアだけしたいとか
直接描画用のhgview設定を摘要したい時にする
hgview設定変更したいだけならhgdraw 7 にするが・・・

>上記のプログラムを実行すると、B_PICTUREが消えてしまいます。
>他のオブジェクトが消えてしまう現象が発生して困っています。
スクリプトを半端に見せられても判断できません

不具合が出るとしたらhgviewの設定でウィンドウ範囲外を指定して命令が失敗してる
hgsyncはループ内最後のhgdraw後一回で良い
hgdraw 5じゃ無駄にオブジェクトを描画してしまう

#include "hgimg3.as" screen 0,1024,768,0 cls 4 hgini setcolor 255,255,255 addbox mdid,8,8 ; BOXモデルを作成 regobj mychr,mdid ; BOXモデルをオブジェクトとして登録 setpos HGOBJ_CAMERA, 0, 0, 20 ; カメラ位置設定 ax=0.0:ay=0.0 texload dir_exe+"\\sample\\hgimg3\\q.bmp" mest = stat texload dir_exe+"\\sample\\hgimg3\\sb_bg1.bmp" mesta = stat texload dir_exe+ "\\sample\\hgimg3\\btex.bmp" mestb = stat texload dir_exe+"\\sample\\hgimg3\\chrome.bmp" mestc = stat rot = 0.0 *main hgdraw 0 rot+0.05 hgview 802,430,1024-802,20 hgdraw 7 gmode 2,257,20 pos 930,440 hgrotate mesta,0,0,rot hgview 822,545,105,40 hgdraw 7 gmode 0,210,80 pos 872,565 hgrotate mestb,0,0,rot,105,40 hgview 942,545,1024-942,40 hgdraw 7 gmode 0,210,80 pos 994,565 hgrotate mestc,0,0,rot,105,40 hgsync 16 stick k,127 if k&128 : goto *owari ; [ESC]で終了 setang mychr, 0.0, rot,0.0 ; 箱の角度設定 goto *main *owari end



暇人

リンク

2015/5/30(Sat) 01:56:43|NO.69498

既にオブジェクトを描画してて更に
>直接描画用のhgview設定を摘要したい時にする
で、1と一緒に設定だな・・・



ボノ

リンク

2015/5/31(Sun) 12:24:06|NO.69548

暇人さん、ありがとうございます。
お蔭様でhgdraw 2の役割は理解できました。

長いので、スクリプトをコピペできないため半端なものしか提示できませんでした。
すみません。

同じ描画範囲内に別のオブジェクトを描くと、他のオブジェクトが消えてしまう現象が出ます。
hgrotate命令で、画像が異なるだけで、サイズとか座標は一緒です。画像が異なるだけで消えてしまうのでしょうか?

私だけでしょうか、なんか癖がありますね・・hsp。
XNAで昔同じものを組んだことがあるのですが、すんなりできたのに(T_T)

何を作りたいかと言うと、ゲームでよく「名前を入力してください」という画面ありますよね。
あれを再現したいのです。

おおまかなフローチャートを書くと、

①予めinput命令で入力ボックスとOK,CANCEL画像ボタン、「入力してね」メッセージをtexmesとhgrotateで描画。
②入力待機させ、[OK][CANCEL]ボタンにマウスカーソルが触れたら、同じ座標に色が反転した画像を描画。
③上記状態で左クリックされたら次の処理。
④押されなかったら現状維持。マウスカーソルが、ボタン枠内を外れたら反転してたボタン画像から
 元のボタン画像に戻す。②へループ

こんな感じです。hgsyncでinputの入力ボックスやtexmesで描画したメッセージが、反転画像を描画後、
消えてしまいます。gotoやif~elseで②~④の間はやっているのですが、画像関連の命令が思ったように
動いてくれません。また、hgdraw7にしたら、input命令のカーソルが点滅から点灯に変わり、入力された文字を表示
できなくなりました。
③のボタン枠内で左クリックされたら次の処理へ、それ以外の範囲でクリックしても無視・・は、
問題なくできています。
hgdraw,hgrotate,gmodeなどやたらややこしいような気がします。
この関係性がいまいち理解できていないのだろうか。
hgdrawは暇人さんのお陰で理解できました。hgrotateも理解できていると思います。
gmodeは、0で通常コピー。1がメモリ間コピー(これって描画はしないということでしょうか。バッファに描く?)
2で黒(0,0,0)をコピーしない。3でαブレンド(透明度設定)で合ってますかね。
それ以外は使うことないと思って覚えてません。



暇人

リンク

2015/5/31(Sun) 13:10:49|NO.69549

>同じ描画範囲内に別のオブジェクトを描くと、他のオブジェクトが消えてしまう現象が出ます。
ここでのオブジェクトとは何?
3Dオブジェクト?

>①予めinput命令で入力ボックスとOK,CANCEL画像ボタン、「入力してね」メッセージをtexmesとhgrotateで描画。
inputボックスも自前で描画?



暇人

リンク

2015/5/31(Sun) 13:42:12|NO.69551

>gmodeは、0で通常コピー。1がメモリ間コピー(これって描画はしないということでしょうか。バッファに描く?)
通常時のgcopyでの内部処理の違い(場合により処理速度に違いが出る事がある)
hgimg3では関係ない

> 2で黒(0,0,0)をコピーしない。3でαブレンド(透明度設定)で合ってますかね。
hgimg3上では透明色を指定できるので
0、1が同じで透明色もコピー
2が透明色付きコピー
3、4が同じで透明色付き半透明合成コピー

透明色はtexload前に hgsetreq SYSREQ_COLORKEY,透明色 で設定を変えられる



ボノ

リンク

2015/5/31(Sun) 14:15:02|NO.69554

>ここでのオブジェクトとは何?
>3Dオブジェクト?
hgsyncでinputの入力ボックスやtexmesで描画したメッセージが、反転画像を描画後、
消えてしまいます。

>inputボックスも自前で描画?
input命令です。

マウスカーソルの状態を監視ループでネスティングしながらinput命令は無理なんですかね。
同じループ内に記述すれば、inputの入力ボックスが点滅します(まぁ、当たり前ですが)
なので、マウスのカーソルを監視するループに入る前にinputを入れてますが、
マウスカーソルの監視ループに入ると、入力されたものが入力ボックスに
表示されなくなります。



ボノ

リンク

2015/5/31(Sun) 14:28:31|NO.69555

ちなみに、こういったinput命令で入力を受け付けながらマウスカーソルの座標を監視し、
画像ボタン内にカーソルがきたら反転色の画像ボタンを表示させるとなると、マルチスレッドに
なりますよね。HSPでは実現不可ですかね。



暇人

リンク

2015/5/31(Sun) 15:26:58|NO.69556

自分ならこんな感じの流れにするけど・・・

#include "hgimg3.as" screen 0,1024,768,0 cls 4 hgini setcolor 255,255,255 addbox mdid,8,8 ; BOXモデルを作成 regobj mychr,mdid ; BOXモデルをオブジェクトとして登録 setpos HGOBJ_CAMERA, 0, 0, 20 ; カメラ位置設定 texload dir_exe+"\\sample\\hgimg3\\q.bmp" mest = stat texmake 256,32 title ""+stat texid=stat texcls texid,0 font "MS ゴシック",22 color 255,255,255 texmes "名前を入力して下さい",texid,0,0 texmake 256,128 okid=stat texcls okid,$8844 font "MS ゴシック",80 color 128,128,128 texmes " [OK]",okid,0,0 texmake 256,128 cnid=stat texcls cnid,$4488 font "MS ゴシック",40 color 128,128,128 texmes "[CANCEL]",cnid,0,20 rot = 0.0 clscolor $4444 button gosub "名前入力",*name_st bid=stat *main hgdraw 0 //ここで画面クリアしてるので以降のhgdrawは4を含ませるが、クリアしないなら4は外す rot+0.05 if name_f=1 {gosub *name_ip} hgsync 16 stick k,127 if k&128 : goto *owari ; [ESC]で終了 setang mychr, 0.0, rot,0.0 ; 箱の角度設定 goto *main *name_st if name_f=0 { clrobj bid,bid pos 930-257/2,440+40 objmode 2 font "MS ゴシック",40 a="" input a,257,40 iid=stat name_f=1 } return *name_ip hgview 802,430,1024-802,20 hgdraw 7 gmode 2,257,20 pos 930,440 hgrotate texid,0,0 hgview 822,545,105,40 hgdraw 7 gmode 0,210,80 pos 872,565 hgrotate okid,0,0,0,105,40 if abs(872-mousex)<105/2 and abs(565-mousey)<40/2 { gmode 5,210,80,128 pos 872,565 hgrotate okid,0,0,0,105,40 if k&256 { clrobj iid,iid name=a name_f=0 title "名前:"+name } } hgview 942,545,1024-942,40 hgdraw 7 gmode 0,210,80 pos 994,565 hgrotate cnid,0,0,0,105,40 if abs(994-mousex)<105/2 and abs(565-mousey)<40/2 { gmode 5,210,80,128 pos 994,565 hgrotate cnid,0,0,0,105,40 if k&256 { clrobj iid,iid a="" name_f=0 pos 0,0 objmode 1 button gosub "名前入力",*name_st bid=stat } } return *owari end



暇人

リンク

2015/5/31(Sun) 15:31:29|NO.69557

そもそもこの場合hgviewは必要無いな・・・



ボノ

リンク

2015/5/31(Sun) 23:21:34|NO.69576

暇人さん、ありがとうございます。
サンプルプログラムとても参考になりました。
暇人さんのサンプルにならってコーディングしたのですが、

inputボックスやカーソルがものすごい勢いで点滅します。
入力しても、その上に白いボックスが表示されて何も出ません。
しかし、プロセスを終了する瞬間に一瞬だけ入力されたものが見えます。
あと、画面全体が点滅状態です。hgdraw 0 - hgsync 16で何度も描画してるからでしょうか?

でも、暇人さんのサンプルは点滅もせずinputボックスのカーソルも通常の点滅で正常ですし、
どうして同じように組んでいるのに結果がこうも違うのかわかりません。

input命令は、*mainルーチンの前に記述しています。
私は、最初から表示させたいのでフラグ立てはせずにやっています。

又、背景に画像をclstexで描画してます。予め描画しておきたいので、input命令同様に
*mainルーチンの前に、clstex => hgdraw 0 => gmode 0,1024,768 =>
hgrotate background,0,0 => hgsync 16をしていますが、これがいけないのでしょうか?

やはりgosubを使って背景描画用のサブルーチンを設けるべきなのでしょうか?
何度もすみません。当方の力量不足で自力では解決できそうにありません。

HSPのマニュアルに、hgdraw 4は画面クリアを"行わない"と書いてありますが、"行う"の
間違いですかね。4を抜いて画面クリアされないことを確認できました。
画面クリアを行わないなら4を抜いてくださいとサンプルにありましたし、自分でも
どうなるのか暇人さんのサンプルを使ってhgdrawのモードを色々変更して勉強してみました。
確かに4を抜くと画面クリアしなくなりますね。hgdraw 3でhgview内のみの描画を行えました。



暇人

リンク

2015/6/1(Mon) 00:03:44|NO.69577

やっぱり埒が明かないので問題を再現できるスクリプトが必要
根本的に何か勘違いしてる可能性がある



ボノ

リンク

2015/6/1(Mon) 14:52:14|NO.69588

暇人さん

すみません。
色々やってみた結果、フルスクリーンを有効にするとinputの入力ボックスが
点滅状態になります。

暇人さんが作成されたプログラムも

hgsetreq SYSREQ_DXMODE,1
hgsetreq SYSREQ_DXWIDTH,1280
hgsetreq SYSREQ_DXHEIGHT,720

とやってフルスクリーン化すると、私のオリジナルプログラムと同じ現象が出てしまいました。
因みに、フルスクリーンを無効にするとちゃんと動いてました。
マウスカーソルが枠内にくれば画像が反転しますし、inputの入力ボックスも問題ありません
でした。
お騒がせしてすみません。何でフルスクリーンにすると、このような現象が出るのか
わかりません。何かわかりますでしょうか?



ボノ

リンク

2015/6/1(Mon) 16:16:16|NO.69589

hgsetreq SYSREQ_DXMODE,1
hgsetreq SYSREQ_DXWIDTH,1024
hgsetreq SYSREQ_DXHEIGHT,768

の間違いです。
1280x720は当方のオリジナルの方で設定していたものでした、すみません。



暇人

リンク

2015/6/2(Tue) 00:05:40|NO.69605

あぁ、問題の大本が出てなかったな・・・

>何でフルスクリーンにすると、このような現象が出るのか
これはDirectXでは当然の事で色々やらないとボタン等は表示されない(DirectXの画面が上にかぶさってるだけだが・・・)
XNAやなんかは、その色々を省いて使い易いようにしてるらしい

手抜き自前描画のinputやってみたけど
変換候補出さなければ、使えなくはないかな・・・

#module #uselib "imm32.dll" #func ImmGetConversionStatus "ImmGetConversionStatus" sptr,var,var #cfunc ImmGetContext "ImmGetContext" sptr #func ImmGetCompositionString "ImmGetCompositionStringA" int,int,var,var #func ImmReleaseContext "ImmReleaseContext" int #const GCS_CURSORPOS $80 #const GCS_DELTASTART $100 #define GCS_COMPSTR 0x0008 #define WM_GETTEXT 0x000D #uselib "user32.dll" #func GetCaretPos "GetCaretPos" var #cfunc GetCaretBlinkTime "GetCaretBlinkTime" #func ShowWindow "ShowWindow" int,int #deffunc setinput var v,int sx,int sy,int max if Context=0 {Context=ImmGetContext(hwnd)} if sx>0 {_sx=sx}else{_sx=64} if sy>0 {_sy=sy}else{_sy=24} if max {_max=max}else{_max=_sx*2/_sy-1} _px=ginfo_cx _py=ginfo_cy pos ginfo_dispx,_py input v,_sx, _sy, _max id=stat h = objinfo(id,2) return #deffunc inputdraw dim CaretPos,2 GetCaretPos CaretPos sdim buf,_max+128 sendmsg h, WM_GETTEXT, _max+128, varptr(buf) gradf _px,_py,_sx+4,_sy+1,1,$777777,$dddddd pos _px+4,_py mes buf pos _px+4+ginfo_mesx,_py dwBufLen=0 ImmGetCompositionString Context,GCS_COMPSTR,lpBuf,dwBufLen if stat>0{ dwBufLen=stat+1 sdim lpBuf,dwBufLen ImmGetCompositionString Context,GCS_COMPSTR,lpBuf,dwBufLen ImmGetCompositionString Context,GCS_CURSORPOS,tmp,tmp index=stat if index>0 { pos ginfo_dispx,0 mes strmid(lpBuf,0,index) addx=ginfo_mesx }else{ addx=0 } pos ginfo_dispx,0 mes lpBuf saddx=ginfo_mesx gradf _px+4+CaretPos-2,_py,saddx,_sy,1,$777777,$dddddd gradf _px+4+CaretPos-2,_py-1+_sy+CaretPos(1),saddx,1,0,0,0 pos _px+4+CaretPos-2,_py+CaretPos(1)-1 mes lpBuf } if gettime(7)>500{gradf _px+4+CaretPos-2+addx,_py-1+CaretPos(1),1+(dwBufLen>0),_sy,1,0,0} addx=0 return #deffunc ime_end onexit if Context=0 {ImmReleaseContext Context} return #global ipx=100 ipy=0 isx=200 isy=40 pos ipx,ipy objmode 2 font "MS ゴシック",isy a="" setinput a,isx,isy //input配置設定 repeat redraw 0 color 255,255,255 boxf color 255 inputdraw //input描画 await 16 redraw title ""+a loop
時間が出来たらhgimg3用にしてみる



暇人

リンク

2015/6/4(Thu) 00:14:41|NO.69655

あ、他の方法として
なんちゃってフルスクリーンって方法もある

#include "hgimg3.as" bgscr 0,1280,720,0,0,0 chgdisp 1, 1280,720 //解像度変更 cls 4 wait 10 hgini setcolor 255,255,255 addbox mdid,8,8 ; BOXモデルを作成 regobj mychr,mdid ; BOXモデルをオブジェクトとして登録 setpos HGOBJ_CAMERA, 0, 0, 20 ; カメラ位置設定 texload dir_exe+"\\sample\\hgimg3\\q.bmp" mest = stat texmake 256,32 title ""+stat texid=stat texcls texid,0 font "MS ゴシック",22 color 255,255,255 texmes "名前を入力して下さい",texid,0,0 texmake 256,128 okid=stat texcls okid,$ff008844 font "MS ゴシック",80 color 128,128,128 texmes " [OK]",okid,0,0 texmake 256,128 cnid=stat texcls cnid,$ff004488 font "MS ゴシック",40 color 128,128,128 texmes "[CANCEL]",cnid,0,20 texmake 200,40,1 nmid=stat texcls nmid,$ff888888 font "MS ゴシック",40 rot = 0.0 clscolor $4444 clrobj bid,bid pos 930-257/2,440+40 objmode 2 font "MS ゴシック",40 a="" input a,257,40 iid=stat name_f=1 *main hgdraw 0 rot+0.05 if name_f=1 {gosub *name_ip} gmode 4,200,40,128 pos 1280/2,720/2 hgrotate nmid,0,0 hgsync 16 stick k,127 if k&128 : goto *owari ; [ESC]で終了 setang mychr, 0.0, rot,0.0 ; 箱の角度設定 goto *main *name_ip gmode 2,257,20 pos 930,440 hgrotate texid,0,0 gmode 0,210,80 pos 872,565 hgrotate okid,0,0,0,105,40 if abs(872-mousex)<105/2 and abs(565-mousey)<40/2 { gmode 5,210,80,128 pos 872,565 hgrotate okid,0,0,0,105,40 if k&256 { name=a name_f=0 clrobj iid,iid color 0,0,255 texmes name,nmid,0,0 } } gmode 0,210,80 pos 994,565 hgrotate cnid,0,0,0,105,40 if abs(994-mousex)<105/2 and abs(565-mousey)<40/2 { gmode 5,210,80,128 pos 994,565 hgrotate cnid,0,0,0,105,40 if k&256 { a="" objprm iid,a } } return *owari end



ボノ

リンク

2015/6/12(Fri) 23:14:07|NO.69747

暇人さん、ありがとうございます。
返信遅れてすみません。

サンプルとても参考になりました^^
ありがとうございます。
chgdispとbgscrでinputボックスの文字が表示できるのですね。
一つ勉強になりました。

すみません、では

hgsetreq SYSREQ_DXMODE,1
hgsetreq SYSREQ_DXWIDTH,1280
hgsetreq SYSREQ_DXHEIGHT,720

とやってたのと何が違うのでしょうか?
DirectXは、inputやbuttonをそのままでは使えないということを教えて頂きましたが、
bgscr/chgdispとhgsetreqとの違いを把握しておきたいのでご教授頂けませんでしょうか。

何度もすみません。



暇人

リンク

2015/6/13(Sat) 02:12:01|NO.69749

まずスフルクリーンのIMEについて自分的に分かり易い説明↓(HSPとは関係ないサイトなので先頭のh抜き)
ttp://nyaruru.hatenablog.com/entry/20070304/p2

>bgscr/chgdispとhgsetreqとの違いを把握しておきたいのでご教授頂けませんでしょうか。
bgscr/chgdispは解像度を変更して、ウィンドウでデスクトップを、隠してるだけで
解像度変更は関係なく、単にタイトルバーの無い大きいウィンドウで、画面を埋めてるのと同じです。
なので、ALT+TABを押しても他のウィンドウが、アクティブになってもhgimg3は、普通に動きます。

hgsetreq SYSREQ_DXMODE,1はデスクトップ画面がDirectXウィンドウに置き換わるような感じで
常にDirectXが全画面塗り替えます。DirectXが塗り替える間に描画された物が一瞬見える感じになる

>返信遅れてすみません。
いえいえ
今Hgimg3用のinput+IME操作描画モジュール作ってるんだけど
既に
文字入力用モジュール
http://wiki.hsp.moe/Module/文字入力モジュール.html
ってーのが作られてた・・・
自分のは描画も含めてモジュール化してるが・・・



ボノ

リンク

2015/6/25(Thu) 21:19:09|NO.69861

暇人さん

丁寧な解説、ありがとうございました。
とてもわかりやすく説明して頂き助かりました^^



暇人

リンク

2015/9/7(Mon) 19:46:59|NO.71448

一応モジュールが出来たので・・・

hgimg3の直接描画を使った input,button,chkbox,listbox,combox を設置するモジュール
http://hsp.tv/play/pforum.php?mode=all&num=71423

サンプル

#include "hgimg3.as" #include "mod_hgallwinobj.hsp" //必ずhgimg3.asの後にinclude screen 0,120,40,0,ginfo_dispx/3,ginfo_dispy/3 objsize 120,20 button "ウィンドウモード",*_window button "フルスクリーンモード",*_fullscreen stop *_window screen 0,1280,720,0,100,100 goto *@f *_fullscreen bgscr 0,1280,720,0,0,0 hgsetreq SYSREQ_DXMODE,1 hgsetreq SYSREQ_DXWIDTH,1280 hgsetreq SYSREQ_DXHEIGHT,720 *@ hgini setcolor 255,255,255 addbox mdid,12,12 ; BOXモデルを作成 regobj mychr,mdid ; BOXモデルをオブジェクトとして登録 setpos HGOBJ_CAMERA, 0, 0, 20 ; カメラ位置設定 texload dir_exe+"\\sample\\hgimg3\\q.bmp" mest = stat texmake 256,32 texid=stat texcls texid,0 font "MS ゴシック",22,16+2 color 128,128,128 texmes "名前を入力して下さい ",texid,8,8 texmake 256,32 name_texid=stat texcls name_texid,$88888888 font "MS ゴシック",28,16 color 0,255,255 texmes "name:",name_texid,2,2 hgSetImeStatus IMESTATUS_VISIBLE,1 //IME入力モード表示 font "MS 明朝",30,16 pos 50,200 name_str="" hginput name_str,250,40,,,4 //フレーム4ドット iid=stat objenable iid,0 //フォーカスを外すために一旦無効化して objenable iid,1 //有効に戻す hgSetInput iid,HGINPUT_RGB_GMODE,$ffffff //hginputの文字色を変更 hgSetInput iid,HGINPUT_BG_RGB_GMODE,$885500,3,100 //hginputの背景色を変更し半透明指定 hgSetInput iid,HGINPUT_MODE,,,3+4 //通常カーソル非表示にして直接描画カーソル表示+hginput外をクリックするとフォーカスが外れる hgSetIme IMECOLOR_INPUTBG, $885500,0,0 //IMEの背景を不透明にして色指定(文字色はhginputのが利用される) name_f=1 font "MS ゴシック",30,0 objsize 120,40 pos 50,300 hgbutton gosub "[CANCEL]",*_cancel,2+32,$ffffffff,$ff44dddd,50 //点線枠非表示+押してる間以外フォーカスを合わせない //50フレーム使ってフェードイン pos 180,300 hgbutton gosub "[OK]",*_ok,2+32,$ffffffff,$ff44dddd,50 rot = 0.0 clscolor $4444 *main hgdraw rot+0.05 hgAllWinObjDraw //hgAllWinObjを描画 imebuf=refstr //ime入力中文字列 actid=stat //フォーカスが合ってるhgAllWinObjID if name_f { if actid ! iid and name_str="" { //hgbuttonにフォーカスが合ってないなら"名前を入力して下さい"のテクスチャを表示 pos 50+256/2,200+32/2 gmode 3,256,32,255 hgrotate texid } } pos 10+256/2,10+32/2 gmode 2,256,32,255 hgrotate name_texid hgsync 16 stick k,127 if k&128 : goto *owari ; [ESC]で終了 setang mychr, 0.0, rot,0.0 ; 箱の角度設定 goto *main *_cancel name_str="" objprm iid,"" return *_ok if name_str="" {return} font "MS ゴシック",28,16 color 0,255,255 texmes "name:"+name_str,name_texid,2,2 clrobj name_f=0 return *owari end



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