アンドゥ実装できました……苦労しました。
さて実際のコーディングですが、リドゥと言って、CTRL+Z を再び押す事で「やり直しのやり直し」になるようにしました。簡単にスワップというローテクを使ってるだけです。
バッファにはストリームを使いました。モノがモノなので Text プロパティでも十二分に使えますが、再着色など省ける追加処理を省こうと思ったのな。
procedure TCustomTagEdit.Undo; var Wrk: TMemoryStream; begin FUndoWorking := True; Wrk := TMemoryStream.Create; try Self.SaveToStream( Wrk ); Self.LoadFromStream( FUndoBuffer ); Self.Perform( EM_LINESCROLL, 0, FUndoLine ); Self.SelLength:= FUndoLength; Self.SelStart := FUndoStart; FUndoBuffer.LoadFromStream( Wrk ); finally FLastKeyCtgr := not FLastKeyCtgr; Wrk.Free; FUndoWorking := False; end; end; |