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