Problem mit verarbeitung von Browserinhalt
-
Hi
ich habe mir nach dem Beispiel von Bytesandmore folgende Methode geschrieben:
bool OControl::sendForm(AnsiString Formname) { unsigned int warte = 500; // Formulareingaben abschicken (SUBMIT) IHTMLElementCollection *HTMLForms = NULL; if(SUCCEEDED(HTMLDocument->get_forms(&HTMLForms)) && HTMLForms) { // Name des HTML-Formulars <form name="SearchForm"...> TVariant vName = Formname; TVariant vIndex = 0; IDispatch *pDisp = NULL; if(SUCCEEDED(HTMLForms->item(vName, vIndex, &pDisp)) && pDisp) { IHTMLFormElement *HTMLForm = NULL; if(SUCCEEDED(pDisp->QueryInterface(IID_IHTMLFormElement, (LPVOID*)&HTMLForm)) && HTMLForm) { Application->ProcessMessages(); HTMLForm->put_action(WideString("www.dagsta.com/index.php")); /*Form1->Timer1->Enabled = true; while(Form1->Timer1->Enabled == true) { Application->ProcessMessages(); }*/ /*HTMLDocument-> Form1->Memo2->Lines->Add(AnsiString(Browser->ReadyState)); while(Browser->Busy) { Application->ProcessMessages(); } Form1->Memo2->Lines->Add(AnsiString(Browser->ReadyState)); */ try { HTMLForm->submit(); } catch(...) { Form1->Memo2->Lines->Add("Abenden des Formulars Fehlgeschlagen"); Sleep(warte); Application->ProcessMessages(); HTMLForm->submit(); HTMLForm->Release(); pDisp->Release(); HTMLForms->Release(); Form1->Timer1->Enabled = true; return false; } HTMLForm->Release(); } pDisp->Release(); } HTMLForms->Release(); } return true; }
Wenn ich sie aus einem Button heraus aufrufe klappt es.
Wenn ich sie aber irgentwoanders im Code verwende bekomme ich einen Zugriffsfehler.
Das komische ist aber, dass wenn ich den Aufruf in ein Timer Ereignisspacke, und den timer dann aktivire, der Fehler nicht auftritt!
Der Fehler kommt in try block!
kann es sein das der mit der ersten Operation noch nicht fertig ist? oder irgentwie sowas?
wie kann ich warten ohne das mein Programm angehalten wird also der code weiter ausgeführt wird. delay klappt bei mir irgentwie nicht ( jemand ein Bsp dazu?)
Oder kann ich den Status des ersten Befehls irgentwie auslesen?
THX
Dagsta
-
Alles schön und gut, aber was für ein Fehler kommt denn?
-
Ein Speicherzugriffsfehler aber keiner vom mshtml.ddl ( <-- Also Browser )
Der kommt nur beim debuggenIch habe es jetzt so gemacht das ich einen timer mit Interwall 1 aktiviere der sich dann wieder deaktiviert und die methode aufruft dann kalppt es ohne Probleme!
Aber so kann ich den rückgabewert nicht prüfen und ich verstehe es einfach nicht!
Das ereigniss aus dem ich die Funktion aufrufe wenn der Fehler passiert, ist vom INDY http server das wenn ein client ein dokument anfragt.
-
Kann es sein das der Ereignisse des IdHTTPServer in einem eigenen Thread läuft? das würde vieleicht das verhalten verständlicher machen!