あるフォームのオブジェクトの色を取得しようとした。OBJECT GET RGB COLORを使ったら、フォームがロードされていないとエラーになった。
ロードされていないフォームのオブジェクトにアクセスするには、次のようにして一時的にロード・アンロードする。
FORM LOAD($tblPtr->; $form_name)
OBJECT GET RGB COLORS(*; $rec_name; $color)
FORM UNLOAD
これで取得できた。だが、
そもそもフォームが存在していなければオブジェクトを取得しようもない。
フォームが存在するかの判定
フォームが存在するかの判定は次のように「FORM GET NAMES」を使った。複数のフォーム名が配列で返ってくるので、問題のフォーム名が配列にあるかを検索すれば良い。このコマンドを使うのにフォームをロードする必要はない。
C_POINTER($1; $tblPtr)
$tblPtr:=$1
C_TEXT($2; $form_name)
$form_name:=$2
C_BOOLEAN($0; $exist)
$exist:=False
ARRAY TEXT($arynames; 0)
C_LONGINT($index)
FORM GET NAMES($tblPtr->; $arynames)
$index:=Find in array($arynames; $form_name)
If ($index#-1)
$exist:=True
End if
この関数はJCL4Dに追加することにした。メソッド名は「JCL_frm_isExist」。このメソッドを使った結果、上記のメソッドは次のようになる。
$isExist:=JCL_frm_isExist($tblPtr;$form_name)
If ($isExist=True)
FORM LOAD($tblPtr->; $form_name)
OBJECT GET RGB COLORS(*; $rec_name; $color)
FORM UNLOAD
End if