goo blog サービス終了のお知らせ 
goo

「button」で選択

◆一覧リスト
HSP Ver2.61
ブログ関連
その他
★人気blogランキング

「button」

◆使用例
  1. ユーザーに処理を選択してもらう場合。
    ゲームの分岐。処理を実行するか、取消するかなど。
◆機能
button "name",*label
ボタンを表示します。
ボタンが押されると*labelにジャンプします。
name
ボタンに表示される文字を指定。
*label
ラベルを指定します。
ソースコード中に*labelを追加してないとエラーになります。

◆ボタンを作成する前の準備例
  1. 「pos」命令でどの位置に配置するか指定。
    例)pos 100,100
    例は(クライアント)ウィンドウの左上から
    横に100、縦に100の位置にボタンを配置します。

    ◆機能
    pos p1,p2
    メッセージ、オブジェクト等の位置を設定します。
    p1
    オブジェクトのX方向の位置(ドット単位)
    p2
    オブジェクトのY方向の位置(ドット単位)


  2. 「objsize」命令でボタンの大きさを変更。
    例)objsize 200,20
    例は横幅200、縦幅20のボタンを作成します。

    ◆機能
    objsize p1,p2,p3
    オブジェクトの大きさを設定します。
    p1(省略時64)
    オブジェクトのX方向のサイズ(ドット単位)
    p2(省略時は24)
    オブジェクトのY方向のサイズ(ドット単位)
    p3(省略時は0)
    Y方向の最低確保行サイズ (ドット単位)


  3. ボタンに表示される文字のフォントの変更。
    例)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で表示します。

  4. 文字を表示させずに絵を表示させたい場合。
    「btnimg」命令を参照。
※ウィンドウを複数作成している場合は個別に設定が必要です。
※ボタン作成後「pos」の縦位置が自動的に変更されます。


「button」のサンプル
    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 )

ステータスバー作成

◆一覧リスト
HSP Ver2.61
ブログ関連
その他
★人気blogランキング

ステータスバーの作成

◆方法
  1. 「llmod.as」をインクルードする。
    (「dllproc」、「sendmsg」を使用する為)

  2. 「InitCommonControls」関数を使用する。
    (comdlg.dll(D_COMCTL)を使用する為の初期化)

  3. 「CreateStatusWindow」関数でステータスバーを作成する。
    パラメーター4
    prm.0=ウィンドウスタイルを指定します。
      通常のスタイルの他に以下も指定できます。
      CCS_BOTTOM (0x0003) 最下部に配置
      CCS_TOP (0x0001) 最上部に配置
      SBARS_SIZEGRIP (0x0100) サイズグリップをつける
    prm.1=ステータスバーに表示する文字列ポインタ
    prm.2=親ウィンドウのハンドル
    prm.3=ステータスバーのID

    戻り値にステータスバーのハンドルが入ります。

  4. 「GetWindowRect」関数でステータスバーの高さを取得する。
    ウィンドウのサイズが変更した時に必要なるため。
    パラメーター2
    prm.0=対象のハンドル
    prm.1=サイズが代入される変数のポインタ

  5. 区分けする場合に「SB_SETPARTS」(0x0404)メッセージを送信する。
    送信に「sendmsg」を使用。
    パラメーター4
    prm.0=ステータスバーのハンドル
    prm.1=SB_SETPARTS(0x0404)
    prm.2=区切る数
    prm.3=区切る横サイズが入った変数のポインタ

  6. 「SB_SETTEXT」(0x0401)メッセージでステータスバーに文字を表示する。
    送信に「sendmsg」を使用。
    パラメーター4
    prm.0=ステータスバーのハンドル
    prm.1=SB_SETTEXT(0x0401)
    prm.2=文字列のポインタ
    prm.3=どの区画に表示するか指定(0~)


ステータスバー作成 サンプル
1.ウィンドウサイズ変更可能
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ドット単位)

「bgscr」を使用した
スクリーンセーバーサンプル
    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」のサンプル
※5回ウィンドウを変化させます。
乱数を使用して、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」のサンプル
    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 )
« 前ページ 次ページ »