Способ перенаправить нажатия клавиш из TWebBrowser в ParentForm - PullRequest
2 голосов
/ 27 апреля 2011

Первый вопрос.Помогите отформатировать его, если необходимо, пожалуйста.

Контекст
У меня есть TWebBrowser в основной форме, который используется, чтобы вести себя как принтер.
Поэтому я загружаю в него HTML-текст, когда пользователь выполняет некоторые команды на реальном принтере ...
Я хочу, чтобы пользователь мог щелкать и выбирать текст в веб-браузере.

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

Итак, я подумал: я хочу отправить каждую комбинацию клавишвернуться к форме.
Вопрос в том, как:
Если бы это был другой элемент управления, я мог бы использовать perform(WM_KeyDown,...) в событии OnKeyDown.

Также приветствуются альтернативы или предложения.Я очень устал в последние два дня, поэтому я мог что-то упустить.

Ответы [ 2 ]

4 голосов
/ 27 апреля 2011

Получите TWebBrowser с реализацией IDocHostUIHandler или используйте знаменитый EmbeddedWB

Реализация интерфейса с событием OnTranslateAccelerator, вызываемым TranslateAccelerator

Установите событие в вашем экземпляре brwoser

Определите ваши ключи следующим образом:

function TBrowserPageIE.DoTranslateAccelerator(const lpMsg: PMSG; const pguidCmdGroup: PGUID; const nCmdID: DWORD): HRESULT;
begin
  result := S_FALSE;

  if lpMsg.message = WM_KEYDOWN then begin
    if lpMsg.wParam = VK_F7 then begin
      // do something here...
      result := S_OK;
    end;
  end;
end;
1 голос
/ 03 мая 2011

Опция, которую я протестировал и работал, заключается в том, чтобы перехватить код ключа в HTML / javascript, а затем отправить его в форму, используя изменение заголовка документа.Я позволю это здесь, надеясь, что это поможет кому-то ...

Вам понадобится добавить JavaScript, чтобы перехватывать ключи в заголовке HTML-страницы, например:

<script = ''javascript''>
  function keypresed() {
    var tecla=window.event.keyCode;

    document.title = "Command"+tecla;
    event.keyCode=0;
    event.returnValue=false;
  }
  document.onkeydown=keypresed;
</script>

Затем в Webbrowserвы используете onTitleChangeEvent для использования ключа.

var
 s:string;
begin
  if Copy(Text,0,7) = 'Command' then
  begin
    //get the key...
    s:= Copy(Text,8,Length(Text));

    // if before the webbrowser get the focus edit1 was the focused control, you will need remove that focus first...
    dummy.setfocus; 
    edit1.setfocus;

    //perform keydown
    keybd_event(StrToInt(s), 1,0,0)
  end;
end;

Ну, это может быть использовано для выполнения любой другой пользовательской команды.:)

...