AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi twebbrowser will einfach nicht warten
Thema durchsuchen
Ansicht
Themen-Optionen

twebbrowser will einfach nicht warten

Ein Thema von pillepalle · begonnen am 29. Jun 2007 · letzter Beitrag vom 29. Jun 2007
Antwort Antwort
pillepalle

Registriert seit: 19. Jun 2007
19 Beiträge
 
#1

twebbrowser will einfach nicht warten

  Alt 29. Jun 2007, 12:35
ich benutze derzeit folgende procedure:

Delphi-Quellcode:
procedure TseotoboForm.Wait(WebBrowser1: TWebBrowser);
begin
while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
begin
  Application.ProcessMessages;
  delay(50);
end;
end;
die hab ich hier vom forum aufgeschnappt

leider will twebbrowser einfach nicht warten, mir fällt es generell auf wenn ich ein formular per submit losschicke und durch eine langsame verbindung zum server der webbrowser versucht das nächste formular auszufüllen, welches dann natürlich noch nicht vorhanden ist

gibt es eine 100%ige lösung dafür das twebbrowser nur dann weitermachen wenn _alles_ geladen ist?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: twebbrowser will einfach nicht warten

  Alt 29. Jun 2007, 13:41
Herzlich willkommen in der Delphi-PRAXiS, pillepalle.

Die Prozedur ist auf den ersten Blick nicht schlecht, aber hat auf den zweiten Blick einen Mangel: Wird sie direkt nach dem WebBrowser.Navigate() aufgerufen und wurde der WebBrowser bereits einmal initialisiert, dann dürfte ReadyState beim Eintritt in die Prozedur immernoch auf 'Complete' stehen.

Besser als dieses Busy-Waiting ist das Arbeiten mit den vorgesehenen Ereignissen OnBeforeNavigate2() und OnDocumentComplete(). Auch dazu findest du in der DP reichlich Quellcode-Beispiele.

Delphi-Quellcode:
type
  TWebForm = class(TForm)
  // ...
  private
    DocumentWait: IDispatch;
    procedure ProcessDocument(document: IHTMLDocument2);
  end;

// ...
 
procedure TWebForm.WebBrowserBeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  DocumentWait := pDisp;
end;

procedure TWebForm.WebBrowserDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  if DocumentWait = pDisp then
    with pDisp as IWebBrowser2 do
      ProcessDocument(Document as IHTMLDocument2);
end;

procedure TWebForm.ProcessDocument(document: IHTMLDocument2);
begin
  ShowMessage(document.title);
end;
Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
pillepalle

Registriert seit: 19. Jun 2007
19 Beiträge
 
#3

Re: twebbrowser will einfach nicht warten

  Alt 29. Jun 2007, 15:45
funktioniert super, danke für deinen support, echt spitze!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz