HSP3 あれこれ <オブジェクト 8>

Last Update : 2009/07/xx

◇ その他のオブジェクト

 HSPの標準命令には用意されていないオブジェクト(コントロール)を表示するサンプルコードを掲載しています。細かい解説は、ほとんど用意していませんです。その他のオブジェクトは、別ページになります。

 ⇒ タブコントロール、ツールチップ、リストビュー+カスタムドロー
 ⇒ トラックバー、アップダウンコントロール
 ⇒ 月間カレンダーコントロール、日時指定コントロール

↑TOP↑

ステータスバーの表示

 ステータスバーはウィンドウの一番下に付いている現在の状態などを示すバーです。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

↑TOP↑

アニメーションコントロール の作成

 アニメーションコントロールは、ファイルのコピー時や検索時などでアニメーション演出を行っているコントロールです。以下のサンプルは、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

↑TOP↑

プログレスバーコントロール の作成

 何かしらの処理の進行状況などを示すプログレスバーです。たとえば、プログラムのインストール時に、四角形の塊が棒状にビヨーンと伸びるアレです。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

↑TOP↑

<< オブジェクト 7 | HSP3 オブジェクト | オブジェクト 9 >>

Copyright © 2005-2012 . All rights reserved.