Внешний вид сайта:

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

Когда пользователь щелкает правой кнопкой на управлении 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

Комментарии

Нет комментариев. Ваш будет первым!