HSP3命令入門講座 <listbox命令>

Last Update : 2006/11/xx

listbox命令 (リストボックス) の基礎

HSPのリストボックス (クラシックスタイル) リストボックスオブジェクトの設置です。命令名の由来は、そのまま「list box」から。あらかじめ用意しておいた項目文字列の中から1つの項目をユーザーに選択してもらう、という機能を持ってます。

 命令の形式は下のようになってます。拡張Yサイズを指定すると、表示できる項目数によりリストボックス内の右側にスクロールバーを表示してくれます。objsize命令はオブジェクトのサイズ(横方向&縦方向)としても反映できます。

 listbox 状態保持変数, 拡張Yサイズ, "文字列"

 似たようなオブジェクトにコンボボックス(combox命令)があります。リストボックスを削除するにはclrobj命令、フォーカスを移すにはobjsel命令を利用します。リストボックスを操作できないよう無効化するには、objgray命令(obj.asモジュール)やHSP 3.2以降で標準のobjenable命令があります。

↑TOP↑

サンプルコード (リストボックスの表示)

 リストボックスを表示します。文字列を「\n」(改行)で区切ることで1つの項目の文字列になります。

;	リストボックスオブジェクトの表示位置
	pos 100, 100

;	リストボックスオブジェクトのサイズ (横幅)
	objsize 100

;	リストボックス設置
	listbox a, 30, "HSP\nlistbox\nリストボックス\n項目選択"

 文字列用の変数を別に用意しておけば、複数のリストボックスに同じ文字列を指定することもできます。

	listboxtext = "リストボックス\nHSP\nlistbox\nコード\nスクリプト"

	pos 100, 100
	objsize 100

	listbox a, 40, listboxtext
	listbox b, 30, listboxtext

  リストボックス内の項目には、上から順番にインデックス番号(0〜)が割り振られます。1からではないのでご注意を。状態保持変数は、このインデックス番号に関する処理で使われます。

	pos 100, 100
	objsize 100

;	状態保持変数にあらかじめインデックス番号を指定しておくと、
;	その項目が選択状態になります。-1の場合は未選択状態。
	a = 2

	listbox a, 100, "リストボックス\nlistbox\nHSP\nサンプルコード"

	button "チェック", *check
	stop

*check
;	状態保持変数をチェックすると、どの項目が選択されているかが分かる
	mes a

↑TOP↑

サンプルコード (項目選択の監視)

 リストボックス内のどの項目が選択状態かをリアルタイムで監視する1つの方法です。ループ中に状態保持変数の変化をチェックします。ちなみに、リストボックス内の表示文字列全体のフォントを指定するには、font命令objmode命令を利用します(項目ごとのフォント変更はできません)。

//	リストボックスの項目選択監視

	font "MS UI Gothic", 14, 1
	objmode 2

	objsize 100
	listbox a, 100, "listbox\nリストボックス\nHSP3\n項目監視"

	repeat
		wait 10
		title ""+a
	loop

↑TOP↑

サンプルコード (指定項目の選択)

 すでに設置してあるリストボックスの特定項目を強制的に選択するには、HSPに登場するオブジェクトの様々な制御を行うobjprm命令を使用します。インデックス番号(0〜)を指定してください。数値文字列の場合だと文字列変更になってしまうので注意。(この処理いついてはHSPリファレンスでは触れられてません)

//	リストボックスの項目選択

	pos 100, 100
	objsize 100

	listbox a, 100, "HSP\nリストボックス\nソース\n項目文字列\nlistbox"

	button "選択", *select
	stop

*select
;	第2パラメータに選択する項目のインデックス番号(0〜)値を
	objprm 0, 3
//	× オブジェクト設置後に代入処理を用意しても選択項目は変わりません。

	listbox a, 100, "HSP\nリストボックス\nソース\n項目文字列\nlistbox"

	a = 3

↑TOP↑

サンプルコード (項目文字列の追加・削除)

 すでに設置してあるリストボックス内に新たな文字列を追加したり、逆に特定の項目を削除したりする場合は、objprm命令を利用します。この命令にはリストボックス内の文字列をまるごと変更する機能を持っています。

 細かい項目の変更には、メモリノートパッド機能のnote〜命令を利用して文字列をいじった後、最終的にobjprm命令でリストボックス内の文字列を入れ替える、という流れです。

//	リストボックスの項目追加・削除

	listboxtext = "HSP\nコード\nlistbox\nリストボックス"

	pos 100, 100
	objsize 100

	listbox a, 40, listboxtext

	button "追加", *add
	button "挿入", *ins
	button "削除", *del

	stop

*add
	notesel listboxtext

;	最後部に追加
	noteadd "追加!", -1, 0

;	項目全体書き換え (文字列)
	objprm 0, listboxtext

;	選択項目の変更 (数値)
;	noteinfo関数で項目数を取得
	objprm 0, noteinfo (0) - 1

	stop

*ins
	notesel listboxtext

;	選択項目の上部に挿入
	noteadd "挿入!", a, 0

	objprm 0, listboxtext

	stop

*del
	notesel listboxtext

;	項目の削除
	notedel a

	objprm 0, listboxtext

	stop

 ちなみに、全項目の文字列を一発削除するには、objprm命令を文字列無指定で呼び出せばOK。

;	全項目の文字列削除
	objprm (オブジェクトID), ""

↑TOP↑

サンプルコード (項目文字列の取得)

 リストボックスで選択項目の文字列を取得します。メモリノートパッド機能のnote〜命令と組み合わせるのがポイント。

//	リストボックスの項目文字列の取得

	sdim moji

	listboxtext = "HSP\n講座\nサンプル\nリストボックス\nソースコード\nスクリプト"

	pos 100, 100
	objsize 100

	listbox a, 100, listboxtext

	button "取得", *get

	stop

*get
	notesel listboxtext

;	文字列取得 (指定行読み込み)
	noteget moji, a
	mes moji

↑TOP↑

☆ 発展的なHSPサンプルスクリプト

 リストボックスに関連した発展的なHSP3(HSP 3.x)向けのサンプルソースを公開しています。oncmd命令、sendmsg命令、Windows API(Win32API)を利用して、このページで紹介しているスクリプトの別手法や、基本的命令では実現できないちょっと発展的な処理を実現してみます。

 → HSP3オブジェクトの全般的な情報
 → sendmsg命令のコード (リストボックス・コンボボックス)
 → リストボックス関連の発展的なサンプルスクリプト

↑TOP↑

〜HSP3 あれこれ〜
ウィンドウ | オブジェクト | ファイル | フォルダ | キーボード | マウス | メニュー | システム | 文字列 | COM | その他

Copyright © 2005-2011 ゲーム作成ソフトHSPの情報をいろいろと Let's HSP!. All rights reserved.