ロードされていないフォームのオブジェクトの属性を取得するには?

あるフォームのオブジェクトの色を取得しようとした。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
%d人のブロガーが「いいね」をつけました。