|
|
2009/10/24(Sat) 14:11:01|NO.28526
HSPの初心者のなうです.
毎日,楽しくHSPを利用させて頂いてます.
1つアドバイスをいただければと思い,質問させていただきました.
複数の画面を表示した際に,一つの画面のボタンや入力
ボックスなどの機能を無効化したいと思ってます.クリック
しても無反応みたいな.
objsel2の-2で,各ボタンを無効化する方法だと作業に時間が
かかりそうなので,保留にしてます.
案として,画面をgcopyでコピーして画像におきかえようと
したのですが,切り替わりがみてわかるのと,ボタンなどが
画像でキャプチャーできない仕様なので,この方法はやめました.
gsel で,表示だけがアクティブになり,ボタンなど無効化
するような簡単な方法をアドバイス頂きたくお願いします.
下記例です.画面2を表示間,ボタン"他の割込み"を
クリックしても反応ない状態にできれば・・・・.
gsel 0,-2
screen 1, 300,300,4,100,100
cls 1
objsize 100,20
pos 20,20 : mes "画面1"
pos 20,50 : button gosub "画面2を表示", *aa
pos 20,80 : button gosub "他の割込み", *bb
STOP
*aa
screen 2, 300,300,4,500,100
cls 2
pos 20,20 : mes "画面2"
return
*bb
dialog "割込み"
return
|
|
2009/10/24(Sat) 14:37:47|NO.28527
gsel 0,-2
screen 1, 300,300,4,100,100
cls 1
flg = 0 ;追加
objsize 100,20
pos 20,20 : mes "画面1"
pos 20,50 : button gosub "画面2を表示", *aa
pos 20,80 : button gosub "他の割込み", *bb
STOP
*aa
screen 2, 300,300,4,500,100
cls 2
pos 20,20 : mes "画面2"
flg = 1 ;追加
return
*bb
if flg == 1 : return ;追加
dialog "割込み"
return
このように変数で分けたらどうですか?
まだ、自分も初心者なので、これが良いのか分かりませんが・・・。
|
|
2009/10/24(Sat) 15:57:03|NO.28528
やりたいことは、こんな感じなのかな・・・。
間違ってたらごめんなさい。
#const winx 320
#const winy 240
screen 0,winx,winy,,20,20
title "Screen 0"
objsize 100,20
pos 20,50 : button gosub "Screen 1の作成", *MakeScreen1
pos 20,80 : button gosub "割込チェック用", *TEST
stop
*MakeScreen1
; objenable でオブジェクトを無効化
; オブジェクトの数だけループさせて無効にする
repeat 2
objenable cnt,0
loop
screen 1,winx,winy,,winx+20,20 ; Screen 1 の作成
title "Screen 1"
return
*TEST
font "MS gothic", 12
pos 20,150 : mes "Scrren1が作成されるとこのボタンは無効化されます"
return
HSP 3.2 から objenable命令が追加されたのでそれを使っています。
HSPではオブジェクトを作った順に、各オブジェクトにオブジェクトIDが割り振られるので、
オブジェクトの数だけループさせると、全て無効にできます。
有効にするときも、この方法で大丈夫かな。
|
|
2009/10/24(Sat) 16:07:00|NO.28529
おっと、「表示だけはアクティブ〜」のところを見落としてましたorz
objimageを使ったボタンは無効化しても外観変わらないので、
それでボタンを作れば上のでも問題ないかも・・・。
もしくは、一回オブジェクトを全て削除して、
何も起きないものを同じ場所に作るとか…面倒くさそうですけれど。
そうでなければ、semunaさんの方法のほうが良さそうですね。
|
|
2009/10/24(Sat) 18:40:25|NO.28531
#include "user32.as"
gsel 0,-2
screen 1, 300,300,4,100,100
onexit gosub *exit
cls 1
objsize 100,20
pos 20,20 : mes "画面1"
pos 20,50 : button gosub "画面2を表示", *aa
pos 20,80 : button gosub "他の割込み", *bb
STOP
*aa
screen 2, 300,300,4,500,100
cls 2
pos 20,20 : mes "画面2"
gsel 1:EnableWindow hwnd, 0
gsel 2
return
*bb
dialog "割込み"
return
*exit
if wparam==2:gsel 1:EnableWindow hwnd, 1:gsel 2,-1:return
end
|
|
2009/10/31(Sat) 10:54:11|NO.28619
遅くなりすみませんが,Semunaさん,みんさん,投稿者名さん
ご回答ありがとうございました.
まだ作業まで進めてませんが,"EnableWindow hwnd"でいけそうです.
semunaさんの方法も今後ボタンなど配置するときは,作成しておくと
便利と思い,勉強なりました.あと,恥ずかしながら,v3.2がリリース
されていたことを知らず,objenableという便利なコマンドが追加されて
いたり,少し感動しました.(^^ゞ
ありがとうございました.
|
|