HSP Tips 12

Last Update : 2009/12/xx

HSP のいろいろなプログラミングTips情報だす。( ・_・)y

HSP3 ボタンオブジェクトのQ&A集

 HSPが標準でサポートするGUIオブジェクト「ボタン」関連のQ&A集です。

● ボタン上の文字列を変更するには?
 button命令で表示文字列をあらかじめ指定できますが、ボタンを設置した後は標準のobjprm命令で変更できます。

● ボタン上の文字列を取得するには?
 objprm命令の逆パターンとなる標準命令はありませんが、HSP標準のsendmsg命令でWM_GETTEXTメッセージを送信すると実現できます。

● ボタン上の文字列のフォントを指定するには?
 標準のfont命令objmode命令で実現できます。文字の大きさを指定したり、太字や下線のスタイルも適用可能です。

● ボタンの表示サイズを変更するには?
 標準のobjsize命令で大きさサイズをあらかじめ指定できます。ボタンを設置した後に大きさサイズだけ変更したい場合は、Win32 APIのMoveWindow関数を呼ぶ必要があります。HSP3本体のモジュール「common\obj.as」にこの関数を利用したresizeobj命令が提供されてます。

● ボタンの設置位置を変更するには?
 pos命令で設置前の位置は指定できますが、設置後の変更は標準命令にないので、Win32 APIのMoveWindow関数を呼ぶ必要があります。HSP3本体のモジュール「common\obj.as」にこの関数を利用したresizeobj命令が提供されてます。

ボタンの設置位置、表示サイズを取得するには?
 ボタンの設置位置(X/Y座標)や表示サイズ(ドット単位)を取得する標準命令はないので、Win32 APIのGetWindowRect関数を呼ぶ必要があります。HSP3本体のモジュール「common\obj.as」にこの関数を利用したgetobjsize命令が提供されてます。

● 設置されてるボタンを撤去(削除)するには?
 オブジェクト削除専用にclrobj命令が標準で用意されてます。cls命令は使わないようにしてください。

● ボタンのラベルジャンプ先を1つにまとめるには?
 ボタンのラベルジャンプ先では、システム変数statに押したボタンの「オブジェクトID」が返ってくるので、これを利用してジャンプ先を1つにまとめることが可能です。

● ボタンを押しているにも関わらず、正しくラベルにジャンプしません。
 repeat命令やgoto命令を利用したループ中にbutton命令を大量に呼ぶような処理になっていませんか。見た目には分かりませんが、ボタンオブジェクトの上部にどんどんボタンオブジェクトが重なって設置しているミスがあると起こります。

● ボタン上の文字列を複数行で表示(改行)するには?
 デフォルト状態では改行してもまったく機能しません。Win32 APIのSetWindowLong関数を呼んで、ボタンの”ウィンドウスタイル”を変更することで実現できます。「\n」が改行処理になるので、文字を縦表示にすることも可能です。(→ 参照、HSP3 あれこれ:ボタンオブジェクト編

● ボタン上の文字列の表示位置を変更するには?
 文字列は通常ど真ん中に表示されてますが、Win32 APIのSetWindowLong関数を利用して、ボタンの”ウィンドウスタイル”を変更することで実現できます。ただ、上寄り、下寄り、左寄り、右寄り、その斜め方向の定位置(全部で9ヶ所)で、任意の位置は無理です。(→ 参照、HSP3 あれこれ:ボタンオブジェクト編

● ボタンの押し下げをスクリプト上から行うには?
 sendmsg命令でBM_CLICKメッセージを送信することで、ボタンの押し下げをスクリプト上からシミュレートできます。

● ボタンを押せない状態にするには? (灰色表示、使用不可、無効化)
 Win32 APIのEnableWindow関数を呼ぶ必要があります。HSP本体のモジュール「common\obj.as」にこの関数を利用するobjgray命令が用意されてます。また、HSP 3.2以降ではオブジェクトの無効化・有効化を制御できるobjenable命令を標準でサポートしてます。

● ボタン上の文字色や背景色を変更するには?
 文字色や背景色を一発で変更できる命令は存在しません。一般的には、Win32 APIを駆使してボタンオブジェクトの描画処理をすべて自前で行う「オーナードロー」(オーナー描画)という面倒な処理を用意します。(→ 参照、HSP Tips:オーナードローボタンHSP開発Wiki:ボタンのデザイン変更
 ボタンの上に画像を貼り付ける、button命令を使わないでボタン風に動く擬似的なものを標準命令で組む、などが代替手段としてあります。

● 画像ボタン(イメージボタン)を設置するには?
 ボタンの表面上に画像を貼り付けるには、sendmsg命令でボタンコントロールにBM_SETIMAGEメッセージを送信する必要があります。「llmod3」モジュール(HSP3版llmod.as)にbtnimg命令というものが用意されていますが、Windows Vista以降では正しく動作しないようです。
 HSP 3.2以降は、button命令で設置したボタンオブジェクトを画像ボタン化するobjimage命令が新たに用意されてます。また、button命令を使わないで、マウスの動きを監視してボタン風に動く処理を自前で組む手段があります。

● ラジオボタンを設置するには?
 標準命令にラジオボタンの設置はありません。ただ、ラジオボタンはボタンの見た目を変えたオブジェクトなので、Win32 APIのSetWindowLong関数を使ってボタン(チェックボックス)の”ウィンドウスタイル”を変更することで実現できます。(→ 参照、HSP3 あれこれ オブジェクト編)

^

HSP3 チェックボックスオブジェクトのQ&A集

 HSPが標準でサポートするGUIオブジェクト「チェックボックス」関連のQ&A集です。上のボタンオブジェクトのQ&A集で、「ボタン」⇒「チェックボックス」に置き換えて読むと通用するものが多いので、ここではボタンと異なる部分だけ書き出しときます。

チェックボックスのチェックマークの有効/無効を切り替えるには?
 設置前はchkbox命令のパラメータで指定できますが、設置後は標準のobjprm命令で変更します。

チェックボックス上の文字列を変更するには?
 sendmsg命令を利用して、WM_SETTEXTメッセージを送信する必要があります。HSP2で機能したobjprm命令は、HSP 3.0/3.1ではHSPエラーになり機能しません。(HSP 3.2以降ではobjprm命令で変更できるよう対処されてます)

チェックボックスのチェックマークの有無をリアルタイムで知るには?
 chkbox命令で指定したパラメータの変数の動きをループ内で監視してください。上級者向けとして、oncmd命令(WM_COMMANDメッセージ)を利用して、button命令のラベルジャンプ処理をうまく利用する手法もあります。(→ 参照、HSP3 あれこれ:オブジェクト編

チェックボックスの表面色と同じものをウィンドウの表面色にするには?
 HSP標準のsyscolor命令(モード15)がいちおう同じ表面色です。これを適用後にboxf命令でウィンドウを塗りつぶします。

チェックマークの項目を右側に表示させるには?
 通常は左側にチェックマークを入れるための項目が存在しますが、Win32 APIのSetWindowLong関数を利用して、チェックボックスの”ウィンドウスタイル”を変更することで右側に表示できます。(→ 参照、HSP3 あれこれ:チェックボックスオブジェクト編

チェックマークの項目が丸い形状のオブジェクトを設置するには?
 これは複数の選択肢の中から1つだけ選択できる「ラジオボタン」です。HSPの標準命令には用意されてませんが、Win32 APIのSetWindowLong関数を使ってボタン(チェックボックス)の”ウィンドウスタイル”を変更することで実現できます。ラジオボタン設置モジュールも公開してます。(→ 参照、HSP3 あれこれ:オブジェクト編1

^

HSP3 入力ボックスオブジェクトのQ&A集

 HSP標準のGUIオブジェクト「入力ボックス」関連のQ&A集です。

入力ボックスの内容を変更するには?
 input命令の第1パラメータの変数にあらかじめ指定しておきます。設置後の変更はobjprm命令を利用します。

■ 入力ボックス上の文字列のフォントを指定するには?
 標準のfont命令objmode命令で実現できます。文字の大きさを指定したり、太字や下線のスタイルも適用可能です。

入力ボックスの表示位置や表示サイズを変更するには?
 設置前はpos命令、input命令のパラメータやobjsize命令で指定できますが、設置後はWin32 APIのMoveWindow関数を呼ぶ必要があります。HSP3本体のモジュール「common\obj.as」にこの関数を利用したresizeobj命令が提供されてます。

入力ボックスの設置位置、表示サイズを取得するには?
 入力ボックスの設置位置(X/Y座標)や表示サイズ(ドット単位)を取得する標準命令はないので、Win32 APIのGetWindowRect関数を呼ぶ必要があります。HSP3本体のモジュール「common\obj.as」にこの関数を利用したgetobjsize命令が提供されてます。

入力ボックス内の内容を変更できないよう編集不可状態にするには?
 sendmsg命令を使ってEM_SETREADONLYメッセージを送信することで実現できます。(→ 参照、HSP3 あれこれ:入力ボックスオブジェクト編
 HSP 3.2以降は標準のobjenable命令も使えます。

編集不可状態の入力ボックスの背景色を変更するには?
 oncmd命令(WM_CTLCOLORSTATICメッセージ)とWin32 APIを利用することで、背景色を変更できます。(→ 参照、HSP3 あれこれ:入力ボックスオブジェクト編

入力ボックス上の文字色や背景色を変更するには?
 oncmd命令(WM_CTLCOLOREDITメッセージ)とWin32 APIを利用することで、それぞれ1つの色を反映することができます。(→ 参照、HSP3 あれこれ:入力ボックスオブジェクト編

入力ボックス上の文字色を単語(フレーズ)ごとに指定するには?
 input命令の場合は実現不可能です。文字列全体の色のみ指定できます。

入力ボックスを複数行入力できるようにするには?
 input命令は1行専用の入力ボックスです。たとえば、2行入力ボックスのようなものは無理です。複数行表示であれば、メッセージボックス(mesbox命令)を利用しましょう。

入力ボックスの文字入力をリアルタイムで知るには?
 input命令の第1パラメータの変数の動きをループ内で監視してください。他に、上級者向けとしてoncmd命令(WM_COMMANDメッセージ)でEN_CHANGE通知を受け取る手法もあります。(→ 参照、HSP3 あれこれ:入力ボックスオブジェクト

入力ボックス上の文字列の表示位置を変更するには?
⇒ 通常では文字列は左寄りに表示されますが、Win32 APIのSetWindowLong関数をを使って入力ボックスの”ウィンドウスタイル”を変更すれば、中央と右寄りの表示が実現できます。(→ 参照、HSP3 あれこれ:入力ボックスオブジェクト

入力ボックスに打ち込んだ英文字列を必ず大文字/小文字で表示させるには?
 Win32 APIのSetWindowLong関数を使って入力ボックスの”ウィンドウスタイル”を変更することで実現できます。(→ 参照、HSP3 あれこれ:オブジェクト編2

数字しか入力できない入力ボックスを設置するには?
 Win32 APIのSetWindowLong関数を使って入力ボックスの”ウィンドウスタイル”を変更することで実現できます。もし、数字以外の文字入力が行われた場合は、警告のツールチップが表示されます。(→ 参照、HSP3 あれこれ:オブジェクト編2

外枠に凹み(へこみ)がない入力ボックスを設置するには?
 Win32 APIのSetWindowLong関数とSetWindowPos関数を利用して”拡張ウィンドウスタイル”を変更することで実現できます。(→ 参照、HSP3 あれこれ:オブジェクト編2

入力した文字を「*」(アスタリスク)で隠すパスワードボックスを設置するには?
 input命令で表示した入力ボックスに対して、sendmsg命令でEM_SETPASSWORDCHARメッセージを送信することで実現できます。(→ 参照、HSP命令講座:input命令

入力ボックス内でのエンターキー押しを判定するには?
 HSPのgetkey命令やstick命令を利用すると、日本語入力変換(IME)の際のエンターキー(Enterキー、Returnキー)に反応してしまい、うまくいきません。onkey命令を利用した手法があります。(→ 参照、HSP命令講座:input命令

入力ボックス内に数値を増減させるボタンを用意するには?
 これは「アップダウンコントロール」といいます。「llmod3」モジュールに設置命令(udbtn命令)が用意されてます。winobj命令で設置する方法もあります。(→ HSP3あれこれ:アップダウンコントロール

^

<< HSP Tips 11 || HSP Tips 13 >>

Copyright © 2005-2012 . All rights reserved.