Last Update : 2009/04/xx
HSP(HSP3)でボタンオブジェクトを設置するbutton命令に対して画像ボタン(イメージボタン)としてカスタムボタン化する命令です。HSPのバージョン3.2以降に対応した命令です。命令名の由来は「object image」から。
objimage ウィンドウID, X座標, Y座標, X座標, Y座標, X座標, Y座標
これはボタンオブジェクト上に画像(イメージ)をそのまま貼り付けるというものではなく、ボタン機能として次の3つの状態を表現するデザインをobjimage命令で指定しておくことで、実際のbutton命令に反映させる機能を持ってます。ボタンオブジェクトが表示される場所にgcopy命令を行うような処理と考えてください。
第1パラメータには画像ボタンとして利用するイメージが表示されてるウィンドウID値を指定します。自前で描画したいなら、あらかじめbuffer命令で仮想画面を用意しておき、様々な描画命令(mes命令、boxf命令、line命令、circle命令など)を利用します。PACKFILE内の画像ファイルを利用したいなら、仮想画面にイメージファイル(BMP/GIF/JPEGファイル)をpicload命令で読み込み表示しておきます。
第2パラメータ以降は、指定したウィンドウIDからイメージを切り出す基点となる左上XY座標です。ボタンの3状態を指定します。最後のマウスカーソルがボタンの上にある状態は任意です。指定がなければ通常の状態のイメージが使われます。切り出すサイズはobjsize命令のものが反映されます。
なお、objimage命令を呼んで以降の全ボタンに指定したイメージが反映されるので、解除したい場合は第1パラメータのウィンドウIDに-1を指定したものを呼びます。
自前で画像ボタンとなるデザインを描画するサンプルです。文字は普通のbutton命令で指定したものを使います(文字色は黒)。フォーカスの矩形が描画されてしまうため押された感がない・・・?
// カスタムボタンのサンプル1 (by Kpan) [HSP 3.2〜] ; 仮想画面 (実際にはbuffer命令を利用) screen 1 color $80, $80, $80 boxf 2, 2, 100, 30 color $FF boxf 0, 0, 98, 28 color $FF boxf 1, 32, 100, 60 ; メインウィンドウ screen 0 title "メインウィンドウ" objmode 2 font "MS UI Rothic", 12, 1 pos 100, 100 objsize 101, 31 objimage 1, 0, 0, 0, 31 button "画像ボタン1", *jump objimage -1 button "普通ボタン", *jump objimage 1, 0, 0, 0, 31 button "画像ボタン2", *jump *jump
次は文字列を自前で描画するサンプルです。文字色を指定したい場合はこの手段になります。
// カスタムボタンのサンプル2 (by Kpan) [HSP 3.2〜] ; 仮想画面 (実際にはbuffer命令を利用) screen 1 color $FF boxf 0, 0, 100, 30 color 0, $FF boxf 0, 30, 100, 60 color 0, 0, $FF boxf 0, 60, 100, 90 color $FF, $FF font "MS UI Gothic", 16, 1 pos 30, 8 mes "ふつー" pos 25, 38 mes "ぷっしゅ" pos 22, 68 mes "かーそる" ; メインウィンドウ screen 0 title "メインウィンドウ" objsize 100, 30 objimage 1, 0, 0, 0, 30, 0, 60 pos 100, 100 button "", *jump *jump
次はユーザーが文字色を変更できるサンプルです。gsel命令で操作先を変更して仮想画面のイメージをそのつど書き換えます。
// カスタムボタンの文字色変更 (by Kpan) [HSP 3.2〜] ; 仮想画面 (実際にはbuffer命令を利用) screen 1 font "MS UI Gothic", 16, 1 value_color = $FF, $FF, $FF gosub *draw ; メインウィンドウ screen 0 title "メインウィンドウ" objsize 100, 30 objimage 1, 0, 0, 0, 30, 0, 60 pos 100, 100 button "", *jump stop *jump ; 色選択ダイアログ dialog "", 32 value_color = ginfo(16), ginfo(17), ginfo(18) gsel 1 gosub *draw gsel 0 ; ボタンの再描画用 (変更してもすぐには反映されない場合があるため) objprm 0, "" stop ; ボタン描画処理 *draw color $FF boxf 0, 0, 100, 30 color 0, $FF boxf 0, 30, 100, 60 color 0, 0, $FF boxf 0, 60, 100, 90 ; 選択した色を文字色として反映 color value_color.0, value_color.1, value_color.2 pos 30, 8 mes "ふつー" pos 25, 38 mes "ぷっしゅ" pos 22, 68 mes "かーそる" return
HSP 3.2からサポートしたオブジェクトの無効化・有効化の切り替えを行うobjenable命令をうまく反映させるには、gsel命令で操作先を変更して仮想画面の通常のボタン状態のイメージをすげ替えます。
// カスタムボタンとojenable命令 (by Kpan) [HSP 3.2〜] ; 仮想画面 (実際にはbuffer命令を利用) screen 1 color $FF boxf 0, 0, 100, 30 color 0, $FF boxf 0, 30, 100, 60 color 0, 0, $FF boxf 0, 60, 100, 90 color $FF, $FF font "MS UI Gothic", 16, 1 pos 30, 8 mes "ふつー" pos 25, 38 mes "ぷっしゅ" pos 22, 68 mes "かーそる" ; メインウィンドウ screen 0 title "メインウィンドウ" button "objenable", *change objsize 100, 30 objimage 1, 0, 0, 0, 30, 0, 60 pos 100, 100 button "", *jump stop *jump stop *change ; 操作先を仮想画面に切り替え gsel 1 if check { color $FF boxf 0, 0, 100, 30 color $FF, $FF } else { color $77, $77, $77 boxf 0, 0, 100, 30 color $CC, $CC, $CC } pos 30, 8 mes "ふつー" ; メインウィンドウに戻す gsel 0 ; オブジェクトの有効化・無効化 objenable 1, check check ^= 1 ; 0 or 1のスイッチ
HSP3あれこれ (オブジェクト)では、オブジェクトに関連した各種命令の一覧表を載せてます。あと、HSP3 あれこれ (ボタン)では、Win32 API関数とobjimage命令をコンビで、通常のボタンのデザインを利用したまま文字色だけを変更する発展サンプルも載せてます。