Wide Studio Programmer's Guide

Wide Studio Home
Up to


オブジェクトにアクセスするには

イベントプロシージャにおいて、 オブジェクトにアクセスすることは、最も基本的な事柄です。 いろいろな場合における、オブジェクトへのアクセス方法を 説明します。
  • プロシージャ関数に渡される引数によるアクセス
    プロシージャ関数に渡される引数によるアクセスは、 イベントプロシージャが貼られているクライアントオブジェクト にアクセスする場合に利用します。
  • オブジェクト管理を利用したアクセス
    イベントプロシージャが貼られているクライアントオブジェクト 以外の他のオブジェクトにアクセスする場合に利用します。
  • 外部変数による直接アクセス
    イベントプロシージャが貼られているクライアントオブジェクト 以外の他のオブジェクトにアクセスする場合に利用します。 イベントプロシージャの移植性が低下します。


プロシージャ関数に渡される引数によるアクセス

イベントプロシージャに渡される引数を利用すると、 イベントプロシージャが貼られているクライアントオブジェクト にアクセスすることができます。
void event_procedure(WSCbase* object){
  //オブジェクトへアクセス
  object->setProperty(WSNlabelString,"HELLO WORLD"); 
}
object ポインタがそのクライアントに対する WSCbase* ポインタです。 WSCbase クラスのAPIを利用できますが、派生クラスのAPIを 利用したい場合は、クラスポインタの取得の節を参照下さい。

オブジェクト管理を利用したアクセス

オブジェクト管理インスタンス(ロードモジュールにつき、一つ存在)に 対して要求すると、アクセスしたいオブジェクトを取得することができます。 外部変数アクセス(下記参照)の場合と異なり、コンパイル時にシンボルのリンクを を伴いません。したがって、画面の構成によらない柔軟なプログラムを 行うことができます。
オブジェクト管理クラス インスタンス取得関数
WSCbaseList WSCbaseList* WSGIappObjectList()

アクセスしたいオブジェクトを取得は、次の様に行います。
#include "WSCbaseList.h" //WSGIappObjectList() にアクセスする...
...
void event_procedure(WSCbase* object){

  //オブジェクト管理による WSCbase ポインタの取得(その1)
  char* class_name = "WSCvlabel"; //ラベルクラス
  char* obj_name   = "newvlab_001";     //newvlab_001 という名称
  WSCbase* obj = WSGIappObjectList()->getInstance(class_name,obj_name);

  //WSCbase* クラスポインタによるラベルに対するアクセス
  obj->setProperty(WSNlabelString,"HELLO WORLD"); 

  //オブジェクト管理による WSCbase ポインタの取得(その2)
  char* class_name2 = "WSCbase";  //どのクラスかを特定しない
  char* obj_name2   = "newvlab_002";     //newvlab_002 という名称
  WSCbase* obj2 = WSGIappObjectList()->getInstance(class_name2,obj_name2);

  //WSCbase* クラスポインタによるラベルに対するアクセス
  obj2->setProperty(WSNlabelString,"HELLO WORLD"); 

obj もしくは obj2 がアクセスしたいオブジェクトです。 クラス名称とオブジェクト名称を 引数にします。もしクラス名を特定したくない場合は、"WSCbase" を 与えてください。この場合はすべてのオブジェクトが検索対象となります。

外部変数による直接アクセス

オブジェクトを外部変数参照定義すると、外部変数としてアクセスできます。 外部変数定義は、アプリケーションビルダ使用t手引、オブジェクト編の [外部変数として可能なオブジェクトとするには]の節を参照下さい。
#include "WSCvlabel.h" //WSCvlabel クラスを直接触るので、インクルード。
...


void event_procedure(WSCbase* object){
  //外部変数の extern 宣言
  extern WSCvlabel* newvlab_001;

  //WSCvlabel* クラスの newvlab_001 に対するアクセス
  newvlab_001->setProperty(WSNlabelString,"HELLO WORLD"); 


Document Release 3.00

For Use with Wide Studio Release 3.00, Summper 2002


Wide Stuido Home | Up to

Copyright(C) T. Hirabayashi, 1999-2002 Last modified: June 10, 2002