Ну это чето уж совсем. UndoStack.Undo или UndoStack.Redo - там внутри и флажки и движение по стеку...
>>Можно, конечно, коллекцию (стек) нагрузить знаниями о том, что там хранятся операции и что их нельзя отдавать,
Это реализация логики undo\redo, а не "нагруженная" коллекция. Коллекция гдето отдельно или внутри - по вкусу. Не знаю что тут напряжного)) имхо гораздо напряжней возиться с операциями и вызывая perform думать что же там на этот раз бог пошлет - унду или реду))
Кстати кроме UndoStack.Undo и UndoStack.Redo мне еще понадобились
- Код: Выделить всё
UndoStack.StartCommand(CommandName:string);//для "обрамления" группы "операций" (с возможностью вложенности) которые должны отменяться\применяться единовременно. С комментарием видя который пользователь понимает что конкретно отменилось\приминилось
UndoStack.EndCommand;//конец обрамления
UndoStack.PushStone;//Пихнуть в стек "маячек" что дальше ундо делать нельзя, пока не закроется "обрамление". после закрытия обрамления эти "маячки" ненужны и из стека выкидываются