Webbrowser Component NewWindow2 in MDI Anwendung



  • Mein Programm, das den MSIE verwendet ist eine MDI-Anwendung, es gibt MDI-Children mit der Webbrowser-Komponente. Die Steuerung/Navigation erfolgt aus dem MDI-Parent heraus auf das jeweilige MDI-Child.
    Das funktioniert auch alles soweit ohne Probleme, bis auf eine Sache:
    Es gibt einige Popup Fenster, die werden im Standalone Internet Explorer hinter dem Hauptfenster geöffnet (ein Beispiel ist das eBay Popup, welches momentan unter http://www.aol.de zusehen ist). Wird so ein Popup geladen, würde ich erwarten, daß das MDI-Child hinter allen anderen MDI-Children gezeichnet wird. Es ist aber leider so, daß die Hauptanwendung hinter alle anderen Windows Anwendungen gesetzt wird, sehr nervig.
    Hier mein Code im NewWindow2 Event:

    void __fastcall TBrowserForm::CppWebBrowser1NewWindow2(TObject *Sender,
          LPDISPATCH *ppDisp, VARIANT_BOOL *Cancel)
    {
      TBrowserForm *newBrowserWindow = new TBrowserForm(this);
      newBrowserWindow->BorderStyle = bsSizeToolWin;
      newBrowserWindow->CppWebBrowser1->RegisterAsBrowser = true;
    
      *ppDisp = newBrowserWindow->CppWebBrowser1->Application;
    
      newBrowserWindow->setMDIParent(mdiParent);
      newBrowserWindow->FormStyle = fsMDIChild;
    
    }
    

    Die Variable mdiParent ist ein void* der mit der Methode

    void TBrowserForm::setMDIParent(void* handle) {
      mdiParent = handle;
    }
    

    im Hauptfenster (MDI-Parent) mit dem Aufruf

    browser->setMDIParent(this->Handle);
    

    gesetzt wird.
    Sobald die Zeile mit *ppDisp ... ausgeführt wird, landet die Hauptanwendung im Hintergrund, und ich habe keine Methode gefunden, das zu verhindern und stattdessen das MDI-Child in den Hintergrund zu setzen, hat da jemand eine Idee?

    Ach, ich hab nochwas: Wenn man Popups mit *Cancel = true verhindert, kommt auf vielen Seiten eine Dialogbox mit der beliebten Javaskript Fehlermeldung ("Auf dieser Seitre ist ein Javaskript-Fehler aufgetreten ..."). Gibt es eine andere Möglichkeit als pauschal den Browser mit CppWebBrowser1->Silent = true stillzulegen, um dieses Fenster nicht zu bekommen, aber anderen Meldungen nicht zu unterdrücken?

    Gruß und schönes Wochenende,
    Marcus


Anmelden zum Antworten