4Dのフォームオブジェクトのプルダウンメニューの実装方法について説明する。ちなみにプルダウンメニューは、ポップアップメニューとかドロップダウンリストとか、ドロップダウンメニュー、ポップアップリスト等々、呼び名にもバリエーションがある。


実装方法といってもたいしたことはないのだが、プルダウンメニューというのは処理系によってちょっと癖があって、久しぶりに実装しようとすると、あれ、どうやるんだっけ、となる。4Dについては、もう何回もこのモードにハマっている。沼である。沼から早く脱出するにはブログにまとめるしかない、と。
また個人的な趣味として、標準的な書き方に統一したいというのがある。コーディングスタイルというやつだ。プログラマならどなたにもお有りだろうと思う。メソッド名や変数名の付け方とか、モジュール化のルール、うちではこのやり方しかやらない、等々。

たとえ仕組みを理解していたとしても、書き方がいつも同じようでないとまずい。次のように実装したい。
1)フォームオンロードのメソッド「_frmDefInit」で値リストを格納する配列変数を宣言する
2)フォームオンロードのメソッド「_popXX_make」で配列を作成、初期値をセット
3)プルダウンメニューにプロセス変数を割り当てて、オブジェクトメソッドに選択されたときの処理を記述
会計ジロウのコードを紹介する。勘定科目でカテゴリーを選択するプルダウンメニュー。フォームのオンロードで、プルダウンメニューオブジェクトをプロセス変数の配列で宣言する。今回は明らかに文字列だが、数値であっても単位を付けたり文字連結したくなったりするので、ここは迷わず文字列の配列にする。→プルダウンメニュー2
//AC06_frmDefInit
//20230627 wat
//ACCOUNT フォーム上のプロセス変数 宣言・初期化
...
// カテゴリーポップアップ
ARRAY TEXT(vAC06_popCategory; 0)
続けて、オンロードで次のAC06_popCategory_makeを実行。
//AC06_popCategory_make
//20230704 wat
// カテゴリーポップアップを作成
C_LONGINT($index)
C_TEXT($category)
DELETE FROM ARRAY(vAC06_popCategory; 1; Size of array(vAC06_popCategory))
APPEND TO ARRAY(vAC06_popCategory; "資産")
APPEND TO ARRAY(vAC06_popCategory; "負債")
APPEND TO ARRAY(vAC06_popCategory; "資本")
APPEND TO ARRAY(vAC06_popCategory; "収益")
APPEND TO ARRAY(vAC06_popCategory; "費用")
vAC06_popCategory:=0
//20171101 wat デオフォルト表示
$category:=AC06_varAC_CATEGORY_get
$index:=Find in array(vAC06_popCategory; $category)
If ($index>0)
vAC06_popCategory:=$index
End if
プルダウンメニュー「vAC06_popCategory」のオブジェクトメソッド。

内容は次のとおり。
//AC06_popCategory
//20230709 wat
//カテゴリー、ポップアップが選択された
C_TEXT($category)
$category:=vAC06_popCategory{vAC06_popCategory}
...
文字列型配列「vAC06_popCategory」には選択されているインデックス値が入っているので、上記のようなコードで選択されている文字列をローカル変数「$category」に取得することができる。ちなみにvAC06_popCategoryに0を代入すると(vAC06_popCategory:=0)、未選択状態になる。
//まとめ:選択行を取得するには、
$index:=vAC06_popCategory
$value:=vAC06_popCategory{vAC06_popCategory}
今回のパターンはプルダウンリストに固定配列の文字列を表示した。次の例ではテーブルの複数の列から持ってきた値を表示する方法について示す。