[bugreport]Richmemo и CutToClipboard, CopyToClipboard fail

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

Модератор: Модераторы

[bugreport]Richmemo и CutToClipboard, CopyToClipboard fail

Сообщение forlazarus » 08.12.2025 11:29:40

Здравствуйте, на форме есть:

RichMemo:TRichmemo;
Memo: TMemo;
SynEdit:TSynEdit;

Ничего не происходит, если выделить текст и обработать нажатие пункта меню так:
Код: Выделить всё
RichMemo.CutToClipboard;

Однако, это работает, выделенный текст вырезается в буфер, если то же сделать для Memo или SynEdit:
Код: Выделить всё
Memo.CutToClipboard;


Также если на форму положить TActionList и добавить новые стандартные действия EditCut1, EditCopy1 и выбрать эти действия в пунктах меню, то команды Вырезать, Копировать будут работать только для Memo, SynEdit, но не будут работать для RichMemo.

В linux mint, lazarus 4.4.0, сборка проекта для gtk2 и qt6.
Последний раз редактировалось forlazarus 08.12.2025 14:27:53, всего редактировалось 1 раз.
forlazarus
новенький
 
Сообщения: 14
Зарегистрирован: 28.10.2021 11:29:33

Re: [bugreport]Richmemo и CutToClipboard, CopyToClipboard fa

Сообщение Alex2013 » 08.12.2025 13:48:41

В порядке части "мозгового штурма" : почему бы не пойти "другим путем" и просто эмулировать нажатие "Ctrl+C" и "Ctrl+V" (и если нужно "Ctrl+A")? :idea: (есть модуль mouseandkeyinput который достаточно подключить и можно писать что-то такое )
Код: Выделить всё
procedure TForm1.MyCopy;
begin
  Edit1.SetFocus;
  Application.ProcessMessages;
  KeyInput.Press(VK_CtrlA);
  KeyInput.Press(VK_CtrlC);
end;
Alex2013
долгожитель
 
Сообщения: 3203
Зарегистрирован: 03.04.2013 11:59:44

Re: [bugreport]Richmemo и CutToClipboard, CopyToClipboard fa

Сообщение Sharfik » 08.12.2025 14:36:09

Ничего не происходит или полный буфер становится пустым? Стоит поискать функции в компоненте, которые выделяют область текста для копирования. Может ему надо выделить что копировать.
Вариант два - запуск без отладчика программы.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 833
Зарегистрирован: 20.07.2013 01:04:30

Re: [bugreport]Richmemo и CutToClipboard, CopyToClipboard fa

Сообщение forlazarus » 08.12.2025 15:10:02

Alex2013 писал(а):почему бы не пойти "другим путем" и просто эмулировать нажатие "Ctrl+C" и "Ctrl+V" (и если нужно "Ctrl+A")? :idea: (есть модуль mouseandkeyinput который достаточно подключить и можно писать что-то такое

Спасибо за идею!
1. Нашёл lazmouseandkeyinput.lpk, использовал, подключил модуль mouseandkeyinput в uses.
2. Код получился рабочий для всех текстовых перечисленных компонентов, в т.ч. для Richmemo. В обработчике щелчка вот (для вырезать):
Код: Выделить всё
KeyInput.Apply([ssCtrl]);
KeyInput.Press('X');
KeyInput.Unapply([ssCtrl]); 


Добавлено спустя 8 минут 20 секунд:
Sharfik писал(а):Ничего не происходит или полный буфер становится пустым?

Буфер содержал прошлые строки. Не те, что копировались в момент щелчка.
И вырезание в Richmemo не работало совсем. Выделение строки оставалось как есть нетронутым.
forlazarus
новенький
 
Сообщения: 14
Зарегистрирован: 28.10.2021 11:29:33

Re: [bugreport]Richmemo и CutToClipboard, CopyToClipboard fa

Сообщение Sharfik » 09.12.2025 13:44:04

есть такой модуль clipbrd для работы с буфером обмена. И не надо делать никаких эмуляций нажатий.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 833
Зарегистрирован: 20.07.2013 01:04:30

Re: [bugreport]Richmemo и CutToClipboard, CopyToClipboard fa

Сообщение forlazarus » 10.12.2025 06:09:24

Спешу сообщить, что можно закомментировать в unit RichMemo метод CutToClipboard:
Код: Выделить всё
//procedure CutToClipboard; override;

И ниже
Код: Выделить всё
(*
procedure TCustomRichMemo.CutToClipboard;
begin
if HandleAllocated then
   TWSCustomRichMemoClass(WidgetSetClass).CutToClipboard(Self);
end;
*)

Тогда в программе в команде Richmemo.CutToClipboard будет вызываться метод CutToClipboard из StdCtrls, а не из RichMemo.
Строка вырезается в буфер.

Кроме того, теперь работает стандартное действие EditCut1 из ActionList при щелчке в меню и для RichMemo.
forlazarus
новенький
 
Сообщения: 14
Зарегистрирован: 28.10.2021 11:29:33


Вернуться в Сторонние средства

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1