Autor Beitrag
susi_777
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mo 05.02.07 03:20 
Hallo,

wie ich im Forum gelesen habe, besteht keine 100%ig sichere Möglichkeit auf eine existierende Internetverbindung zu prüfen.
Somit habe ich nun folgendes Problem, wenn der Nutzer keine Internetverbindung gestartet hat:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  try
    WebBrowser1.Navigate(lade_url);  // Browser öffnet Seite (Edit1.text
    except
  exit;
  end;


Wie kann ich den Ladevorgang nach 20 Sekunden unterbrechen, wenn die Seite nicht geladen werden konnte?

Schönen Gruß
Susi
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 05.02.07 07:02 
Da die Ausführung von Navigate asynchron geschieht, d.h. es sofort mit den Befehlen weitergeht, die nach dem Befehlsaufruf von Navigate kommen, muss lediglich diese Funktion 20 Selunden warten und dann die Navigation stoppen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  StartTime: Cardinal;
begin
  StartTime := GetTickCount;
  WebBrowser1.Navigate(lade_url);
  while StartTime + 20000 > GetTickCount do
    Application.ProcessMessages;
  WebBrowser1.Stop;

Die elegantere Lösung geht mit einem Timer:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  WebBrowser1.Navigate(lade_url);
  Timer1.Interval := 20000;
  Timer1.Enabled := True;

// In Timer1Timer:
  WebBrowser1.Stop;
  Timer1.Enabled := False;
susi_777 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mo 05.02.07 15:54 
Danke für die schnelle Antwort, aber leider bekomme ich bei beiden Lösungen nach 20 Sekunden eine Zugriffsverletzung.
Mache ich irgendetwas falsch?
Der Aufruf von WebBrowser1.Navigate erfolgt im oncreate der Form (MDIChild), falls es etwas damit zu tun hat.
Ich habe Dein Code aber auch auf einen Button.click gelegt und dort das selbe Ergebnis.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 05.02.07 16:54 
Damit muss es wohl zu tun haben. Bei mir funktioniert der Code, habs gerade getestet. Testweise hab ich die Wartezeit auf 500 ms gesetzt, dann wurde die Navigation abgebrochen. Lasse ichs auf 20 Sekunden, dann wird die Seite geladen.

Wenn du ein Beispielprojekt anhängst, bei dem der Fehler auftritt, kann ich mal nachsehen, wo da der Fehler auftritt.

BTW: Was möchtest du eigentlich machen? Die Seite dem User anzeigen (dafür ist TWebBrowser gut) oder die Seite laden und danach parsen ohne sie dem User anzuzeigen (dafür ist TWebBrowser nicht so gut)?
susi_777 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Di 06.02.07 21:58 
Vielen Dank für das Angebot Dir das Projekt senden zu können.
Während ich eine kleine Demo für Dich nachbauen wollte, ist mir mein Fehler auch prompt bewußt geworden.
Ich hatte im OnDownloadComplete ein try / except-Block vergessen.
Jetzt funktioniert es einwandfrei.

user profile iconjaenicke hat folgendes geschrieben:

BTW: Was möchtest du eigentlich machen? Die Seite dem User anzeigen (dafür ist TWebBrowser gut) oder die Seite laden und danach parsen ohne sie dem User anzuzeigen (dafür ist TWebBrowser nicht so gut)?


Ich möchte den Zeitaufwand für das Eintragen in Webkatalogen ein wenig verkürzen - dafür brauche ich den TWebbrowser.
Danke nochmals für Deine Mühe.
Schönen Gruß
Susi