Форум по Delphi программированию



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.11.2021, 00:58
Аватар для Cave
Cave Cave вне форума
Прохожий
 
Регистрация: 03.11.2021
Сообщения: 4
Версия Delphi: Delphi 10
Репутация: 10
По умолчанию 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  
Старый 04.11.2021, 06:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,709
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну не знаю, у меня работает (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)
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2021

ВКонтакте   Facebook   Twitter   Ссылка на Telegram