;画面の真中にウィンドウを表示する
#define win_x 640 ;ウィンドウの幅
#define win_y 480 ;ウィンドウの高さ
screen 0,win_x,win_y,0,dispx-win_x/2,dispy-win_y/2
stop
|
ここで、大切なのはdispx,dispy。この二つのシステム変数です。
これは、ディスプレイの解像度が入っています。あとは、計算をするだけ・・・
(解像度−ウィンドウサイズ)/2で、座標が決まります(ちょっと考えてみてね)。
HSPでは、四則演算の順番が関係ないので、かっこはつけていません(つけておいたほうがいいかも)。
;フルスクリーン表示
; chgdisp 1 ;ディスプレイの解像度を変える。
bgscr 2,dispx,dispy,0
stop
|
ディスプレイの解像度は使う人によって違うため、少し考えなくてはいけません。
システム変数を参照して、フルスクリーンを作成しましょう。
また、chgdispをつかって、強制的に解像度を640×480にしてしまうと
画像の大きさなどもそろえやすいでしょう。
注意として、スクリーンは2番以降のIDを使用すること。
chgdispをbgscrよりも先に行うということです。
;ウィンドウを消す
; screen 0,640,480 ;ウィンドウを作る
gsel 0,-1
wait 100
gsel 0,1
stop
|
HSPでは、0番のウィンドウは勝手にできてしまいます。ここで、じゃまになったときには
消してしまいましょう。で、必要になったら、表示すればいいのです。もちろん0番以外の
ウィンドウを作成した場合は、その番号を指定すれば同様のことができます。
;枠なしウィンドウを動かす
gsel 0,-1
bgscr 2,640,480,0,0,0
repeat
stick first_click,,1 ;クリックした瞬間
if first_click&256 {
mx=mousex : my=mousey
click=1
}
if first_click&512 : break ;右クリックで終了
getkey now_click,1 ;クリックされていれば
if now_click==1 {
ginfo 0
width ,,prmx-mx,prmy-my
} else {
wait 1
}
loop
end
|
少し長いプログラムです。クリックしたマウスの位置(mousex)は、ディスプレイ上のマウス座標と
ウィンドウの左上座標の差、つまり、距離に等しいと言うことに注目します。
クリックした瞬間に、左上とマウスの距離をmxにいれます。あとは、マウスが押されていれば、
ディスプレイ上のマウス座標を取得(ginfo 0)して、mxを用いてウィンドウの左上の座標を求めます。
;常に最前に表示
gsel 0,2
button "普通に戻す",*natural
stop
*natural
gsel 0,1
stop
|
HELPを読めば書いてあるのですが(^^;もちろん、ほかのウィンドウIDに対しても可能です。
元に戻すときは、p2を1にすれば、元に戻ります。
;ウィンドウを動かしてみる
#define WIN_W 640
#define WIN_H 480
screen 0,WIN_W,WIN_H,0,-WIN_W,-WIN_H
repeat 20,-19
width ,,cnt*32,cnt*24
loop
stop
|
widthのp3,p4が移動するための座標指定です。p1,p2は省略してもかまいません。
ここでは、最初のウィンドウの位置も決めています(画面の外ですけど(^^;)。
;ウィンドウを小さくしていく
#define WIN_W 640
#define WIN_H 480
screen 0,WIN_W,WIN_H,0
repeat 20
width WIN_W-(cnt*32),WIN_H-(cnt*24)
loop
stop
|
widthのp1,p2がウィンドウのサイズ指定です。最後のstopを消すとウィンドウが消滅
したように見えます。
;ウィンドウを並べる
bgscr 2,100,200,0
repeat
gsel 0
ginfo 3 : x=prmx ;第二ウインドウのX座標取得
ginfo 2 : y=prmy ;第二ウインドウのY座標取得
gsel 2 : width ,,x,y
wait 1
loop
stop
|
ginfo 3で、基準となるウィンドウの右下座標、ginfo 2で左上座標を取得して
第二ウィンドウの座標を決めます。