HSP命令講座 <winobj命令>

Last Update : 2006/12/xx

PR HSPの書籍 『最新HSP3.2 プログラミング入門』

winobj命令 (HSP 3.x)

 Windowsが用意してる「コントロール」や「コモンコントロール」を設置する命令です。コントロールは、HSPでいうオブジェクトのことです。命令名の由来は、「window object」から。

 HSPにはあらかじめ6種類のオブジェクト設置命令が用意されてます。ボタン(buttom命令)、チェックボックス(chkbox命令)、入力ボックス(input命令)、メッセージボックス(mesbox命令)、リストボックス(listbox命令)、コンボボックス(combox命令)です。

 しかし、これ以外にもコントロールはたくさん用意されており、それを純粋に一から用意できるのがこの命令になります。使いこなすにはHSP外のWin32プログラミングの知識が必要です。

 この命令の説明をHSPのヘルプマニュアルから引用すると、下のようになっています。

HSPの命令がサポートしていないウィンドウオブジェクトをWindows APIを通して配置するため
のもので、WIN32API のCreateWindowExと同様のパラメーターを受け取ります。外部DLLとのやり
取りや、モジュール作成に使用するもので通常覚えておく必要はありません。

 このCreateWindowEx関数については、ちょくとさんのページに情報が掲載されています。winobj命令は内部でこの関数を呼び出しているわけです。winobj命令のパラメータ数の多さに戸惑うかもしれませんが、ひとまず下に挙げたパラメータを把握しておけばOKでしょう。

winobj命令 説明 CreateWindowEx関数
でのパラメータ名
"クラス名" 『クラス名』を指定 pszClassName
"文字列" オブジェクト内に表示される文字列を指定 pszWindowName
p1 『拡張ウィンドウスタイル』を指定 dwExStyle
p2 『ウィンドウスタイル』を指定 dwStyle
p3 オブジェクトの表示サイズを指定 nWidth / nHeight
p4

(1) クラス名
 設置するコントロールごと決まった名称が用意されてます。主なものを挙げときます。前半が「コントロール」、後半がWindows 95から対応した「コモンコントロール」です。

クラス名 オブジェクト
button ボタンコントロール (チェックボックス、ラジオボタン)
edit エディトコントロール(1行or複数行)
listbox リストボックスコントロール
combobox コンボボックスコントロール
static スタティックコントロール (セパレータライン)
msctls_progress32 プログレスバーコントロール
msctls_statusbar32 ステータスバーコントロール
msctls_trackbar32 トラックバーコントロール
msctls_updown32 アップダウンコントロール
tooltips_class32 ツールチップコントロール
syslistview32 リストビューコントロール
systreeview32 ツリービューコントロール
systabcontrol32 タブコントロール
toolbarwindow32 ツールバーコントロール

(2) 文字列
 オブジェクト上に表示される文字列を指定します。上で言えば、ボタンコントロール、エディトコントロール、スタティックコントロールで指定できます。それ以外のコントロールは指定しても意味がないので、無指定("")にします。

(3) 拡張ウィンドウスタイル
 これはちょくとさんのページに一覧が掲載されてます。このリストがほぼすべてです。たとえば、エディトコントロール(HSPでいう入力ボックスやメッセージボックス)の入力部分がくぼんで見えるのは、「WS_EX_CLIENTEDGE」で枠が表示されてるためです。

(4) ウィンドウスタイル
 これはちょくとさんのページに一覧が掲載されてます。通常は「WS_CHILD+WS_VISIBLE=$50000000」をベース値として指定しておくことで、コントロールが表示されます。これに加えて、個々のコントロールやコモンコントロールごとに固有のウィンドウスタイルがたくさん用意されてます。たとえば、ボタンコントロールのウィンドウスタイルはこちら(英語)。

(5) 表示サイズ
 コントロールの表示サイズ(ビット単位)です。省略可能で、HSPのobjsize命令でも反映できます。

↑TOP↑

サンプルスクリプト

 たとえば、ボタンコントロールの設置。HSPでいうbutton命令chkbox命令に相当するものです。

;	標準命令とwinobj命令を使用したオブジェクトの設置

	button "あ", *a
	winobj "button", "あー", , $50000000

	chkbox "い", b
	winobj "button", "いー", , $50000000 | $3

	stop

*a
	mes "やあ!"

 winobj命令で設置したボタンは、HSPのbutton命令と違ってラベルジャンプするような特別な機能はありません。チェックボックスのON/OFF制御を行うobjprm命令も使えません。フォント指定のfont命令sysfont命令も反映されません。これらを実現するには、sendmsg命令(SendMessage関数)やoncmd命令(ウィンドウメッセージ指定)を利用することになります。
 また、HSP 3.2以降では、winobj命令で設置したコントロールをフォーカス移動の対象先として指定できるobjskip命令をサポートしてます。

 HSP3 あれこれ(オブジェクト編)では、このwinobj命令を駆使したオブジェクト設置のサンプルスクリプトがいろいろと登場します。リストビュー、アップダウンコントロール、ラジオボタン、ツールチップ、トラックバー、ステータスバー、プログレスバー、月間カレンダーなどなど。

↑TOP↑

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

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