Verständisproblem Frames im cppWebrowser



  • Hi

    ich versuche gerade folgenden Quellcode von http://www.bytesandmore.de/rad/cpp/snipp/sc08019.php

    zu verstehen:

    //---------------------------------------------------------------------------
    // Durchsuchen der RAD-Seiten:
    //---------------------------------------------------------------------------
    void __fastcall TfrmMain::menuRadPagesSearchClick(TObject *Sender)
    {
      // Zur Sicherheit die Seite annavigieren:
      CppWebBrowser->Navigate(WideString("http://www.bytesandmore.de/rad/"));
      while(!CppWebBrowser->Busy) Application->ProcessMessages();
      while(CppWebBrowser->Busy) Application->ProcessMessages();
    
      if(CppWebBrowser->LocationURL !=
        WideString("http://www.bytesandmore.de/rad/"))
      {
        ShowMessage("Seite http://www.bytesandmore.de/rad/ "
          "konnte nicht geladen werden !");
        return;
      }
    
      // Suchstring eingeben lassen:
      AnsiString slSearchString = InputBox("Suche auf RAD-Pages",
        "Bitte geben Sie den Suchbegriff ein:", "TRegistry");
      if(slSearchString == EmptyStr)
        return;
    
      IHTMLDocument2 *HTMLDocument = NULL;
      LONG ilFramesCount = 0;
    
      // Falls eine Seite geladen:
      if(SUCCEEDED(CppWebBrowser->Document->QueryInterface(
        IID_IHTMLDocument2, (LPVOID*)&HTMLDocument)))
      {
        // ggf. auch Frames-Code extrahieren:
        IHTMLFramesCollection2 *pFrames = NULL;
        if(SUCCEEDED(HTMLDocument->get_frames(&pFrames)))
        {
          // Anzahl der Frames bestimmen:
          pFrames->get_length(&ilFramesCount);
    
          if(ilFramesCount < 2)
            EnterSearchWordsAndSubmit(HTMLDocument, slSearchString,
              "terms", "SearchForm");
          else
          {
            VARIANT vFrame;
            VARIANT ret;
            vFrame.vt = VT_UINT;
            vFrame.lVal = 1;
    
            if(SUCCEEDED(pFrames->item(&vFrame, &ret)))
            {
              // Zeiger auf IHTMLWindow2 des Frames besorgen:
              IHTMLWindow2 *pWindow = NULL;
              if(SUCCEEDED(ret.pdispVal->QueryInterface(IID_IHTMLWindow2,
                (LPVOID*)&pWindow)))
              {
                // Zeiger auf IHTMLDocument2 des Frames besorgen:
                IHTMLDocument2 *pDoc = NULL;
                if(SUCCEEDED(pWindow->get_document(&pDoc)))
                {
                  EnterSearchWordsAndSubmit(pDoc, slSearchString,
                    "terms", "SearchForm");
                  pDoc->Release();
                }
                pWindow->Release();
              }
            }
          }
          pFrames->Release();
        }
        HTMLDocument->Release();
      }
    }
    
    //---------------------------------------------------------------------------
    // Funktion EnterSearchWordsAndSubmit() trägt den im Parameter slSearchString
    // übergebenen Suchbegriff ins Eingabefeld (input) mit dem Namen slInputName
    // des HTML-Formulars slHtmlFormName und startet die Suche.
    //
    // Im Parameter pHTMLDocument wird der Zeiger auf IHTMLDocument2-Interface
    // des zu verwendenden HTMLDocuments übergeben.
    //---------------------------------------------------------------------------
    void EnterSearchWordsAndSubmit(IHTMLDocument2* pHTMLDocument,
      AnsiString slSearchString, AnsiString slInputName, AnsiString slHtmlFormName)
    {
      if(pHTMLDocument != NULL)
      {
        IHTMLElementCollection *pAll = NULL;
        if(SUCCEEDED(pHTMLDocument->get_all(&pAll)) && pAll)
        {
          // Name des Eingabefeldes (sieh HTML source der Seite)
          TVariant vName = slInputName;
          TVariant vIndex = 0;
          IDispatch *pDisp = NULL;
    
          if(SUCCEEDED(pAll->item(vName, vIndex, &pDisp)) && pDisp)
          {
            IHTMLInputElement *pInput = NULL;     // mshtml.h
            if(SUCCEEDED(pDisp->QueryInterface(IID_IHTMLInputElement,
              (LPVOID*)&pInput)) && pInput)
            {
              // String in das Eingabefeld eintragen:
              pInput->put_value(WideString(slSearchString));
              pInput->Release();
            }
            pDisp->Release();
          }
          pAll->Release();
    
          // Formulareingaben abschicken (SUBMIT)
          IHTMLElementCollection *HTMLForms = NULL;
          if(SUCCEEDED(pHTMLDocument->get_forms(&HTMLForms)) && HTMLForms)
          {
            // Name des HTML-Formulars <form name="SearchForm"...>
            vName = slHtmlFormName;
            vIndex = 0;
            if(SUCCEEDED(HTMLForms->item(vName, vIndex, &pDisp)) && pDisp)
            {
              IHTMLFormElement *HTMLForm = NULL;
              if(SUCCEEDED(pDisp->QueryInterface(IID_IHTMLFormElement,
                (LPVOID*)&HTMLForm)) && HTMLForm)
              {
                HTMLForm->submit();
                HTMLForm->Release();
              }
              pDisp->Release();
            }
            HTMLForms->Release();
          }
        }
      }
    }
    

    Aber wo wird da der zu bearbeitende Frame ausgewählt?

    Hiermit?

    [cpp]vFrame.lVal = 1;[cpp]

    Hoffe da kann mir jemand weiterhelfen, weil ich denn Code irgendwie nicht verstehe!



  • dagsta schrieb:

    Hiermit?

    vFrame.lVal = 1;
    

    Genau. 0 entspricht dem ersten Frame, 1 dem zweiten usw.

    Aber hätte das nicht als Nachfrage in deinen anderen Thread zum Thema gepasst?



  • Gibt es den irgentwo eine Dokumentation über diese Funktionen? In der BCB Hilfe findet sich garnichts darüber!


Anmelden zum Antworten