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!