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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0506
iceウィンドウを閉じたら19解決


ice

リンク

2015/5/6(Wed) 17:37:28|NO.69019

初歩的な質問で申し訳ないのですが、
screen命令でウィンドウを複数出し、if命令で「ウィンドウが閉じられたら」と条件を出したいのですがどうすれば良いのでしょうか?



この記事に返信する


prince

リンク

2015/5/6(Wed) 17:59:25|NO.69021

onexitという命令があります。



可憐

リンク

2015/5/6(Wed) 20:42:51|NO.69023

簡易ですがこれだと分かりやすいですかね?


button "終了",*owari onexit *exit stop *owari end *exit dialog "プロセスを終了してもいいですか?",3 if stat=7 : stop goto*owari



kanamaru

リンク

2015/5/6(Wed) 21:26:14|NO.69024

すでに答えている人もいますが、質問には複数のウィンドウとあります。
なので、書いてあるようなプログラムでは不十分と僕は考えます。
ginfo_actというシステム変数を用いてどのウィンドウが対象かを、
調べて処理を分けるようにする必要があります。
ginfo_actは対象のウィンドウIDが代入されています。



ice

リンク

2015/5/6(Wed) 21:51:39|NO.69026

素早い返答ありがとうございます。
onexit命令だとクローズボックスを押したとき(ウィンドウは消えてない)、ですよね?
ウィンドウ一つをクローズした上で違うウィンドウで動かしたいのですが、そういった命令又はウィンドウ一つをクローズする命令というのはあるのでしょうか?



kanamaru

リンク

2015/5/6(Wed) 21:55:11|NO.69027

ありません。
ただ、前にそれと同じことをやろうと思った時は、
gselを使ってウィンドウを1つずつ閉じれているように見せかけました。



ice

リンク

2015/5/6(Wed) 22:00:44|NO.69028

というとどういうことでしょうか?



スペース(HSP歴3年)

リンク

2015/5/6(Wed) 22:01:25|NO.69029

描画先指定、ウィンドウ最前面、非表示設定

gsel p1,p2

p1=0〜(0) : ウィンドウID
p2=0〜2(0) : ウィンドウアクティブスイッチ解説
画面制御命令の描画先を指定したウィンドウIDの画面に変更します。
これ以降は、p1で指定したウィンドウIDの画面に対して、mes命令やpicload命令などの画面描画に関する命令が実行されるようになります。

p2でオプションのスイッチが指定できます。p2の値が、

-1 : 指定したウィンドウを非表示にする
0 : 指定したウィンドウに特に影響はない
1 : 指定したウィンドウがアクティブになる
2 : 指定したウィンドウがアクティブになり、さらに常に最前面になる

のようにウィンドウの状態を変更することができます。
p2の指定を省略した場合は、特に何も影響はありません。

p2=-1で非表示にした場合は、 指定したウィンドウが消えますが完全に消去されるわけではありません。再びp2=1か2でアクティブにすると復帰します。



kanamaru

リンク

2015/5/6(Wed) 22:01:58|NO.69030

ただ、忘れないで欲しいのは、
必ず全てのウィンドウを閉じたらend命令を実行する必要があります。



科学太郎

リンク

2015/5/6(Wed) 22:07:29|NO.69031

・使いやすいオブジェクト・エディタを紹介して欲しい
http://hsp.tv/play/pforum.php?mode=all&num=68664

私の質問の「2015/4/26(Sun) 16:49:10 NO.68795」をどうぞ。
このソースの一番最後に「OnQuit」というラベルがあります。
ここに WID_EDITOR 以外は gsel で非表示にしてます。
ginfo_act が WID_EDITOR の場合だけ end 命令を実行して終了してます。
参考に。



スペース(HSP歴3年)

リンク

2015/5/6(Wed) 22:10:53|NO.69032


Screen 0,250,250:title "ID0" Screen 1,300,300:title "ID1" Screen 2,400,400:title "ID2" onexit gosub*exit stop *exit if ginfo_act=0:{ dialog "プロセスを終了してもいいですか?",3 if stat!7 : end } if ginfo_act=1:gsel 1,-1;ginfo_act:現在アクティブになっているウィンドウIDが代入されています。もし、 アクティブになっているウィンドウがHSP以外の場合は-1になります。 if ginfo_act=2:gsel 2,-1;ginfo_act:現在アクティブになっているウィンドウIDが代入されています。もし、 アクティブになっているウィンドウがHSP以外の場合は-1になります。 return

出来上がったソースコードをすぐにポンと貼るのは本人のためにならないのであまり好きではないのですが、
なんか解決できそうにないので。でも科学太郎さんと被ってしまった・・・



通りすがり

リンク

2015/5/6(Wed) 22:27:56|NO.69033

HSP Document Libraryのonexitより
>>複数のウィンドウを作成した場合は、いずれかのウィンドウにある終了ボタンで割り込みが発生します。この時、システム変数wparamに終了の通知を受けたウィンドウIDが代入されます。



ice

リンク

2015/5/6(Wed) 23:09:04|NO.69036

なるほど。非表示化を使うんですね
これで問題を解決できそうです。みなさんありがとうごさまいました。



ice

リンク

2015/5/6(Wed) 23:44:10|NO.69039

解決



kanamaru

リンク

2015/5/7(Thu) 19:27:20|NO.69051

試しに作ってみた

#define screen2 scr++:screen #define delscr(%1) scr--:gsel %1,-1 #define echeck if(scr=0){end} onexit *e screen 0 screen 1 screen 2 stop *e delscr wparam echeck
いそいで作ったのでバグがあるかもしれません。
あとでモジュール化する予定です。



kanamaru

リンク

2015/5/7(Thu) 21:42:15|NO.69053

間違えました。
上のプログラムのscreenをscreen2にしてください。



kanamaru

リンク

2015/5/8(Fri) 18:15:58|NO.69068

まだテスト実行をしていないので、
エラーが起こったり、バグがあったりするかもしれませんが、
モジュール化しました。
必要であれば、公開しますが、どうしますか?
機能としては、
ウィンドウ数管理機能(ウィンドウを一つずつ閉じれる機能。)付きのウィンドウ用命令
mkscr、mkbgscr、mkbuf、
そして、アルゴリズム上onexitを使うひつようがあったので、終了時の処理に複数のラベルを
登録できるようにしたaddexit命令があります。
今後テスト実行を繰り返し、エラーやバグを直すので、
使える段階まで時間がかかりますが、
一応、最初の話から論点ずれてないとおもうので、
返事はこのスレッドでいいと思います。
公開する必要があるか、返事を待っています。



名無し

リンク

2015/5/8(Fri) 19:42:35|NO.69070

>kanamaruさん
とりあえず公開してみては?
個人的にあると便利だと思うので。
もし公開するとしたら、新しくスレ立てしてからのほうがいいのではないでしょうか。



kanamaru

リンク

2015/5/9(Sat) 07:23:52|NO.69089

わかりました。
出来上がり次第公開します。
addexitは実装に時間がかかりそうですが、
他はエラーが無くなったので、バグを消すだけなので、
そうですね、
2〜3週間後に公開できると思います。



kanamaru

リンク

2015/5/9(Sat) 08:17:53|NO.69091

バグの削除に手間取っています。
新しいスレッドを立てて、バグの削除する方法を模索しているところです。
協力してくれる人は新しく立てたスレッドを見てください。
http://hsp.tv/play/pforum.php?mode=all&num=69090



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