TPopupMenu с просмотрщиком PDF, чтобы щелчок правой кнопкой на странице открывал контекстное менюproperty PopupMenu: TPopupMenu; // published, inherited from TControl
Присваивание PopupMenu привязывает вьювер к компоненту TPopupMenu, лежащему на той же форме. Когда пользователь щёлкает правой кнопкой (или жмёт клавишу меню) внутри вьювера, VCL/LCL автоматически показывает меню в позиции курсора — приложению не нужно самому обрабатывать WM_CONTEXTMENU
Типичное контекстное меню PDF-ридера предлагает пункты вроде Копировать выделенный текст, Приблизить, Отдалить, По ширине, Повернуть, Перейти к странице…, Найти… и Сохранить как… Пункты меню обычно читают или пишут публичные свойства вроде CurrentCharIndex, Zoom, FitMode, Rotation и PageNumber, чтобы воздействовать на документ
Поскольку popup показывается через механизм OnContextPopup, можно динамически подавить или подменить его, обрабатывая OnContextPopup и ставя Handled := True — удобно, когда правый клик пришёлся на поле формы или аннотацию со своим меню
TPopupMenu хранится в файле формы как ссылка на компонентAllowUserTextSelection равно FalseTPopupMenu.OnPopup и проверьте состояние вьювера вроде CurrentCharIndex или Pdf.Active
// Attach a context menu offering Copy / Fit Width / Go to Page
procedure TForm1.FormCreate(Sender: TObject);
begin
PdfView1.PopupMenu := pmReader;
end;
procedure TForm1.miFitWidthClick(Sender: TObject);
begin
PdfView1.FitMode := pfmFitToWidth;
end;
procedure TForm1.miGoToPageClick(Sender: TObject);
var S: string;
begin
S := IntToStr(PdfView1.PageNumber);
if InputQuery('Go to page', 'Page number:', S) then
PdfView1.PageNumber := StrToIntDef(S, PdfView1.PageNumber);
end;