編集モードの 4D Write Pro のドキュメントがエンドユーザーによって変更されたかどうかを知ることは、しばしば役に立ちます。たとえばこの情報を元に、アクションやインターフェースをより使いやすく調整することができます。
4D v19 R7 以降、ドキュメントの変更を検知するのはこれまで以上に簡単になりました。
HDI: 4D Write Pro: ドキュメントの変更検知
変更されたドキュメント
4D Write Pro ドキュメントは、さまざまな方法で変更することができます:
- コマンドを使ったプログラミングによるもの、あるいは
- エンドユーザ自身によるもの
内容 (テキスト、表、画像などの追加・変更・削除など) や見た目 (スタイル、余白、方向、色など) にかかわらず、変更されたドキュメントは通常、保存する必要があります。
ボタンやメニューで保存できるようにするほか、保存しないまま画面が閉じられそうになった場合には “ドキュメントへの変更を保存しますか” といったメッセージを表示して保存の機会を提供することが望ましいでしょう。
ドキュメントの変更は新しく追加された document.modified 属性を使って簡単に検知することができます。
この属性の原理は簡単です。ドキュメントが作成されたり読み込まれたりすると、この属性の値は False に設定されます。そして、ドキュメントが (プログラミングやユーザー操作によって) 変更されるとすぐに、その値は自動的に True に変更されます。
この属性を使えば、ドキュメントを保存すべきか簡単に判断できますね🙂
- インタフェースを更新する (保存ボタンを有効化する) 場合:
OBJECT SET ENABLED(*; "btnSave";WParea.modified) // true または false
- 保存を確認する場合:
If (Form event code=On Unload)
If (WParea.modified)
CONFIRM("ドキュメントを保存しますか?"; "保存"; "削除")
If (ok=1)
// 必要な処理を書きます
End if
End if
End if
スペースを削除しても、カンマを追加しても、1文字を太字にしたり斜体にしたりしても、document.modified は True になります。変更を元に戻した場合でも、document.modified は True のままです。
document.modified の値は、プログラミングで強制的に変更することも可能です。たとえば、ドキュメントが保存された後に、この属性の値を変更することができます。
If (WParea.modified)
// ドキュメントの保存
// (…)
// ステータスを false に変更します
WParea.modified:=False // ドキュメントが次に変更されるまで false のままです
End if
ドキュメントが変更されない場合
ビュープロパティに関するアクションは、ドキュメントの内容を実際に変更することなく、ドキュメントの外観のみを変更します。
たとえば、ズーム倍率の変更、水平・垂直ルーラーや、非表示文字、数式、ヘッダー/フッターの表示/非表示などが可能です。これらはいずれも保存されません。つまり、ドキュメントは変更されず、.modified 属性は False のままです。
この新しい属性の詳細については、ドキュメントを参照ください。
結論
この新しく分かりやすいプロパティはドキュメントの変更を素早く検知してくれるため、それに応じてアクションを実行できます。透過的に対応するほか (たとえば、開かれているドキュメントを自動保存する)、状況に応じてインターフェースを適切に変更することができます!