More ... | HSP2.6:OBJSEND
objsend命令リファレンスマニュアル ver1.0はじめにこのドキュメントは、Hot Soup Processor ver2.4c以降で使用することのできる、 objsend命令についての詳細を解説したものです。objsend命令は、Windowsオブジェクト が使用するメッセージを直接記述できる命令で、用途が広い反面、複雑で面倒な 手続きになることが多いです。Hot Soup Processorを使っていて、通常の命令では どうしても実現できないことや、解決したいことがある場合に参考にしてください。 objsend命令の概要HSPでは、ボタンや入力ボックスなどのパーツを画面上に配置することができますが、 これらはみな、Windowsが管理するオブジェクト(コントロール)と呼ばれる小さな ウインドゥになっています。これらのオブジェクトは、それぞれ独立したプログラム で動いており、外部からの命令によって動作するしくみになっています。 ボタン・入力ボックス・メッセージボックス・チェックボックス・コンボボックス・ リストボックスといったオブジェクトは、それぞれ専用の命令(メッセージ)によって ある程度のコントロールをすることができます。 objsend命令は、このオブジェクトに直接命令を下すための命令です。 書式は、 objsend p1,p2,p3,p4,p5 オブジェクトにメッセージを送る p1=0〜(0) : オブジェクトID指定 p2=0〜(0) : オブジェクトに送るWin32メッセージの種類 p3=0〜65535(0) : オブジェクトに送るパラメータ(wParam) p4=変数 : パラメータの受け渡しに使用する変数名(lParam) p5=0〜(0) : lParamパラメータのタイプ のようになっています。p1で、オブジェクトのIDを指定します。p2で、オブジェクト に送るメッセージ(命令)の種類(コード)を指定、p3で数値のパラメータを、p4には 必ず変数名を記述しなければなりません。p5で、パラメータのタイプを指定します。 p5が0の場合は、p4で指定した変数のアドレス(ポインタ)が渡され、p5が1の場合は、 p4で指定した変数の内容が数値として渡されます。p5を省略した場合には、0になり ます。そして、objsend命令が実行された後には、戻り値がシステム変数statに代入されます。 整理して考えると以下のようになります。
最初にメッセージコード・パラメータ1、2の3つがセットになってオブジェクト に送られます。すると、そのメッセージコードやパラメータに応じた動作を オブジェクトが行ない、その結果がシステム変数statに返ります。 オブジェクトの種類ごとに色々なメッセージコードが存在します。そして、 そのメッセージコードごとにパラメータ1、パラメータ2に指定する数値の意味が 違ってきます。ちょうどHSPにも色々な命令と、それに応じたパラメータの指定が あるようにオブジェクトにもまた色々な命令があるのです。 objsend命令の制約・注意objsend命令は、Windowsオブジェクトにメッセージを送るという直接的な動作をするものです。 間違って使うと、オブジェクトの状態がおかしくなったり、 Windows の動作に影響を与えることにもなるので、十分に注意して使ってください。 また、Windowsのオブジェクトがサポートしていても、HSPからでは使用できない メッセージもありますので、適当なメッセージを送ったりしないでください。 リファレンスの形式以降のリファレンスでは、次のような形式でメッセージの説明を行なっています。
これを実際のobjsend命令で使う場合は、 「 objsend オブジェクトID , Code , wParam , lParam , Type 」 のような順番で記述することになります。 Resultには、実行後にシステム変数statに返される値の内容を示しています。 メッセージボックスへ送るメッセージ以下のリファレンスは、mesbox命令で表示されたメッセージボックスに対してのメッセージになります。 それ以外のオブジェクトには無効ですので注意してください。 メッセージボックス内のカーソル(キャレット)の位置を取得
カーソル位置は、全体のテキストの中で0から数えて何byte目(何文字目) かという単位で返されます。 メッセージボックス内のカーソル(キャレット)の位置を設定する
選択スタートと、選択終了位置を指定すると、その範囲が反転して選択 された状態になります。 単にカーソル位置を移動したい場合は、 選択スタートと終了位置に同じ値を指定します。 指定する値は、EM_GETSELと同じく全体のテキストの中で0から数えて 何byte目(何文字目)かという単位になります。 このメッセージでカーソル位置を変更しても、 ウインドゥ内の状態は 変化しません。実際にカーソルが移動した場所に表示をずらすには EM_SCROLLCARETのメッセージを送る必要があります。 メッセージボックス内の表示をスクロールさせる
wParamで左右へのスクロール、lParamで上下のスクロールする数を指定します。 スクロールの方向は、マイナスの値か、プラスの値かで決まります。 現在カーソル(キャレット)がある位置を画面内にもってくるようにする
wParamで指定した行を、全体のテキストの中で0から数えて何byte目(何文字目)かという単位に変換して値を返す
行の指定は、一番上の行は0から始まって何番目かという単位で指定します。 wParamで指定した行インデックス(0から始まる)にある文字(byte)数を返す
UNDOをする
wParamで指定したポジション(テキスト全体の何byte目か)を、行インデックス に変換して値を返す
メッセージボックスの書き込み禁止属性の設定をする
wParamで書き込み禁止のon/offを指定します。 メッセージボックスの左マージンおよび右マージンの設定をする
(現在のHSPのバージョンでは、マージンの設定をすると文字がウインドゥ からはみ出ます) EM_SETMARGINSで設定したマージンの値を調べて返す
メッセージボックスが扱うことができるテキスト量の限界を設定する
wParamで何byteまでのテキストを扱うかを指定します。wParamに0を指定すると、 そのOSでの最大サイズが割り当てられます。 (Windows95では、最大65535までのテキストしか扱うことができません) EM_SETLIMITTEXTで指定したテキスト量の限界値を調べて返す
ボタンへ送るメッセージ以下のリファレンスは、button命令で表示されたボタンに対してのメッセージになります。 それ以外のオブジェクトには無効ですので注意してください。 ボタンにメッセージを送りスタイルを変更することにより、チェックボックスやラジオボタン、 グループボックスなどのまったく外観の違うオブジェクトに変更することが可能です。 チェックボックスのON/OFFステータスを返す
チェックされていれば1が、されていなければ0が返ります。 3STATEのチェックボックスで、非表示(グレイ)であれば2が返ります。 チェックボックスのON/OFFステータスを強制的に設定する
wParamに設定値を指定します。0ならOFF、1ならばONになります。 3STATEのチェックボックスで、非表示(グレイ)にするには2を指定します。 ボタンのスタイルを変更する
wParamで変更するスタイルを指定します。
button命令は通常、ボタンが押されると指定されたラベルにジャンプします。 BM_SETSTYLEによってボタンスタイルが変更されても基本的には、同じ動作をします。 ただし、BS_GROUPBOXはボタンとして機能しなくなります。 それ以外のチェックボックスやラジオボタンは、ON/OFFのためにクリックした時点でラベルにジャンプします。 その際、(auto)がついているスタイルの場合は 自動的にチェックのON/OFFを行ないます。 (auto)がないスタイルでは、ジャンプした先でON/OFFをさせる処理を自前で行なう必要があります。 ラジオボタンは、2つ以上の選択ボックスから1つだけをチェックするためのオブジェクトです。 これは、(auto)であっても選択したラジオボタンがONに なるだけなので、 他の選択肢をOFFにする処理はスクリプト側で行ないます。 BS_OWNERDRAW(非描画ボタン)は、ボタンとしては絵が描かれませんが、 そのエリアでボタンをクリックすれば反応します。このスタイルに変更した後で、 上から好きな絵(ボタンの絵など)を描画して使うことができます。 |