Undo機能をつけるには?

解決


Brock  2002-07-27 00:52:47  No: 1174

エディターを作製していて、それにUndo機能を付けたいのです。
50個くらいを記憶したいのですが、
実際に作って見ると、処理速度がかなり遅いです  TT
Undoの基本的なアルゴリズムなどを知っていたら教えてください。
よろしくお願いします。


にしの  2002-07-27 02:34:55  No: 1175

標準のMemoなどにつけるとなると、かなりきついかもしれません。

たとえば、TUndoListという、双方向リストを作ります。
その中に、Undoに最低限必要な情報を登録します。
たとえば次のようなもの
・1文字入力
・1文字削除
・N文字入力(貼り付け)
・N文字削除
・キャレット移動
双方向にしておいて、操作情報が入ったら、データを格納、その後ろを削除します。
Undoされたら、1つ前の処理段階に戻し、リストポジションも1つ戻します。
# この段階では現在のポジションより後ろを削除しません
Redoされたら、1つ先の処理段階に進み、リストポジションも1つ先に進めます。


Brock  2002-07-27 08:22:31  No: 1176

大体の流れは分かりました。
ちょっと質問なのですが、
>・N文字入力(貼り付け)
>・N文字削除
という部分は、やはり前のと文の比較を行って、
その差分を記憶/削除すると言うほうがいいのでしょうか?


にしの  2002-07-27 18:26:16  No: 1177

だいたいですが、
・動作(貼り付け)
・貼り付け開始位置
・貼り付け対象文字列&長さ
・動作後位置

・動作(削除)
・動作前位置
・削除対象文字列&長さ
・動作後位置

がわかれば問題ないと思います。
Undoするときは、
貼り付けの場合
・貼り付け開始位置から、貼り付け対象文字列の長さ分削除
・貼り付け開始位置に移動

削除の場合
・動作後位置に、削除対象文字列を挿入
・動作前位置に移動

というようにします。


Brock  2002-07-28 01:24:18  No: 1178

ありがとうございます
大変参考になりました。
何とかなりそうなのでやってみますね。
また次もよろしくお願いします  ^^


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加