PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
10577 00/03/01 20:56:01 RE(3):PB5.0.04: send関数の使い方(Windowsメッセージ)を教えて下さい By Taka
10572 00/03/01 17:27:16 RE(2):PB5.0.04: send関数の使い方(Windowsメッセージ)を教えて下さい By 龍之介
10571 00/03/01 17:12:58 RE(1):PB5.0.04: send関数の使い方(Windowsメッセージ)を教えて下さい By Potato
10570 00/03/01 16:45:40 PB5.0.04: send関数の使い方(Windowsメッセージ)を教えて下さい By 龍之介

カテゴリ:スクリプトの記述
日付:2000年03月01日 20:56 発信者:Taka
題名:RE(3):PB5.0.04: send関数の使い方(Windowsメッセージ)を教えて下さい

龍之介さん、こんばんは。

>リファレンスにはsend(Handle(Parent), 273, 0, Handle(cb_OK))とcb_OK.TriggerEvent(Clicked!)が
>同じ動きをすると記述してあります。

>第2引数の273を16進にすると0x0111で、これはWINUSER.Hで定義されているWM_COMMANDと一致するのですが、
>なぜsend関数の第2引数に273を与えると対象となるオブジェクト(cb_OK)のClickedイベントが実行されるの
>でしょうか?

親ウィンドウの WM_COMMAND において LParamがコントロールのハンドルの場合、
そのコントロールからの通知メッセージであると考えて良いです。
そのコントロールで「何がされたか」については、WParamの上位16ビットで判別されます。
(これをNotificationCodeといいます。WParamの下位16ビットはコントロールのIDです)

 「親ウィンドウにWM_COMMANDを送ると、ボタンのClickedが起動する」
と理解するよりは、
 「ボタンをマウスでクリックすると、親ウィンドウにWM_COMMANDが送られる」
と理解したほうが良いでしょう。これはWindowsの仕様です。

PBのボタンコントロールで Clickedイベントが起動されるのは、たぶん親ウィンドウ内部の
ウィンドウプロシージャで、そういう作り込みをしているためだと思われます。(PBの仕様?)
リファレンスに載っていたという例題は、この仕様を逆利用しているだけだと思います。

いずれにしろ、PBでは通常 SendMessageを意識しなくても開発できるので、この部分は
あまり悩む必要はありません。(個人的に勉強したいのなら別です)


>例えば、cb_OKに定義したue_clicked(pbm_custom01)というユーザイベントを実行する場合は、
>send関数に対してどのような引数を送ればよいのでしょうか?

pbm_custom01は、WM_USER に相当します。
ボタンに対して WM_USERを送りたいのなら、Send( Handle(cb_ok), 1024, 0, 0 ) で可能です。
ただしPBのプログラミングでは、このような方法は一般的ではありません。
TriggerEvent関数を使うか、または cb_ok.Event ue_Clicked( 引数 ) としたほうが解り易いです。
とくに後者は、任意の引数を定義できるのでより効率的な使い方ができると思います。
(ユーザーイベントの定義では、pbm_xxxは未指定,自分で引数を定義します)

付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows98
DBMS Oracle SQL*Net 2.3
Browser InternetExplorer5.X

Server SoftWare

OS (記載なし)
DBMS Oracle 7.3
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.