Nếu bạn xóa một dòng và sau đó chèn một dòng mới vào TSynMemo làm thế nào để bạn cập nhật các UndoList và RedoList để thay đổi có thể được hoàn tác với SynMemo.Undo?Làm thế nào để bạn cập nhật SynMemo Undo/RedoList khi xóa và chèn một dòng
SynMemo1.BeginUpdate;
iLineIndex := SynMemo1.Lines.IndexOf(SynMemo1.LineText);
SynMemo1.Lines.Delete(iLineIndex);
iStartTag := SourceStyleComboBox1.CurText;
iEndTag := SourceStyleComboBox1.CurText;
System.Insert('/', iEndTag, 2);
iHTML := iStartTag + iElement + iEndTag;
SynMemo1.Lines.Insert(iLineIndex, iHTML);
SynMemo1.EndUpdate;
EDIT tôi đã cố gắng này, nhưng undo và redo không hoạt động một cách chính xác ... những gì tôi có ý nghĩa bởi đây là sau khi hoàn tác các dòng không được khôi phục với những gì nó đã được trước khi hành động.
StartOfBlock.Line := SynMemo1.CaretY;
StartOfBlock.Char := 0;
EndOfBlock.Line := SynMemo1.CaretY;
EndOfBlock.Char := Length(iHTML);
SynMemo1.UndoList.BeginBlock;
SynMemo1.UndoList.AddChange(crInsert, StartOfBlock, EndOfBlock, iHTML, smNormal);
SynMemo1.UndoList.EndBlock;
SynMemo1.RedoList.BeginBlock;
SynMemo1.RedoList.AddChange(crInsert, StartOfBlock, EndOfBlock, iHTML, smNormal);
SynMemo1.RedoList.EndBlock;
Tôi không thể tìm thấy bất kỳ hướng dẫn nào về cách đặt tham số StartOfBlock và EdifOfBlock. Hai "hành động" nên được kết hợp để chỉ có một lần hoàn tác và làm lại cho hành động "kết hợp" - "Chèn và Xóa" với tùy chọn eoGroupUndo = True.
xem 'Editor.UndoList.AddChange()' – ComputerSaysNo
@Dorin: Tôi đã thử AddChange mà không thành công. xem chỉnh sửa của tôi ... – Bill
ouch, sau đó tôi đề nghị xem xét cách nó xử lý các undo/redo nội bộ, tôi khá chắc chắn bạn có thể nhận được một nơi nào đó từ đó – ComputerSaysNo