Last Update : 2009/07/xx
HSPの標準命令には用意されていないオブジェクト(コントロール)を表示するサンプルコードを掲載しています。細かい解説は、ほとんど用意していませんです。その他のオブジェクトは、別ページになります。
⇒ タブコントロール、ツールチップ、リストビュー+カスタムドロー
⇒ トラックバー、アップダウンコントロール
⇒ 月間カレンダーコントロール、日時指定コントロール
ステータスバーはウィンドウの一番下に付いている現在の状態などを示すバーです。winobj命令でステータスバーを設置し、パーツを分解したり、文字列を変更するにはsendmsg命令を使います。
ちなみに、このサンプルでは、ステータスバーに現在の時刻(gettime関数)をリアルタイムで表示させる処理になっています。Win32APIのSetTimer関数(ウィンドウタイマー)というのを利用しており、これについてはちょくとさんのページ、HSPWikiのページ、拙作MOD音楽プレーヤーのサンプルなんかをチェック!
; ステータスバー作成サンプルソース (by Kpan) #uselib "user32" #func SetTimer "SetTimer" int, int, int, int #func KillTimer "KillTimer" int, int screen ,300 , 200 ; ウィンドウメッセージ WM_TIMER oncmd gosub *on_wm_timer, $113 ; 終了時 onexit *exit ; ステータスバー作成、objinfo関数でハンドルを取得 winobj "msctls_statusbar32", "最初の文字", , $50000000 hStatus = objinfo(stat, 2) ; SB_SETPARTS ; ステータスバーを3つのパーツに分割 ; パーツの位置をx方向の座標数値で指定。(-1は右端まで) aWidth = 100, 200, -1 sendmsg hStatus, $404, 3, varptr (aWidth) pos 10, 10 : button "文字列変更", *change pos 10, 40 : button "時間", *time stop *change ; SB_SETTEXT ; パーツのインデックス値は左から順に0〜です。 sendmsg hStatus, $401, 0, "1番目へんこー" sendmsg hStatus, $401, 1, "2番目へんこー" stop *on_wm_timer ; SB_SETTEXT ; 時刻を3番目のパーツ部分に表示。(0.x秒ぐらいずれたりします sendmsg hStatus, $401, 2, "\t"+gettime(4)+":"+gettime(5)+":"+gettime(6)+" return *time ; 1000ミリ(1秒)間隔でタイマーイベント開始 SetTimer hwnd, 1, 1000 stop *exit KillTimer hwnd, 1 end
アニメーションコントロールは、ファイルのコピー時や検索時などでアニメーション演出を行っているコントロールです。以下のサンプルは、Windowsのシステムファイル「shell32.dll」に含まれているアニメーション用データ(AVIファイル)を再生します。(→ 参照、アニメーションコントロール備忘録)
// アニメーションコントロール (by Kpan) // (!Windows Vistaでは機能しないそうです。管理人はXP環境なので対処できません。) #include "kernel32.as" ; 「shell32.dll」のハンドル取得 GetModuleHandle "shell32" hModule = stat pos 50,50 ; アニメーションコントロール設置 winobj "SysAnimate32", "", , $50000000 | $2 hSysAnimate = objinfo(stat, 2) ; AVIファイルの読み込み (ACM_OPEN) ; p4に以下の再生番号 ; 150=フォルダの検索、151=ファイルの検索、152=コンピュータの検索、 ; 160=ファイルの移動、161=ファイルのコピー、162=ゴミ箱に移動、 ; 163=ゴミ箱を空にする、164=ファイルの削除 sendmsg hSysAnimate, $464, hModule, 160 pos 50,200 button "ぷれい", *acm_play button "すとっぷ", *acm_stop stop ; AVIファイルの再生 (ACM_PLAY) *acm_play sendmsg hSysAnimate, $465, -1, -1 stop ; AVIファイルの停止 (ACM_STOP) *acm_stop sendmsg hSysAnimate, $466
何かしらの処理の進行状況などを示すプログレスバーです。たとえば、プログラムのインストール時に、四角形の塊が棒状にビヨーンと伸びるアレです。HSP2のllmod.asモジュールに「プログレスボックス」(progbox命令)なるものが用意されていましたが、普通はプログレスバーといいます。(→ 参照、プログレスバー備忘録)
winobj命令でコントロールを設置後、sendmsg命令でいろいろと制御します。このバーの範囲はデフォルトで0〜100になってます。
// プログレスバー サンプルコード (by Kpan) ; コントロールの設置 pos 50, 50 winobj "msctls_progress32", "", , $50000000, 200, 20 hProgress = objinfo(stat, 2) ; バーの位置指定 (PBM_SETPOS) ; 第3パラのwparam値に位置の数値 sendmsg hProgress, $402, 50 ; 現在のバーの位置取得 (PBM_GETPOS) sendmsg hProgress, $408 mes stat
// 通常のバー位置の増減はこちらを使う ; 下の「PBM_STEPIT」の1ステップ分増減量指定 (PBM_SETSTEP) sendmsg hProgress, $404, -10 ; 1ステップ分の増減 (PBM_STEPIT) ; 上の「PBM_SETSTEP」指定を行わなかった場合の1ステップ分は +10 sendmsg hProgress, $405
// プログレスバーの追加スタイル #define PBS_SMOOTH 0x01 ; バーをスムーズ (XP以降のビジュアルスタイル時は反映不可) #define PBS_VERTICAL 0x04 ; オブジェクト縦方向 winobj "msctls_progress32", "", , $50000000 | PBS_VERTICAL, 20, 200
<< オブジェクト 7 | HSP3 オブジェクト | オブジェクト 9 >>
Copyright © 2005-2012 Kpan. All rights reserved.