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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1024
なう画面上の全ボタンを無効にする方法5解決


なう

リンク

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



この記事に返信する


semuna

リンク

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という便利なコマンドが追加されて
いたり,少し感動しました.(^^ゞ  

ありがとうございました. 



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