Карта сайтаСсылкиКонтакты

Хостинг


Добавление стандартного контекстного меню в TRichEdit

PDF Печать
Статьи

Когда пользователь щелкает правой кнопкой на управлении Edit (или на другом компоненте, который позволяет редактирование, типа TMaskEdit, TMemo, TDBEdit и т.д.) во время выполнения, появляется контекстное меню по умолчанию с опциями редактирования, вставки и т.д.

Чтобы осуществить всплывающее меню по умолчанию в TRichEdit, Вы должны вручную создать TPopupMenu и назначить свойство PopupMenu управления TRichEdit на него.

Для этого нужно сделать следующее:

  • Поместите компонент TPopupMenu (richEditContextMen на форму (Form1) и управление TRichEdit (richEdit1) или несколько RichEdit компонентов
  • Добавьте пункты меню, которые отображаются в стандартном управлении редактирования, типа TEdit (itemUnd, itemCut, itemCopy, itemPaste, itemSelect, itemSelectAll)
  • Обработайте событие OnPopup всплывающего меню для отключения/включения отдельных пунктов меню в зависимости от состояния управления RichEdit и существования любых текстовых данных в Clipboard
  • Назначьте свойство PopupMenu на всплывающее меню
  • Обработайте каждое событие OnClick для каждого пункта меню

Чтобы включать/отключать отдельные пункты контекстного меню, обработайте событие OnPopup:


procedure TForm1.richEditContextMenuPopup(Sender: TObject) ;
var
  re : TRichEdit;
begin
  re := GetRichEditFromPopup;

  itemUndo.Enabled := re.CanUndo;
  itemCut.Enabled := re.SelText <> '';
  itemCopy.Enabled := re.SelText <> '';
  itemDelete.Enabled := re.SelText <> '';
  itemPaste.Enabled := Clipboard.HasFormat(CF_TEXT) ;
end;

Функция GetRichEditFromPopup возвращает управление TRichEdit, которое отображает контекстное меню в настоящее время:


function TForm1.GetRichEditFromPopup: TRichEdit;
begin
  // нужно добавить некоторую проверку 
  // (if richEditContextMenu.PopupComponent is TRichEdit)
  result := TRichEdit(richEditContextMenu.PopupComponent) ;
end;

Осуществляем действия каждого пункта меню:

Undo - отменяет все изменения из буфера


procedure TForm1.itemUndoClick(Sender: TObject) ;
begin
  GetRichEditFromPopup.Undo;
end;

Cut - копирует выделенный текст в буфер обмена в формате CF_TEXT, а затем удаляет выделенное


procedure TForm1.itemCutClick(Sender: TObject) ;
begin
  GetRichEditFromPopup.CutToClipboard;
end;

Copy - копирует выделенный текст в буфер обмена в формате CF_TEXT


procedure TForm1.itemCopyClick(Sender: TObject) ;
begin
  GetRichEditFromPopup.CopyToClipboard;
end;

Paste - втсавляет содержимое буфера обмена в управление редактирования, заменяя текущее выделение


procedure TForm1.itemPasteClick(Sender: TObject) ;
begin
  GetRichEditFromPopup.PasteFromClipboard;
end;

Delete - удаляет выделенный текст из управления редактирования


procedure TForm1.itemDeleteClick(Sender: TObject) ;
begin
  GetRichEditFromPopup.ClearSelection;
end;

SelectAll - выделяет весь текст в управлении редактирования


procedure TForm1.itemSelectAllClick(Sender: TObject) ;
begin
  GetRichEditFromPopup.SelectAll;
end;

Вот и все. Теперь Ваши приложения Delphi с управлением TRichEdit будет отображать контекстное меню, когда Вы будете щелкать правой кнопкой мыши на нем.

Обратите внимание: операции копирования и вставки поддерживают форматированный текст RTF.

Автор: Zarko Gajic


 

Комментарии   

 
+1 #1 Человек 08.02.2016 15:56
Автор красава) просто и сердито)
Цитировать
 

Добавить комментарий


Защитный код
Обновить