You may use Perform method with EM_UNDO message for undo operation, and you can use EM_CANUNDO message to determine whether an edit operation can be undone.
procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Perform(EM_UNDO, 0, 0); end; procedure TForm1.Edit1Change(Sender: TObject); begin if Edit1.Perform(EM_CANUNDO, 0, 0)<>0 then Button1.Enabled:=True; end;