Добавление стандартного контекстного меню в 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
Комментарии