|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Undo после программной вставки текста
Здравствуйте уважаемые форумчане. Сразу оговорюсь, что я новичок в программировании, чтобы меня не очень забрасывали терминами.
Написал простенький тексовой редактор и вродебы все работает как положено за исключением неполностью функциональной кнопки Undo. Например после вставки текста Memo1.Lines.add(DateToStr(Now)+' : '+TimeToStr(Now)); отмена действия недоступна. До конца не понимаю с чем это связано. Уже много читал о сообщениях SendTextMessage(Memo1.Handle, EM_REPLACESEL, 1, s), но они у меня только копируют текст. Вот такие две процедуры на данный момент Код:
procedure TForm1.UndoActionExecute(Sender: TObject); begin Memo1.Undo; end; procedure TForm1.UndoActionUpdate(Sender: TObject); begin UndoAction.Enabled := Memo1.CanUndo; end; Если не сложно, приведите пожалуйста пример, как исправить ситуацию. Заранее спасибо всем откликнувшимся. Последний раз редактировалось Admin, 03.11.2021 в 18:24. |
#2
|
|||
|
|||
Ну не знаю, у меня работает (Delphi 10.2):
Код:
procedure TForm1.acEditInsertDateTimeExecute(Sender: TObject); var S : String; begin S := FormatDateTime('yyyy-mm-dd hh:nn:ss',Now); SendTextMessage(Memo1.Handle, EM_REPLACESEL, 1, S); end; procedure TForm1.acEditUndoExecute(Sender: TObject); begin Memo1.Undo; end; procedure TForm1.ActionList1Update(Action: TBasicAction; var Handled: Boolean); begin acEditUndo.Enabled := Memo1.CanUndo; end; Если хочется чего-то более навороченного (например, отмену нескольких шагов, отмену после сохранения и т.д.), то придется самому писать. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Cave (04.11.2021)
|