[Top Page][Edit][Discussion][Edit History][All Pages][Recent Changes][->Japanese]

HSP3標準ライブラリ:statusbar.as


ステータスバー作成


statusbar.as

/*
 * statusbar.as
 *
 * ステータスバー作成モジュール
 */

#ifndef STATUSBAR_HSP_INCLUDED
#define global STATUSBAR_HSP_INCLUDED

#module Statusbar

#uselib "comctl32"
#func InitCommonControls "InitCommonControls"
#func InitCommonControlsEx "InitCommonControlsEx" int

#uselib "user32"
#func GetWindowRect "GetWindowRect" int, int

#const ICC_BAR_CLASSES 0x00000004

#const WS_VISIBLE 0x10000000
#const WS_CHILD 0x40000000

#const SB_SETPARTS 0x00000404
#const SB_SETTEXT 0x00000401
#const SB_SETICON 0x0000040F
#const SB_SIMPLE 0x00000409

#const WM_SIZE 0x00000005

/*
 * create_statusbar
 * 
 * ステータスバーを作成し、オブジェクトIDをstatに返します。
 */
#deffunc create_statusbar

    if varptr(InitCommonControlsEx) {
        iccex = 8, ICC_BAR_CLASSES
        InitCommonControlsEx varptr(iccex)
    } else {
        InitCommonControls
    }

    winobj "msctls_statusbar32", "", , WS_VISIBLE | WS_CHILD
    return

/*
 * set_statusparts id, parts
 *   id    : ステータスバーのオブジェクトID
 *   parts : パーツの右端座標の配列
 * 
 * idのステータスバーに、partsの配列要素数分のパーツを作成します。
 * partsの中の値が-1の要素は、ウィンドウの右端までがそのパーツになります。
 */
#deffunc set_statusparts int id, array parts

    sendmsg objinfo_hwnd(id), SB_SETPARTS, length(parts), varptr(parts)
    return

/*
 * set_statustext id, part, test
 *   id   : ステータスバーのオブジェクトID
 *   part : パーツのID
 *   text : 設定するテキスト
 * 
 * idのステータスバーのpartのパーツに、テキストを設定します。
 * partを255にした場合は、シンプルモードのテキストが設定されます。
 */
#deffunc set_statustext int id, int part, str text_, int type, local text

    text = text_
    sendmsg objinfo_hwnd(id), SB_SETTEXT, part | type, varptr(text)
    return

/*
 * set_statusicon id, part, hicon
 *   id    : ステータスバーのオブジェクトID
 *   part  : パーツのID
 *   hicon : 設定するアイコンのハンドル
 * 
 * idのステータスバーのpartのパーツに、アイコンを設定します。
 * アイコンのハンドルは、image.asのextract_iconなどで取得してください。
 */
#deffunc set_statusicon int id, int part, int hicon

    sendmsg objinfo_hwnd(id), SB_SETICON, part, hicon
    return

/*
 * set_statussimple id, flag
 *   id   : ステータスバーのオブジェクトID
 *   flag : シンプルモードのフラグ
 * 
 * idのステータスバーの、シンプルモードの状態を切り替えます。
 * flagが1の場合はシンプルモード、0の場合は非シンプルモードになります。
 */
#deffunc set_statussimple int id, int flag

    sendmsg objinfo_hwnd(id), SB_SIMPLE, flag, 0
    return

/*
 * get_statusheight id
 *   id   : ステータスバーのオブジェクトID
 * 
 * idのステータスバーの高さをstatに返します。
 */
#deffunc get_statusheight int id

    dim rc, 4
    GetWindowRect objinfo_hwnd(id), varptr(rc)
    return rc(3) - rc(1)

/*
 * move_statusbar id
 *   id : ステータスバーのオブジェクトID
 * 
 * idのステータスバーの座標を移動します。
 * ウィンドウのサイズが変更された時に呼び出してください。
 */
#deffunc move_statusbar int id

    sendmsg objinfo_hwnd(id), WM_SIZE, 0, 0
    return

#global

#endif

statusbar_sample.hsp

#include "statusbar.as"

    create_statusbar
    id_status = stat

    parts = 480, 560, -1
    set_statusparts id_status, parts

    set_statustext id_status, 0, "PART1"
    set_statustext id_status, 1, "PART2"
    set_statustext id_status, 2, "PART3"

    await 1000

    set_statussimple id_status, 1

    get_statusheight id_status
    set_statustext id_status, 255, "ステータスバーの高さは " + stat + " です。"

    await 1000

    set_statussimple id_status, 0