HSP3 プログラミングの基礎X | |
(3) スクリーンセーバー 2
◎ スクリーンセーバー本体
前のサンプルでは、ウィンドウとして起動して、背景は白で黒色の文字がランダムに表示された。スクリーンセーバーは基本的にディスプレイの焼き付き防止が目的であるから、黒色一色が望ましい。しかし、電源がついているのか消えているのかわからないということもあり、画面に何かを表示させる。
(ssaver03.hsp)
背景を黒色、文字色はランダムに、文字列を20個表示したら画面をクリアする。
;ssaver03.hsp #packopt name "screensaver" ;実行ファイル名 #packopt type 2 ;スクリーンセーバー randomize para = dir_cmdline ;パラメータ取得 para = strmid(para, 0, 2) if para = "/p" | para = "/P" : goto *preview ;プレビュー if para = "/s" | para = "/S" : goto *ssaver ;フルスクリーン if para = "/c" | para = "/C" : goto *config ;コンフィグ dialog "無効なオプションです。" + "[" + para + "]" end *config mes "CONFIG" stop *preview mes "PREVIEW" stop *ssaver win_x = ginfo_dispx ;ディスプレイサイズ(幅) win_y = ginfo_dispy ;ディスプレイサイズ(高さ) bgscr 1, win_x, win_y ;枠なしのウィンドウ *ssmain color 0, 0, 0 ;黒色 boxf ;画面消去(四角塗りつぶし) repeat 20 color rnd(255), rnd(255), rnd(255) ;文字色 pos rnd(win_x), rnd(win_y) mes "SCREEN SAVER" stick key ;test if key = 128 : end ;test await 500 loop goto *ssmain end
画面全体が黒色になり、「SCREEN SAVER」の文字がランダムな位置に表示される。20個表示したら全部消えて再度表示される。
プログラムは、ラベル*ssaver以降がスクリーンセーバーの本体処理である。前のサンプルとは、それ以外の部分に変更はない。
bgscr命令はscreen命令と同じように、ウィンドウを初期化する命令である。ただし、bgscr命令で初期化したウィンドウはウィンドウ枠がない。ここで使用しているパラメータginfo_dispx, ginfo_dispyはディスプレイの幅と高さの大きさを値として持つシステム変数である。表示位置の設定で pos rnd(ginfo_dispx), rnd(ginfo_dispy) としてもよいが、プレビュー画面の表示にも使えるように画面サイズまたはウィンドウサイズを変数win_x, win_yに格納して、その変数win_x, win_yを使って表示位置を設定している。このようにすることで画面サイズに依存しない処理とすることができる。
コメントに"test"と示している2行は、スクリーンセーバーとして登録しなくても、HSPスクリプトエディタで実行しても[Esc]キーで終了できるように追加した。HSPスクリプトエディタで実行するときは、起動オプションに"/s"を設定しておく。
本来、この2行の命令は不要である。
◎ プレビュー画面
プレビュー画面にも、スクリーンセーバー本体と同じように表示されるようにプログラムを作成する。
プレビュー画面のサイズはシステム変数ginfo_winx, ginfo_winyで参照することができる。調べてみると、プレビュー画面のサイズは152×112ドットである。
プレビュー画面の処理は、ラベル*preview以下に記述する。スクリーンセーバー本体と同じ処理であるが、画面のサイズが違うのでこのサイズを変数win_x,
win_yに格納してからラベル*ssmainに移動する。移動先は*ssaverではないので注意すること。
(ssaver04.hsp)
プレビュー画面にスクリーンセーバー本体と同じような表示をする。
;ssaver04.hsp #packopt name "screensaver" ;実行ファイル名 #packopt type 2 ;スクリーンセーバー randomize para = dir_cmdline ;パラメータ取得 para = strmid(para, 0, 2) if para = "/p" | para = "/P" : goto *preview ;プレビュー if para = "/s" | para = "/S" : goto *ssaver ;フルスクリーン if para = "/c" | para = "/C" : goto *config ;コンフィグ dialog "無効なオプションです。" + "[" + para + "]" end *config mes "CONFIG" stop *preview win_x = ginfo_winx ;ウィンドウサイズ(幅) win_y = ginfo_winy ;ウィンドウサイズ(高さ) font "MS ゴシック", 12 goto *ssmain stop *ssaver win_x = ginfo_dispx ;ディスプレイサイズ(幅) win_y = ginfo_dispy ;ディスプレイサイズ(高さ) bgscr 1, win_x, win_y ;枠なしのウィンドウ *ssmain color 0, 0, 0 ;黒色 boxf ;画面消去(四角塗りつぶし) repeat 20 color rnd(255), rnd(255), rnd(255) ;文字色 pos rnd(win_x), rnd(win_y) mes "SCREEN SAVER" stick key ;test if key = 128 : end ;test await 500 loop goto *ssmain end
実行ファイルを作成して、画面のプロパティ のダイアログで実行結果を確認する。プレビュー画面に「SCREEN SAVER」という文字が表示される。
文字のサイズは、font命令で少し小さくしている。実行結果を見ながら調整するとよい。
プログラムは、ラベル*preview以降がプレビュー画面の処理である。前のサンプルとは、それ以外の部分に変更はない。
2007 © Hiroshi Masuda |