CppWebbrowser - Enter-Taste funktioniert nicht



  • Probierts aus, man kann Enter nicht benutzen, und das liegt nicht an mir.
    So ists kaum möglich damit etwas zu schreiben etc., wie aktiviert man sie

    [ Dieser Beitrag wurde am 31.12.2002 um 02:49 Uhr von Jansen editiert. ]



  • Du musst dafür einen eigenen Messagehandler erstellen:

    // in .h, unter private:
      void __fastcall ReturnMsgHandler(tagMSG &Msg, bool &Handled);
      IOleInPlaceActiveObject *OleInPlaceActiveObject;
    
    // in .cpp
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
      : TForm(Owner)
    {
      Application->OnMessage = ReturnMsgHandler;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ReturnMsgHandler(tagMSG &Msg, bool &Handled)
    {
      if (CppWebBrowser1 && (!CppWebBrowser1->Busy) &&
         (Msg.message == WM_KEYDOWN || Msg.message == WM_KEYUP) &&
         (Msg.wParam == VK_RETURN || Msg.wParam == VK_EXECUTE))
      {
        Handled = IsDialogMessage(CppWebBrowser1->Handle, &Msg);
        if (Handled)
        {
          if (!OleInPlaceActiveObject)
          {
            CppWebBrowser1->Application->QueryInterface(
                IID_IOleInPlaceActiveObject, (void **)&OleInPlaceActiveObject);
          }
          if (OleInPlaceActiveObject)
            OleInPlaceActiveObject->TranslateAccelerator(&Msg);
        }
      }
      else
        Handled = false;
    }
    //---------------------------------------------------------------------------
    

    Bei Verwendung mehrerer CppWebBrowser-Instanzen muss nach dem Ausführen von TranslateAccelerator das OleInPlaceActiveObject wieder auf NULL gesetzt werden, damit es beim nächsten Aufruf für die gewünschte CPPWB-Instanz neu erzeugt wird. Ansonsten würde QueryInterface nachfolgend immer übersprungen werden und OleInPlaceActiveObject ständig auf dieselbe (erste) CPPWB-Instanz zeigen.


Anmelden zum Antworten