Как скопировать и вставить из объекта THtmlViewer?

#delphi #contextmenu #clipboard-interaction

#delphi #contextmenu #взаимодействие с буфером обмена

Вопрос:

На данный момент у меня есть следующий хак:

 procedure TForm1.HTMLViewer1KeyDown(Sender: TObject; var Key: Word;
    Shift: TShiftState);
begin
    if (Key = Word('C')) and (Shift = [ssCtrl]) then
        HTMLViewer1.CopyToClipboard;
end;
  

Есть ли более разумный / поддерживаемый способ включить копирование из htmlviewer? Я надеюсь, что есть свойство, которое я могу установить, или что-то в этом роде, потому что необходимость делать вышеупомянутое кажется глупой. Потомки TCustomEdit по умолчанию копируют, вставляют и выделяют все, но htmlviewer по какой-то причине, похоже, не реализован таким образом.

Другая проблема заключается в том, что вышеупомянутый метод также не учитывает щелчок правой кнопкой мыши и выбор «копировать»

РЕДАКТИРОВАТЬ: В конце концов, я решил заменить приведенный выше код соответствующим контекстным меню, согласно этому руководству:http://delphi.about.com/od/tmemotrichedit/a/richedit-popup.htm

Комментарии:

1. Что такое THTMLViewer? Это не один из стандартных компонентов VCL (по крайней мере, не в DelphiXE Professional или D2007 Pro). Неважно — это один из компонентов PBear — оставляя комментарий для просмотра другим.)

2. Два предложения: Во-первых, не называйте вещи, которые люди были достаточно любезны написать, а затем разрешать вам использовать бесплатно, «глупыми» — вы всегда можете написать свои собственные и сделать это «умным». Во-вторых, вы смотрели на исходный код? Происходит ли THTMLViewer от TCustomEdit? Если это так, вы можете сами создать потомок и опубликовать все, что необходимо; если нет, сравнения с возможностями TCustomEdit не имеют смысла.

3. Спасибо за ответ. Я посмотрел исходный код, и он еще не реализует это, и я подумал, что он должен работать так же, как веб-браузер, в некоторой степени, но я думаю, что нет. Мне не нравится изобретать велосипед, но я сделал это сейчас. Насколько я понимаю, Delphi был создан для взлома, поэтому я оставлю его как есть.

4. @Warren, Ctrl C — такое же стандартное сочетание клавиш, как Ctrl Insert, если не больше. В документации Microsoft по этому вопросу даже не упоминается ключ Insert.

5. Можете ли вы ответить на свой собственный вопрос таким образом, чтобы это помогло другим? Если вы это сделаете, вы можете выбрать свой ответ в качестве правильного. Это может показаться странным, но это предпочтительный способ решения подобных ситуаций.

Ответ №1:

Вы могли бы что-то сделать, когда пользователь нажимает Ctrl-C (т.Е. используйте свое собственное решение # 1)

 procedure TForm1.HTMLViewer1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Key = Word('C')) and (Shift = [ssCtrl]) then
    HTMLViewer1.CopyToClipboard;
end;
  

или вы могли бы реализовать всплывающее меню, как описано здесь (т. Е. ваше собственное решение # 2)

Добавьте стандартное контекстное (всплывающее) меню в TRichEdit Delphi

Комментарии:

1. ps вариант 2 намного лучше, особенно с точки зрения обслуживания. Спасибо