CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - CppWebBrowser - obsługa przycisków klawiatury
Strona 1 z 1

CppWebBrowser - obsługa przycisków klawiatury

Nowy postNapisane: czwartek, 30 czerwca 2011, 09:47
przez mckri
Witam.
Być może problem trywialny, ale nie udało mi się to...
Czy wiecie jak można przechwycić naciśnięcie klawisza z klawiatury na komponenecie CppWebBrowser?
Dodam, że mam włączoną obsługe KeyPeview=true i w zdarzeniu FormKeyPress nie dzieje się nic gdy mam fokus na CppWebBrowser.
Przechwycenie zdarzenia naciśnięcia klawisza jest mi potrzebne do scrollowania strony web poprzez klawisze strzałek z klawiatury - tak jak ma to miejsce w zwykłej przeglądarce web.

Re: CppWebBrowser - obsługa przycisków klawiatury

Nowy postNapisane: piątek, 1 lipca 2011, 12:38
przez Cyfrowy Baron
Umieść na formularzu komponent ApplicationEvents1 (TApplicationEvents - zakładka Additional). Zamiast komponentu można stworzyć mapę komunikatów, ale skoro jest komponent to prościej będzie go wykorzystać. Dla ApplicationEvents1 tworzysz zdarzenie OnMessage i umieszczasz w nim taki kod:

KOD cpp:     UKRYJ  
void __fastcall TEdytorMainForm::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{
  if(Msg.message == WM_KEYUP) /* Puszczenie klawisza, czyli najpierw wciśnięty a potem zwolniony */
  {
    if(Msg.wParam == VK_RETURN) /* klawisz ENTER */
    {
     IOleInPlaceActiveObject* pIOIPAO;
     HRESULT hr = WebBrowser1->Document->QueryInterface( IID_IOleInPlaceActiveObject, (void**)&pIOIPAO );

     if(SUCCEEDED(hr))
     {
      pIOIPAO->TranslateAccelerator(&Msg);
      pIOIPAO->Release();
     }
   }
  }
}




mckri napisał(a):Przechwycenie zdarzenia naciśnięcia klawisza jest mi potrzebne do scrollowania strony web poprzez klawisze strzałek z klawiatury - tak jak ma to miejsce w zwykłej przeglądarce web.


U mnie przewijanie strony za pomocą klawiszy kierunkowych działa bez żadnego dodatkowego kodu. Taka funkcja działa zresztą dla wszystkich pasków przewijania w dowolnych obiektach, nie trzeba tego jakoś specjalnie oprogramowywać. Istotne jest tylko by focus był ustawiony na taki obiekt.

Re: CppWebBrowser - obsługa przycisków klawiatury

Nowy postNapisane: piątek, 1 lipca 2011, 13:43
przez mckri
Dziękuję.
Ja korzystam ze środowiska w wersji CG 09 i u mnie CppWebBrowser nie ma obsługi klawiszy strzałek z klawiatury (IE mam w wersji 9). Działa przewijanie strony poprzez PageUp, PageDown, Home, End, Spacja.

Czy wiesz może, jak programowo przenieść fokus na komponent CppWebBrowser z innego komponentu?
Poprzez
Kod: Zaznacz cały
CppWebBrowser1->SetFocus()
nie można tego osiągnać. Chodzi mi o następującą sytuację... Jestem w innej kontrolne, np. Memo. Po naciśnięciu Button, chcę przejść do CppWebBrowser (komponent ma przejąć obsługę danych z klawiatury, czyli np. PageUP, PageDown, itp).

Re: CppWebBrowser - obsługa przycisków klawiatury

Nowy postNapisane: piątek, 1 lipca 2011, 19:20
przez mckri
Z tym ostatnim problemem (przeniesienie fokusa na CppWebBrowser) poradziłem sobie w ten sposób:
KOD cpp:     UKRYJ  
DelphiInterface<IOleObject>OleObject=Browser1->Application;
        if( OleObject )
        {
                DelphiInterface<IOleClientSite>ClientSite;
                OleObject->GetClientSite(&ClientSite);
                RECT r = ClientRect;
                OleObject->DoVerb(OLEIVERB_UIACTIVATE, NULL, ClientSite, 0,Handle, &r);
        }

Re: CppWebBrowser - obsługa przycisków klawiatury

Nowy postNapisane: sobota, 2 lipca 2011, 15:45
przez mckri
U mnie przewijanie strony za pomocą klawiszy kierunkowych działa bez żadnego dodatkowego kodu. Taka funkcja działa zresztą dla wszystkich pasków przewijania w dowolnych obiektach, nie trzeba tego jakoś specjalnie oprogramowywać. Istotne jest tylko by focus był ustawiony na taki obiekt.

Zaciekawiłeś mnie tym...
Jak pisałem wczesniej uzywam Code Gear 2009 i w moim projekcie nie działa obsługa klawiszy strzałek z klawiatury. Jak dam fokus na CppWebBrowser, to (w przypadku nawigacji) działa tylko PageUp, PageDown, spacja, Home, End.
Z tego co zauważyłem, komponent CppWebBrowser i TWebBrowser ma domyślnie włączony widok zgodności - IE ma sterowanie przyciskiem obok paska adresu. Z tego co sprawdziłem środowisko Code Gear nie daje żadnych możliwości wyłączenia tego trybu. Mozna wyłączyć dla własnego programu widok zgodności poprzez odpowiednie ustawienie w rejestrze Windows.
Kod: Zaznacz cały
"HKCU\SOFTWARE\MICROSOFT\INTERNET EXPLORER\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION" /v nazwa_programu.exe /t REG_DWORD  /d 32768 /f

Dzieki temu strony wyświetlane są poprawnie tak jak w IE (z wyłączonym widokiem zgodności), jednak wtedy dla projektu o nazwie (nazwa_programu.exe) przestaje działać scroll.
Pytanie teraz, czy mozna pogodzić jednoczesnie wyświetlanie stron z wyłaczonym widokiem zgodności i scrollowanie?

Re: CppWebBrowser - obsługa przycisków klawiatury

Nowy postNapisane: sobota, 2 lipca 2011, 16:55
przez Cyfrowy Baron
Ja niczego nie modyfikowałem w systemie i nie ustawiałem niczego w samej przeglądarce IE. Kontrolka TCppWebBrowser tak działała mi w środowisku C++Builder 2006 i tak samo działa w środowisku C++Builder 2010. Tylko, że ja na co dzień używam Firefox-a więc nie aktualizowałem IE i wciąż mam ją w wersji 7.

Re: CppWebBrowser - obsługa przycisków klawiatury

Nowy postNapisane: sobota, 2 lipca 2011, 18:33
przez mckri