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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0315
Masaメインウィンドウを非表示の状態から表示させる方法7解決


Masa

リンク

2014/3/15(Sat) 16:56:57|NO.60677

お世話になります。
サブウィンドウを作っていない状態でメインウィンドウを非表示の状態にした場合、そのメインウィンドウを再び表示させる方法について教えて頂けますでしょうか。
例えば、次のようなプログラムがあったとします。

--- ソースプログラム ---------------------------------------
screen 0,400,200,0
title "テストウィンドウ"
gsel 0, 1
onexit gosub *hihyouji
color 0,0,255 : boxf

// ここではアラームや時報の付いた時計を表示する
stop

*hihyouji
dialog "ウィンドウを非表示にしても宜しいですか?", 2, "確認"
if stat = 7 : return

gsel 0,-1
stop
------------------------------------------------------------

このプログラムでは、アラームや時報を鳴らしたい為に、プログラムそのものを終了せずウィンドウを非表示の状態にしています。
しかし、この時計で今の時刻を見たい時があって、何度も新規で実行ファイルを開くと、どんどんプロセスが増えていきます。

この時計で今の時刻を見たい時に、非表示のものを再び表示させる方法を教えて頂けますでしょうか?

宜しくお願い致します。



この記事に返信する


テンクス

リンク

2014/3/15(Sat) 19:37:54|NO.60683

時間になったら、
gsel 0,2
で表示

え?
違うの?



MIZUSHIKI

リンク

2014/3/15(Sat) 20:49:41|NO.60688

非表示のウィンドウを再び表示させる方法として、
もう一度 exeファイルを実行して再表示がしたい、ということでいいでしょうか。

過去ログに、New Monkeyさんが書いた二重起動防止のスクリプトがあります。
http://hsp.tv/play/pforum.php?mode=pastwch&num=18983


*dupexec ;初回起動ウィンドウが二重起動通知を受けたときの処理 gsel 0,1
上記のように、二重起動通知を受けたときの処理に
gselでの再表示を追加すればどんどんプロセスが増えることはなくなります。


もしくは、タスクバーに表示されたままでもいいのなら
onexit処理内で最小化してあげてもいいかもしれません。

sendmsg hwnd, $112/*WM_SYSCOMMAND*/, $F020/*SC_MINIMIZE*/

//もしくは、そういうソフトならタスクトレイかな。
//「タスクトレイ モジュール hsp」あたりで検索すれば色々とモジュールがありそうです。



Masa

リンク

2014/3/15(Sat) 21:13:15|NO.60691

テンクスさま、MIZUSHIKI さま
ご返信頂きましてありがとうございます。

>テンクスさま
アラームの時間になったらもちろん「gsel 0,2」でウィンドウを表示するつもりです。
例えば、アラームを20時に鳴らすとしたらその時点で「gsel 0,2」でウィンドウを表示するのですが、アラームの前の18時台や19時台にメインウィンドウを表示して時計を見ようとすることもあると思います。
アラームの時間がくる前の現在時刻の確認の時に、非表示にしてあるメインウィンドウををどうやって表示したら良いでしょうか? という質問でした。


>MIZUSHIKI さま

もう一度 .exe ファイルを実行した際に再表示する方法もありますね!
その方法でいきたいのですが、
具体的には http://hsp.tv/play/pforum.php?mode=pastwch&num=18983 で掲載されているスクリプトのどの部分が必要になるでしょうか?
プログラムを見てみましたが、どの行でどのような処理が行われているか分かりませんでした。
宜しくお願い致します。

それから、ウィンドウ最小化(タスクバーに残る)を取り入れるとしたら sendmsg hwnd, $112,$F020 をどの部分に書くと良いのでしょうか?
この sendmsg hwnd, $112,$F020 をウィンドウ非表示と差し替えれば良いのでしょうか?



テンクス

リンク

2014/3/15(Sat) 21:31:01|NO.60692

あ、そう言う事でしたか。
アイデアならいくつかあります。
・画面右下に小さく表示して、クリックすると詳しく表示させる
・ショートカットキーを作り、ショートカットキーにより表示
・画面右下の「通知領域?」に収納(これに関しては詳しくないです。ごめんなさい。)
頑張ってください



Masa

リンク

2014/3/15(Sat) 23:28:40|NO.60695

テンクスさま、MIZUSHIKI さま
ご返信頂きましてありがとうございます。
お二方に心より感謝しています。

>テンクスさま
ショートカットキーを作って、非表示の状態からそのショートカットキーで表示させようとしましたが、どうしても非表示のままになり、表示されませんでした。
通知領域(タスクトレイ)に格納するという方法もありますね、MIZUSHIKI さまも同様のアドバイスを下さって調べています。

>MIZUSHIKI さま
よく考えたら、ソフトウェアの中でも時間に関わるものは非表示にするよりタスクバーに置いておいて、Alt+Tab のキーですぐに表示できるようにしておいたほうがいいですね!
ウィンドウの最小化というアイデアは、MIZUSHIKI さまに助言を頂くまで、わたしは全く思いつきませんでした。
良い勉強になりました。
本当にありがとうございました。
この方向で実現した場合、次のようにするとうまくいきました。(最小化されて、タスクバーに入ったことを忘れて実行ファイルをまた実行してしまう可能性もありますが、助言下さった中の二重起動防止も参考にしながら次のように作ってみました。)
本当にプログラムを終了したい時には Ctrl+Shift+Q のキーを押すと完全にソフトが終了するようにしています。

--- ソースプログラム ---------------------------------------------------
#include "kernel32.as"
#define ERROR_ALREADY_EXISTS $B7
gsel 0,-1

; 適当なユニーク文字列を与える
CreateMutex 0, 0, "ourClock"

; エラーコード確認
GetLastError
if stat = ERROR_ALREADY_EXISTS {
dialog "既に起動されています。", 1, "お知らせ"
end
}

screen 0,400,200,0
title "テストウィンドウ"
gsel 0, 1
onexit gosub *hihyouji

*maiprog
color 0,0,255 : boxf

// ここではアラームや時報の付いた時計を表示する
onkey gosub *pushkeys
stop

*pushkeys
getkey keyCTL,17 ; Ctrlキー
getkey keySHIFT,16 ; Shiftキー
getkey keyQ,81 ; Qキー(抜けるという意味)

if keyCTL=1&keySHIFT=1&keyQ=1 {
dialog "本当に時計を終了しても宜しいですか?", 2, "終了確認"
if stat = 6 : end
}
return

*hihyouji
dialog "ウィンドウを非表示にしても宜しいですか?", 2, "非表示の確認"
if stat = 7 : return

sendmsg hwnd, $112, $F020
stop

------------------------------------------------------------------------



Masa

リンク

2014/3/16(Sun) 11:23:21|NO.60704

タスクトレイにアイコンを入れるプログラムもも『HSP サンプル蔵(システム操作編)- HSP Next』のページ(http://hspnext.com/hspkura/hspkura02.htm)を参考にしながら、作ることができました。
このページのサンプルでは[タスクトレイに格納]というボタンを押すとタスクトレイに入るようになっていましたが、この部分を、終了操作時にタスクトレイに入れる(onexit gosub *modecmd)というプログラムにして *modecmd から stop までと *trayico から return までをプログラムの末尾に持っていきました。
再びウィンドウを画面へ表示する為の *OnMotificmd から return までと *icondel から return までの部分も並べてプログラムの後ろのほうに書きました。
又、#module 〜 #global にあたる部分は module.hsp というべつのファイルにしてインクルードしました。(煩雑なプログラムになることを避ける為。)
これできちんとタスクトレイに入るようになりました。
MIZUSHIKI さま,テンクスさま、タスクトレイ(通知領域)に入れる方法を調べると良いといった助言を下さいましてありがとうございました。

お陰様で様々なことを実現することができました。
大変良い学びになりました。
お礼と感謝の気持ちでいっぱいです。
本当にありがとうございました。



Masa

リンク

2014/3/16(Sun) 11:37:25|NO.60705

追伸
ウィンドウを非表示にしている状態で新たに同じプログラムを実行ファイルから実行した場合に、二重起動しない方法は分かりましたが、この時に、非表示にしている最初の初回起動のウィンドウを自動的に表示させる方法は分かりませんでした。
今回は、最小化されている(又はタスクトレイに入っている)ものを、手動で表示しても大丈夫ですが、また必要がありましたら調べてみてそれでも分からないようでしたら質問させて頂きたいと思っています。
その際にはどうぞ宜しくお願い致します。



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