WideStudio Programming Guide

| WideStudio Programming Guide | WideStudio Index 目次

> ## オブジェクトのプロパティ値を取得/設定するには

> イベントプロシージャにおいて、オブジェクトのプロパティに対してアクセ スすることができます。次のAPIを利用します。

> アクセス関数 | 機能
> getProperty() | プロパティ値の取得
> setProperty() | プロパティ値の設定

> ### プロパティ値の取得

> オブジェクトのプロパティを取得するには、WSCbase クラスのメンバ関数である getProperty() を利用します。

>     void event_procedure(WSCbase* object){

>       //WSNx (X座標)プロパティの値の文字列による取得
>       WSCstring x = object->getProperty(WSNx);
>       printf("x=%s\n",(char*)x);

>       //WSNy (Y座標)プロパティの値の取得
>       short y =  object->getProperty(WSNy);

>     }

> WSNx の例では、文字列で値を取得しています。文字列クラス WSCstring は、 内部で文字列領域の管理を時動的に行うので、プログラマによる管理の心配 はいりません。
> WSNy の例では、数値型で受け取っています。関数 getProperty() は、 WSCvariant 型で値を返しますが、WSCvariant 型は、それぞれの型に自動的 にキャストされます。したがって、型変換をWSCvariant 型が行うので、プ ログラマが気にするころはありません。
> 次の例は、整数型を、文字列型に変換するものを示します。

>     void cbop(WSCbase* object){

>       //WSNx (X座標)プロパティの値の文字列による取得
>       WSCstring x = object->getProperty(WSNx);
>       printf("x=%s\n",(char*)x);

>       //WSNy (Y座標)プロパティの値の取得
>       short y =  object->getProperty(WSNy);

>       //整数型を文字列に変換
>       WSCvariant stry = y;
>       printf("y=%s\n",(char*)stry);
>       //VARIANT 型を浮動小数点型に変換
>       printf("y=%fl\n",(double)stry);
>     }

> プロパティ値を、文字列で取得する場合における注意点ですが、 char* で直接取得する行為はやってはいけません。
> char* 文字列を取得したい場合は、下記の例のように一旦、WSCstring で取 得してから、char* 文字列を取得してください。一旦、WSCstring で受け取 ることで、char* 文字列領域が WSCstring 内に確保され、参照可能となり ます。
> 悪い例のように、直接、char* で取得すると、getProperty が返した WSCvariant が保持されること無く、開放されるため、取得した、char* が すぐに無効となってしまいます。この無効領域となってしまった char* に アクセスすると、メモリフォルトを引き起こします。

>     void event_procedure(WSCbase* object){

>       //WSNlabelString 表示文字列プロパティの文字列による取得
>       //やってはいけない例
>       char* string = object->getProperty(WSNlabelString);

>       //WSNlabelString 表示文字列プロパティの文字列による取得
>       //良い例
>       WSCstring string1
>       string1 = object->getProperty(WSNlabelString);
>       char* str = (char*)string1;

>     }

> ### プロパティ値の設定

> オブジェクトのプロパティを設定するには、WSCbase クラスのメンバ関数である setProperty() を利用します。次の例は、

>     void event_procedure(WSCbase* object){

>       //WSNx (X座標)プロパティの文字列による設定
>       char* x="100";
>       object->setProperty(WSNx,x);

>       //WSNy (Y座標)プロパティの設定
>       short y=100;
>       object->setProperty(WSNy,y);

>     }

> WSNx の例では、文字列で値を設定しています。WSNy の例では、整数型で値 を設定しています。関数 setProperty() は、WSCvariant 型を引数にします。 したがって、いろいろな型を自動的にキャストして、受け付けることができ ます。プログラマは、型を気にせずアクセスできます。

> ### プロパティ値の描画への反映

> 通常、イベントプロシージャの実行直後に反映されますが、変更後、プロパ ティの値を直ちに反映させたい場合、update()、draw()、redraw() を呼び 出します。
> ウィンドウシステムによっては、(例えば、X11 システムの場合など) 描画 を行った際、すぐにウィンドウシステムに反映されない場合があります。そ のような場合は、WSDappDev クラスの update() を呼び出してください。

>     #include <WSDappDev.h>

>     void event_procedure(WSCbase* object){

>       obj1->setProperty(WSNlabelString,"テキスト");
>       obj1->update();  //直ちにオブジェクトを更新。
>       WSGIappDev()->update(); //ウィンドウシステムへの描画要求を反映させます。

>       obj2->setProperty(WSNlabelString,"テキスト");
>       obj2->update();  //直ちに描画される
>       WSGIappDev()->update(); //ウィンドウシステムへの描画要求を反映させます。

Document Release 3.70 for WideStudio ver 3.70, Feb 2004

WideStudio documents index | 目次

Copyright(C) T. Hirabayashi, 2000-2004 | Last modified: Feb 25, 2004