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

CppWebBrowser - obsługa przycisków klawiatury

problemy z tworzeniem programów do obsługi sieci, internetu, e-mail itp..

CppWebBrowser - obsługa przycisków klawiatury

Nowy postprzez mckri » czwartek, 30 czerwca 2011, 09:47

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.
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
Podziękował : 10
Otrzymał podziękowań: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    Windows VistaOpera

Re: CppWebBrowser - obsługa przycisków klawiatury

Nowy postprzez Cyfrowy Baron » piątek, 1 lipca 2011, 12:38

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: CppWebBrowser - obsługa przycisków klawiatury

Nowy postprzez mckri » piątek, 1 lipca 2011, 13:43

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).
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
Podziękował : 10
Otrzymał podziękowań: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    Windows VistaOpera

Re: CppWebBrowser - obsługa przycisków klawiatury

Nowy postprzez mckri » piątek, 1 lipca 2011, 19:20

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);
        }
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
Podziękował : 10
Otrzymał podziękowań: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    Windows VistaOpera

Re: CppWebBrowser - obsługa przycisków klawiatury

Nowy postprzez mckri » sobota, 2 lipca 2011, 15:45

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?
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
Podziękował : 10
Otrzymał podziękowań: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    Windows VistaOpera

Re: CppWebBrowser - obsługa przycisków klawiatury

Nowy postprzez Cyfrowy Baron » sobota, 2 lipca 2011, 16:55

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: CppWebBrowser - obsługa przycisków klawiatury

Nowy postprzez mckri » sobota, 2 lipca 2011, 18:33

Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
Podziękował : 10
Otrzymał podziękowań: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    Windows VistaOpera


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje sieciowe

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości

cron