アプリケーションにユーザーが変更する可能性があるオプションや選択肢がある場合は、記録して一度だけ変更する必要があるか確認します。
同様に、ユーザーがアプリケーションを起動したときに、最後にアプリケーションを使用したときに操作したものと同じデータで操作を続行する必要がある場合があります。これを簡単に実現するために、最後に終了したときに表示されていたデータでアプリケーションを起動する必要があります。
Windowsリポジトリに設定を保存
フォームの情報をレジストリに保存し、後に取得するには、Changeコマンドと、特別に記憶されている以下の値のいずれかを使用します。
*remembered_value_for_user |
特定のユーザーが最後にこのフォームを実行したときのフィールドの値を返します。 |
*remembered_value_for_user_in_system |
特定のユーザーが最後に任意のフォームまたはこのフィールドを含むファンクションを実行したときのフィールドの値を返します。 |
*remembered_value_for_function |
最後にこのフォームが実行されたときのフィールドの値を返します。 |
*remembered_value_for_system |
最後にフィールドを含む任意のフォームまたはファンクションが実行されたときのフィールドの値を返します。 |
Changeコマンドをこれらの値の1つではじめて実行するときに、対象のフィールドの最後の値のレジストリ・エントリーが作成されます。
注:これらの値はWebインターフェースでは利用できません。セキュリティ上の理由により、Webインターフェースからはレジストリ設定にアクセスできないからです。
例
サンプル・アプリケーションを使用し、従業員番号に基づいて従業員の名前を取得します。
アプリケーションが起動すると、アプリケーションが最後に終了されたときに表示されていた従業員が表示されます。値はこのコードを使用して取得されます。
EVTROUTINE handling(#com_owner.Initialize)
CHANGE FIELD(#EMPNO #GIVENAME #SURNAME) TO(*remembered_value_for_function)
ENDROUTINE
フォームのサイズと位置の記憶
これと同じ方法を使用してフォームの位置とサイズを記憶することができますが、最初に情報を保存するフィールドを作成する必要があります。
Define #top *dec 7 0
Define #left *dec 7 0
Define #width *dec 7 0
Define #height *dec 7 0
それからこれらのフィールドの最後の値を取得し、Initializeイベントでフォームの適切なプロパティに割り当てる必要があります。
EVTROUTINE handling(#com_owner.Initialize)
CHANGE FIELD(#top #left #width #height) TO(*remembered_value_for_function)
Set #com_owner top(#top) left(#left) width(#width) height(#height)
ENDROUTINE
アプリケーションが終了したときにこれらの4つのプロパティの現在の値をフィールドに保存するには、以下のように指定する必要があります。
EVTROUTINE handling(#com_owner.closing)
Change #top #com_owner.top
Change #left #com_owner.left
Change #width #com_owner.width
Change #height #com_owner.height
Endroutine
コードの簡略化
アプリケーションで記憶するすべてのフィールドをグループ化してコードを簡略化できます。例えばそのグループを#Rememberと呼ぶことができるでしょう。
group_by name(#remember) fields(#top #left #width #height #empno #givename #surname)
そしてこの行を追加してフォームのイベントを初期化するだけです。
Change #remember *remembered_value_for_user
すべてのフォームの記憶
STD_FORMコンポーネントの設定を記憶するために必要なコードを追加し、新しいフォームを作成するたびに使用する場合があります。詳細は「デフォルトのコンポーネントの動作の変更」を参照してください。