全然更新しないブログ
HSPメモ帳
「button」で選択
「button」
◆使用例
- ユーザーに処理を選択してもらう場合。
ゲームの分岐。処理を実行するか、取消するかなど。
- ◆機能
- name
- ボタンに表示される文字を指定。
- *label
- ラベルを指定します。
ソースコード中に*labelを追加してないとエラーになります。
button "name",*label
ボタンを表示します。
ボタンが押されると*labelにジャンプします。
◆ボタンを作成する前の準備例
- 「pos」命令でどの位置に配置するか指定。
例)pos 100,100
例は(クライアント)ウィンドウの左上から
横に100、縦に100の位置にボタンを配置します。
◆機能- pos p1,p2
- p1
- オブジェクトのX方向の位置(ドット単位)
- p2
- オブジェクトのY方向の位置(ドット単位)
メッセージ、オブジェクト等の位置を設定します。
- 「objsize」命令でボタンの大きさを変更。
例)objsize 200,20
例は横幅200、縦幅20のボタンを作成します。
◆機能- objsize p1,p2,p3
- p1(省略時64)
- オブジェクトのX方向のサイズ(ドット単位)
- p2(省略時は24)
- オブジェクトのY方向のサイズ(ドット単位)
- p3(省略時は0)
- Y方向の最低確保行サイズ (ドット単位)
オブジェクトの大きさを設定します。
- ボタンに表示される文字のフォントの変更。
例)objmode 2 : font "MS ゴシック",12
例は「objmode 2」は「font」命令でオブジェクト(ボタン等)の文字を
変更できる事を意味します。
◆機能- objmode p1,p2
- p1は以下の数値を指定。
- 0 : HSP標準フォントを使用
1 : デフォルトGUIフォントを使用
2 : font命令で選択されているフォントを使用
+16 : オブジェクトの周囲に黒い枠線を適用する
+32 : 入力ボックスの立体的な境界線を使用しない
+64 : フォーカス移動時のテキスト選択を無効にする
( +が付いた項目は同時に指定することが可能です ) - p2を1にした場合(省略時は0)
- TABキーで各オブジェクト間を移動できるようになります。
オブジェクトのスタイルを設定します。
次に、「font」命令でフォントを指定します。
◆機能- font "fontname",p1,p2
- fontname
- フォント名を指定。
- p1
- フォントの大きさを指定します。
- p2(省略時0)
- 以下の数値を指定します。
スタイル 1 太文字
スタイル 2 イタリック体
スタイル 4 下線
スタイル 8 打ち消し線
スタイル16 アンチエイリアス
文字のフォントを指定します。。
例は「MS ゴシック」サイズ12で表示します。
- 文字を表示させずに絵を表示させたい場合。
「btnimg」命令を参照。
※ボタン作成後「pos」の縦位置が自動的に変更されます。
screen 0,300,300 title "色変更" //0,0にボタン配置 pos 0,0 //ボタンのサイズを横300、縦50に指定 //一度指定すれば変更しない限り //このサイズが適用されます objsize 300,50 //ボタンの作成 //押されると、*colorchangeにジャンプします button "色変更",*colorchange randomize stop //ボタンのラベル *colorchange int r:int g:int b rnd r,256 rnd g,256 rnd b,256 color r,g,b boxf 0,50,300,300 pos 21,81:color 64,64,64 mes "RGB("+r+","+g+","+b+")" pos 20,80:color 255,255,255 mes "RGB("+r+","+g+","+b+")" str r,18:str g,18:str b,18 pos 21,101:color 64,64,64 mes "COLOR=#"+r+g+b pos 20,100:color 255,255,255 mes "COLOR=#"+r+g+b stop |
コメント ( 2 ) | Trackback ( 0 )
ステータスバー作成
ステータスバーの作成
◆方法
- 「llmod.as」をインクルードする。
(「dllproc」、「sendmsg」を使用する為)
- 「InitCommonControls」関数を使用する。
(comdlg.dll(D_COMCTL)を使用する為の初期化)
- 「CreateStatusWindow」関数でステータスバーを作成する。
パラメーター4
prm.0=ウィンドウスタイルを指定します。
通常のスタイルの他に以下も指定できます。
CCS_BOTTOM (0x0003) 最下部に配置
CCS_TOP (0x0001) 最上部に配置
SBARS_SIZEGRIP (0x0100) サイズグリップをつける
prm.1=ステータスバーに表示する文字列ポインタ
prm.2=親ウィンドウのハンドル
prm.3=ステータスバーのID
戻り値にステータスバーのハンドルが入ります。
- 「GetWindowRect」関数でステータスバーの高さを取得する。
ウィンドウのサイズが変更した時に必要なるため。
パラメーター2
prm.0=対象のハンドル
prm.1=サイズが代入される変数のポインタ
- 区分けする場合に「SB_SETPARTS」(0x0404)メッセージを送信する。
送信に「sendmsg」を使用。
パラメーター4
prm.0=ステータスバーのハンドル
prm.1=SB_SETPARTS(0x0404)
prm.2=区切る数
prm.3=区切る横サイズが入った変数のポインタ
- 「SB_SETTEXT」(0x0401)メッセージでステータスバーに文字を表示する。
送信に「sendmsg」を使用。
パラメーター4
prm.0=ステータスバーのハンドル
prm.1=SB_SETTEXT(0x0401)
prm.2=文字列のポインタ
prm.3=どの区画に表示するか指定(0~)
2.ステータスバーに時刻、「mexbox」の情報を表示 ※重要項目を青色にしています。 |
![]() |
#include "llmod.as" screen 0,dispx,dispy width 300,300 title "ステータスバー サンプル" mref bmscr,67 //ウィンドウサイズ変更 prm = bmscr.13 , -16 dllproc "GetWindowLongA", prm, 2, D_USER prm = bmscr.13 , -16 , dllret | 0x40000 | 0x10000 dllproc "SetWindowLongA", prm, 3, D_USER //D_COMCTLを使用する為の初期化 prm=0 dllproc "InitCommonControls",prm,0,D_COMCTL //ステータスバーの作成 prm = 0x50000103, 0, bmscr.13, 0 dllproc "CreateStatusWindow",prm,4,D_COMCTL hStatus=dllret wx=winx : wy=winy //ステータスバーの高さを取得 dim size,4 dim sbsize prm.0=hStatus getptr prm.1,size dllproc "GetWindowRect", prm, 2, D_USER sbsize = size.3-size.1 //ステータスバーの区切りを設定 dim parts,2 parts= 80,-1 prm.0=hStatus , 0x0404 , 2 getptr prm.3,parts sendmsg prm //「mesbox」の作成 sdim mb,65536 notesel mb repeat 20,1 noteadd ""+cnt+":test",-1 loop pos 0 , 0 mesbox mb,winx,winy-sbsize,1 _hspobjhandle stat : hmesbox = stat //時刻用変数 dim time,3 //テキストの位置用変数 dim txt,4 //ステータスバーに送る文字変数 sdim str1,1024 //メインループ *main //ウィンドウサイズが変化した時 if (wx!=winx) | (wy!=winy){ //mesboxのサイズ変更 prm = hmesbox, 0, 0, winx , winy-sbsize , 1 dllproc "MoveWindow", prm , 6 , D_USER //ステータスバーのサイズ変更 prm = hstatus, 0, winy-sbsize , winx , sbsize , 1 dllproc "MoveWindow", prm , 6,D_USER wx=winx : wy=winy } //時間をステータスバーに表示 gettime time.0 , 4 gettime time.1 , 5 gettime time.2 , 6 str1="時刻 " if time.0<10 : str1+="0"+time.0+":" : else : str1+=""+time.0+":" if time.1<10 : str1+="0"+time.1+":" : else : str1+=""+time.1+":" if time.2<10 : str1+="0"+time.2: else : str1+=""+time.2 prm = hstatus , 0x0401 , 0 getptr prm.3 , str1 sendmsg prm //テキストの文字数と行をステータスバーに表示 // 現在の行の取得 EM_LINEFROMCHAR(0x00C9) prm=hmesbox,0x00C9,-1,0 sendmsg prm : txt.0 = dllret+1 // 最大行の取得 EM_GETLINECOUNT(0x00BA) prm=hmesbox,0x00BA,0,0 sendmsg prm : txt.1 = dllret // 現在のバイト数を取得 EM_GETSEL(0x00B0) prm=hmesbox,0x00B0,0,0 sendmsg prm : txt.2 = (dllret >>16) & 0xFFFF // 現在の総バイト数を取得 strlen txt.3,mb // ステータスバーに文字列を表示 str1=""+txt.2+" / "+txt.3+" byte 行数 "+txt.0+" / "+txt.1 prm = hstatus , 0x0401 , 1 getptr prm.3 , str1 sendmsg prm wait 10 goto *main |
コメント ( 0 ) | Trackback ( 0 )
「bgscr」でスクリーンセーバー作成
◆一覧リスト:HSP Ver2.61・ブログ関連・その他 ・・・ 人気blogランキング |
「bgscr」
最前面に表示される真っ白(?)なウィンドウを作成します。
スクリーンセーバーや自作ウィンドウを作成する時などに
使えそうです。
他に「screen」、「buffer」があります。
◆機能
bgscr p1,p2,p3,p4,p5,p6,p7,p8
p1=0~31(0) : ウインドゥID
※ID:1は使用しない事。
p2,p3 : 初期化する画面サイズX,Y(1ドット単位)
p4=0~1 : 初期化する画面モード
p5,p6(0,0) : ウインドゥの配置X,Y(1ドット単位)
p7,p8 : ウインドゥのサイズX,Y(1ドット単位)
スクリーンセーバーサンプル | |
gsel 0,-1 bgscr 2,dispx,dispy width ,,0,0 randomize dim maru,10,9 repeat 10 rnd maru.cnt.0,dispx rnd maru.cnt.1,dispy rnd tmp,2 if tmp=0 : maru.cnt.2=1 : else : maru.cnt.2=-1 rnd tmp,2 if tmp=0 : maru.cnt.3=1 : else : maru.cnt.3=-1 rnd maru.cnt.4,255 maru.cnt.5=1 rnd maru.cnt.6,255 rnd maru.cnt.7,255 rnd maru.cnt.8,255 loop *main //違うウィンドウがアクティブになった時 //キーが押されたら終了させる stick st ginfo 1 if (prmx=-1) | (st!=0): end gosub *draw await 3 goto *main *draw redraw 0 color : boxf color 255,255,255 repeat 10 maru.cnt.0+=maru.cnt.2 maru.cnt.1+=maru.cnt.3 maru.cnt.4+=maru.cnt.5 if maru.cnt.0<0:maru.cnt.2=1 if maru.cnt.0>(dispx-maru.cnt.4):maru.cnt.2=-1 if maru.cnt.1<0:maru.cnt.3=1 if maru.cnt.1>(dispy-maru.cnt.4):maru.cnt.3=-1 if maru.cnt.4>160:maru.cnt.5=-1 if maru.cnt.4<8:maru.cnt.5=1 font "MS ゴシック",maru.cnt.4 color maru.cnt.6,maru.cnt.7,maru.cnt.8 pos maru.cnt.0,maru.cnt.1 mes "●" loop color 255,255,255 pos 20,20:font "",12 mes "何かを押すと終了します" redraw 1 return |
コメント ( 0 ) | Trackback ( 0 )
「width」でウィンドウ操作
◆一覧リスト:HSP Ver2.61・ブログ関連・その他 ・・・ 人気blogランキング |
「width」
ウィンドウの位置や大きさを変更します。
ウィンドウ内のオブジェクトの位置、大きさは
そのままです。
◆機能
width p1,p2,p3,p4
p1,p2 : クライアントエリアのサイズX,Y(1ドット単位)
※「screen」命令などのp2,p3の範囲内でない場合、
表示がおかしくなります。
p3,p4 : ディスプレイ上でのウインドゥX,Y座標(1ドット単位)
※パラメーターを省略した場合は現在の値が使われます。
乱数を使用して、widthでサイズ、移動をしています。 |
screen 0,dispx,dispy title "サイズ変更" objmode 2 font "MS ゴシック",12 width 300,300 objsize 100,20:pos 10,10 button "サイズ変更",*rnd_width dim wnd,4 randomize stop *rnd_width repeat 5 , 1 color 255,255,255:boxf color pos 10,40 mes "最大サイズ 横:"+dispx+" 縦:"+dispy pos 10,60 mes "現在のサイズ 横:"+winx+" 縦:"+winy rnd wnd.0,dispx/2 rnd wnd.1,dispy/2 rnd wnd.2,dispx-wnd.0 rnd wnd.3,dispy-wnd.1 width wnd.0,wnd.1,wnd.2,wnd.3 title "変更中 "+cnt+" / 5" wait 100 loop width 300 title "サイズ変更終了" stop |
コメント ( 0 ) | Trackback ( 0 )
「screen」で初期化
◆一覧リスト:HSP Ver2.61・ブログ関連・その他 ・・・ 人気blogランキング |
「screen」
通常のウィンドウを作成する命令です。
命令が実行されると以前作成されたオブジェクト等
初期化され消えます。
他に「buffer」、「bgscr」があります。
◆機能
screen p1,p2,p3,p4,p5,p6,p7,p8
p1=0~31(0) : ウインドゥID
※ID:1は使用しない事。
p2,p3 : 初期化する画面サイズX,Y(1ドット単位)
※ウィンドウの最大サイズを指定します。
※width参照
p4=0~31 : 初期化する画面モード
1 = パレットモード(1670万色中256色)で作成する
2 = 非表示のウインドゥを作成する
4 = サイズ固定ウインドゥ
8 = ツールウインドゥ(タスクバーに表示されないウィンドウ)
16 = 深い縁のあるウインドゥ
p5,p6 : ウインドゥの配置X,Y(1ドット単位)
p7,p8 : クライアントエリアのサイズX,Y(1ドット単位)
※パラメーターが8個もありますがp2以降は省略できます。
screen 0,200,200 title "screen 0" color mes "screen 0" //screen 1は使用しない事 screen 2,200,200,16 title "screen 2" color:boxf color 255,255,255 mes "screen 2" mes "深い縁" screen 3,200,200,8 title "screen 3" color 0,0,255:boxf color 255,255,0 mes "screen 3" mes "ツールウィンドウ" mes "タスクバー未表示" stop |
コメント ( 0 ) | Trackback ( 0 )
« 前ページ | 次ページ » |