前のトピック     次のトピック

第 24 章 プログラム内での VISIO UNDO マネージャの使用

セクション 1   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 スコープの作成」を参照してください。

このセクションの内容...

Undo/Redo の概要

アドオンでの Visio の Undo マネージャの動作

Undo/Redoの概要

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 スタックの状態

TOP へ

アドオンでのVisio の Undo マネージャの動作

通常、アドオンでは複数の 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 スタックが壊れます。


Top