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

Last Update : 2007/08/xx

◇ その他のオブジェクト

 HSPの標準命令にはないオブジェクト(コントロール)のサンプルスクリプトを掲載しています。細かい解説は、ほとんど用意してません。以下のオブジェクトは、別ページになります。

 ⇒ リストビュー、チェックボックス付きリストボックス、タブコントロール、ツールチップ
 ⇒ アニメーションコントロール、プログレスバー
 ⇒ 月間カレンダーコントロール、日時指定コントロール

↑TOP↑

アップダウンコントロールの作成

 アップダウンコントロール付き入力ボックスのサンプルです。

 HSP2では、llmod.asモジュールに「アップダウンボタン」(udbtn)という名前で用意されていました。アップダウンボタンの操作で、ボックス内の数値の単純な増減(+1 or -1)が可能です。入力ボックスの input命令 と コモンコントロール(アップダウンコントロール)を作成する winobj命令 の組み合わせで威力を発揮します。

;	アップダウンコントロールサンプル (by Kpan)

;	追加のウィンドウスタイル
#define UDS_WRAP $01		; 最大値・最小値に達したらループ
#define UDS_ALIGNRIGHT $04	; アップダウンボタンを直前のオブジェクト(右部分)に組み込む
#define UDS_ALIGNLEFT $08	; アップダウンボタンを直前のオブジェクト(左部分)に組み込む
#define UDS_ARROWKEYS $20	; カーソルキーで数値変更
#define UDS_HORZ $40		; アップダウンボタンを左右方向に
#define UDS_NOTHOUSANDS $80	; 3桁コンマ区切り無効

;	上位・下位ワード マクロ
#define ctype MAKELONG(%1,%2) (%1) & $FFFF | (%2) << 16

;	普通の入力ボックス
	pos 50, 50
	input a, 50, 20

;	アップダウンコントロール作成
;	(デフォルトの最大値・最小値は100〜0の範囲)
	winobj "msctls_updown32", "", , $50000012 | UDS_ALIGNRIGHT
	hUpdown = objinfo(stat, 2)

;	UDM_SETRANGE
;	lparam値に最大値と最小値を指定 (±32767 の整数)
	sendmsg hUpdown, $465, , MAKELONG(20, -10)

;	数値指定
	objprm 0, 10

	button "ちえつく", *check
	stop

*check
	title ""+a

 このアップダウンコントロール付き入力ボックスは、2つのオブジェクトから成り立っているので、clrobj命令でオブジェクトを削除する場合は、2つのオブジェクトに対して呼ばないといけません。

↑TOP↑

トラックバーコントロール の作成

 トラックバーコントロール、つまみの調節で数値を設定することができるコントロールです。別名スライダー。

 HSP2では、llmod.asモジュールに「トラックボックス」(trackbox)なるものが用意されていましたが、一般的にはトラックバーと呼びます。

 以下は、HSP3公式掲示板で提示した簡単なサンプル。winobj命令でコントロールを設置し、各種制御にsendmsg命令を使います。このコントロールについての詳細を知りたければ、Delphi言語向けですがHalbow資料館さんの該当ページ、拙作MODプレーヤーサンプルとかをチェック!

;	トラックバー設置 (デフォルト範囲は0〜100)
;	ウィンドウスタイルに目盛り自動表示 ($1=TBS_AUTOTICKS)
	winobj "msctls_trackbar32", "", , $50000000 | $1, 200, 30
;	このトラックバーのウィンドウハンドル取得
	hTrackbar = objinfo(stat, 2)

;	つまみの位置 50 (TBM_SETPOS)
	sendmsg hTrackbar, $405, 1, 50

;	バーの目盛り間隔 10 (TBM_SETTICFREQ)
	sendmsg hTrackbar, $414, 10

;	リアルタイムで垂直バーの動きを見たい (WM_VSCROLL)
;	(水平バーの場合はWM_HSCROLLを)
	oncmd gosub *vscroll, $114

	stop

*vscroll
;	lparamにウィンドウハンドルが返る
	if lparam = hTrackbar {
;		現在の位置取得 (TBM_GETPOS)
;		statに位置が返ります。
		sendmsg hTrackbar, $400
		title ""+stat
	}
	return

↑TOP↑

トラックバー+カスタムドロー

 トラックバーコントロールのツマミ部分を自前で描画するカスタムドロー処理。以下は、HSP Help Centerさんの掲示板にて提示した何ともテキトーなスクリプトです。細かい説明一切なし。(→ 参照、カスタムドローの備忘録

;	トラックバーコントロール+カスタム描画 (by Kpan)

#include "user32.as"

#define CDDS_PREPAINT 0x00000001
#define CDDS_ITEMPREPAINT 0x00010001

#define CDRF_NOTIFYITEMDRAW 0x00000020
#define CDRF_SKIPDEFAULT 0x00000004

	oncmd gosub *notify, $4E

	dim RECT, 4

	winobj "msctls_trackbar32", "", , $50000000, 300
	hTrackbar = objinfo(stat, 2)

	stop

*notify
;	NMHDR構造体
	dupptr NMHDR, lparam, 12

	if NMHDR.0 = hTrackbar {
		if NMHDR.2 = -12 {
;			NMCUSTOMDRAW構造体
			dupptr NMCUSTOMDRAW, lparam, 60

;			CDDS_PREPAINTステージ
			if NMCUSTOMDRAW.3 = CDDS_PREPAINT {
				return CDRF_NOTIFYITEMDRAW
			}

;			CDDS_ITEMPREPAINTステージ
			if NMCUSTOMDRAW.3 = CDDS_ITEMPREPAINT {
;				TBCD_THUMB
				if NMCUSTOMDRAW.9 = 2 {
				RECT.0 = NMCUSTOMDRAW.5
				RECT.1 = NMCUSTOMDRAW.6
				RECT.2 = NMCUSTOMDRAW.7
				RECT.3 = NMCUSTOMDRAW.8
				DrawText NMCUSTOMDRAW.4, "+", -1, varptr (RECT), $10
				return CDRF_SKIPDEFAULT
				}
			}
		}
	}

	return

↑TOP↑

<< オブジェクト 6 | HSP3 オブジェクト | オブジェクト 8 >>

Copyright © 2005-2012 . All rights reserved.