Как запрограммировать undo?

Memo1.Perform(EM_UNDO, 0, 0);

Если Вы хотите узнать, возможно ли выполнить операцию "Undo", проверьте "Undo status":

If Memo1.Perform(EM_CANUNDO, 0, 0) <> 0 then
begin
        {Undo is possible}
end;

Для выполнения "Redo" выполните "Undo" еще раз.