第 24 章 プログラム内での VISIO UNDO マネージャの使用
Visio® エンジンでは、図面の状態を変更するために Visio で実行されたすべてのコマンドを対象に、undo ユニットを作成します。undo ユニットでは、変更箇所が記述されます。ユーザーが不要だと判断した変更内容を undo するために必要なすべての情報が含まれます。
ユーザーがユーザー インターフェースで行った undo 可能なアクションを対象に、Visio のインスタンスは undo ユニットを生成します。undo ユニットは、[標準] ツールバーと [編集] メニューの [元に戻す] リストに表示されます。すべての undo 可能なアクションには、対応するundo ユニットがあります。
ユーザー インターフェースでの undo 可能なアクション一覧
アドオンは、ユーザー インターフェースのアクションとは別のものとして扱われます。
ユーザが [マクロ] のサブメニューからアドオンを実行すると、 図面ページ上に図形をドロップした時と同様に undo 可能なひとつのアクションに見えます。
アドオンのすべての変更内容を一度のアクションで Undoすることができるとユーザは期待するでしょう。そのため、Visio でアドオンを呼び出した場合は、常にアドオンの undo 可能なアクションを undo スコープで 1 つにまとめ、ユーザーには 1 つの undo 可能なアクションとして示します。
undo スコープの作成方法の詳細については、「セクション 2 アドオンでの Undo スコープの作成」を参照してください。
このセクションの内容...
Visio の各インスタンスには 1 つの Undo マネージャがあり、undo スタックと redo スタックを管理しています。[元に戻す] を選択すると、Visio の Undo マネージャでは undo スタックから最後に追加されたundo ユニットを取り出します。undo ユニットではそのアクションを実行し、対応するオブジェクトを redo スタックに作成します。
たとえば、図面ページ上で 3 つのアクションを行うと、Visio の Undo マネージャでは次のような処理を行います。
3 回 undo 可能なアクションを実行した後のundo/redo スタックの状態
ユーザーが [元に戻す] を選択した場合、またはプログラムによって Application オブジェクトの Undo メソッドが呼び出された場合、Undo マネージャでは次のような処理をします。
1 つのアクションが undo された後の undo/redo スタックの状態
通常、アドオンでは複数の undo 可能なアクションを実行します。たとえば、ページ上の各図形の塗りつぶしを青に変更するなどです。この変更が気に入らなくて元に戻したい場合、ユーザーは [元に戻す] を使って図面をアドオン実行前の状態に戻そうとします。
このため、Visio エンジンでは、アドオンが実行した一連のアクションをまとめて 1 つの Undo 可能なアクションにしています。Visio のインスタンスからアドオンが呼び出されるたびに、undo スコープが開始されます。undo スコープは、アドオンが終了すると終わります。このスコープ内のものはすべて、1 つのUndo 可能なアクションとして扱われます。
たとえば、アドオンで 3 つのコマンドを実行すると、アドオン起動後の undo スタックは次のようになります。
アドオンにより 3 つの undo 可能なアクションを実行した後の undo/redo スタックの状態
アドオンで実行した変更に対してユーザーが [元に戻す] を選択すると、[標準] ツールバーの undo リストに 1 つのコマンドが表示され、3 つのアクションが一度に元に戻されます。undo キューは次のようになります。
3 つの undo 可能なアクションを実行するアドオンに対して [元に戻す] を選択した後の undo/redo スタックの状態
ヒント undo 可能なアクションをイベント ハンドラ内で実行する場合には、最初に Application オブジェクトのIsUndoingorRedoing プロパティを確認してください。 undo 可能なアクションを実行できるのは、このフラグが FALSE の時のみです。IsUndoingorRedoing が TRUE を返す場合は、Undo または Redo アクションの結果としてイベント ハンドラが呼び出されています。 この場合、undo 可能なアクションを実行すると、redo スタックが壊れます。