Last Update : 2006/12/xx
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命令でも反映できます。
たとえば、ボタンコントロールの設置。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命令を駆使したオブジェクト設置のサンプルスクリプトがいろいろと登場します。リストビュー、アップダウンコントロール、ラジオボタン、ツールチップ、トラックバー、ステータスバー、プログレスバー、月間カレンダーなどなど。