sendmsg命令 Tips集 (リストボックス・コンボボックス)

Last Update : 2008/03/xx

ウィンドウ 関連 | ボタン・チェックボックス | 入力ボックス・メッセージボックス | リストボックス・コンボボックス

リストボックス・コンボボックス

 リストボックスのウィンドウメッセージは「LB_〜」の頭文字で始まります。MSDNのページ(英語)を確認してください。コンボボックスのウィンドウメッセージは「CB_〜」の頭文字ではじまります。MSDNのページ(英語)を確認してください。数はそれぞれ40種ほどあります。

 sendmsg命令の第1パラメータに指定するのは、オブジェクトのウィンドウハンドル値です。HSPのobjinfo関数で取得します。ちなみに、複数項目選択可能なリストボックス、入力可能なコンボボックスを用意したい場合は、HSPのwinobj命令を使ってコントロールを最初から設置する必要があります。

リストボックスの項目追加/挿入/削除
 リストボックス内の文字列を一気に書き換えることができるHSP標準のobjpm命令を利用しない手法です。ちなみに、WM_SETREDRAWメッセージを利用することで実際の表示文字列の反映と再描画を制御できるので、より高速に書き換えたいならどうぞ。

 → HSP3 オブジェクト編 4 (リストボックス・項目文字列の追加や削除)

リストボックスの文字列検索
 リストボックス内の項目文字列を検索します。LB_SELECTSTRINGは前方一致で検索し、見つかった場合は項目の選択が行われます。前方一致のLB_FINDSTRING、全部一致のLB_FINDSTRINGEXACTは検索するだけです。3つともアルファベットの大文字・小文字の区別はありません。該当する項目が複数あるなら、wParam値で検索開始位置を調節します。

//	リストボックスの項目文字列検索3種

	value = -1
	listbox value, 100, "HSP1\nHSP2\nHSP3\nHSP4\nHSP5"
	hListbox = objinfo(stat, 2)

	objsize 150

	sdim keyword
	input keyword

	button "LB_SELECTSTRING", *search1
	button "LB_FINDSTRING", *search2
	button "LB_FINDSTRINGEXACT", *search3

	stop

;	sendmsg命令の共通部分
;	第3パラ(wparam値)に検索開始インデックス(0〜) [-1の場合は最初から]
;	第4パラ(lparam値)に検索文字列
;	システム変数statに一致したインデックス(0〜)が返る [-1の場合はヒットなし]
*search1
;	前方一致+項目選択 (LB_SELECTSTRING)
	sendmsg hListbox, $18C, -1, keyword
	mes stat

	stop

*search2
;	前方一致 (LB_FINDSTRING)
	sendmsg hListbox, $18F, -1, keyword
	mes stat

	stop

*search3
;	全文一致 (LB_FINDSTRINGEXACT)
	sendmsg hListbox, $1A2, -1, keyword
	mes stat

リストボックスの項目の高さ変更
 LB_SETITEMHEIGHTは1項目の表示の高さを調節します。全項目で統一された高さになります。項目ごとに高さを変えたいなら、オーナードローする必要があります。高さを広げても、項目内の文字列そのものは、縦方向の中央には来ません。
 HSPのlistbox命令だとsendmsg命令(SendMessage関数)が機能しないので、PostMessage関数で送信してます。リストボックスをwinobj命令で設置した場合は機能します。

//	リストボックスの項目の高さ変更

#include "user32.as

	listbox value, 100, "HSP\nスクリプト\nコード\nリストボックス"
	hListbox = objinfo(stat, 2)

;	LB_SETITEMHEIGHT
;	第4パラのlparam値に高さ (ピクセル単位)
	PostMessage hListbox, $1A0, 0, 20

リストボックスの特定項目文字列取得
 
メモリノートパッド機能のnote〜系命令を使わず、指定した項目に表示されている文字列を取得します。

 → HSP3 オブジェクト編 4 (リストボックス・特定項目の文字取得)

リストボックスの項目数取得
 リストボックスの項目数を取得します。

 → HSP3 オブジェクト編 4 (リストボックス・項目数取得)

コンボボックスの項目追加/削除
 コンボボックス内の文字列を一気に書き換えることができるHSP標準のobjprm命令を利用しない手法です。

 → HSP3 オブジェクト編 5 (コンボボックス・項目文字列の追加や削除)

コンボボックスの項目数取得

//	コンボボックスの項目数取得

	combox value, 100, "HSP\n講座\nコンボボックス\n項目数"
	hCombox = objinfo(stat, 2)

;	CB_GETCOUNT
	sendmsg hCombox, $146
	mes stat

コンボボックスの文字列検索
 リストボックスと機能的に同じ処理のCB_SELECTSTRING、CB_FINDSTRING、CB_FINDSTRINGEXACTがあります。

コンボボックスの項目の高さ変更
 CB_SETITEMHEIGHTは1項目の表示の高さを調節します。上のリストボックスの説明を参照。

//	コンボボックスの項目の高さ変更

#include "user32.as

	combox value, 100, "HSP\nスクリプト\nサンプル\nコンボボックス"
	hCombox = objinfo(stat, 2)

;	CB_SETITEMHEIGHT
;	第4パラのlparam値に高さ (ピクセル単位)
	PostMessage hCombox, $153, 0, 20

コンボボックスの特定項目文字取得
 メモリノートパッド機能のnote〜系命令を使わず、指定した項目に表示されている文字列を取得します。

 → HSP3 オブジェクト編 5 (コンボボックス・特定項目の文字取得)
 → sendmsg命令 Tips集 (オブジェクトの表示文字列取得)

コンボボックスのドロップダウンリスト開閉
 項目リストのドロップダウンをCB_SHOWDROPDOWNでスクリプトから行えます。

//	コンボボックスのドロップダウン開閉

	combox value, 100, "HSP\n講座\nsendmsg\nコンボボックス"
	hCombox = objinfo(stat, 2)

	button "にょきっ", *open
	stop

*open
;	スクリプトからリストを開く (CB_SHOWDROPDOWN)
	sendmsg hCombox, $14F, 1
	wait 100

;	逆の閉じる
	sendmsg hCombox, $14F

↑TOP↑


日本最大のYahoo!オークションで掘り出しものを探しちゃお! (100スタート)円

HSP3 あれこれ | HSP3 オブジェクト | HSP 命令/関数講座

Copyright © 2005-2012 . All rights reserved.