掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
アンドゥを何回かするには? (ID:74486)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Changeイベントでは変更されているので、遅い気がしますが・・・。 追加したものを復帰させるのは 開始位置と終了位置さえわかればできますよね。 削除したものを復帰させるには、 削除された位置とその削除内容が必要ですね。 現在のテキスト先頭からテキスト削除開始位置までのテキストと 削除されたテキストと 現在のテキスト末尾から削除終了位置までのテキストを 結合すれば、削除が復元できますよね。 一番大変なのは、テキストの変更内容を取得することだと思います。 案として、現在のキャレット位置と総文字列長を常に保持。 Changeイベントで文字数を比較しすれば追加、削除、置換の いずれの処理であるかが判別できますよね。 追加なら、キャレット位置の保持だけでいいし、削除なら 変更前のセル位置と現在のセル位置から変更領域を算出し その上で、変更前のテキストから 変更された文字列を取得すれば良いでしょう。 まったく同じ文字数分置換された時のことも考えて やはり、直前のセル範囲を保持しておく必要もあるのでしょうか。 Changeイベントでは選択範囲は消えるので 保持するタイミングとしては遅いですが・・・。 ちなみに、ランレングスとは、圧縮方法の1つで 同じ並びのデータをまとめる方法です。 0101010101 →0105(01が5個ある) うまくやれば、それなりの圧縮率はあるのかな、と。 復元も簡単だし。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.