Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Schleife abbrechen, wenn eine gewisse Website angezeigt wird (https://www.delphipraxis.net/107933-schleife-abbrechen-wenn-eine-gewisse-website-angezeigt-wird.html)

Maxisoft2 4. Feb 2008 22:28


Schleife abbrechen, wenn eine gewisse Website angezeigt wird
 
Hallo,

Ich mache große Fortschritte mit meinem Programm, jedoch stehe ich einmal wieder vor einer Frage,
die ich heute den ganzen Tag versuche zu lösen, aber ihr einfach nicht auf den Grund komme.

Die Problematik besteht darin, dass ich eine Schleife beenden will, wenn eine bestimmte Webseite
in meinem TWebBrowser aufgerufen wird.

Ich habe das Ganze zuerst mit einer repeat until schleife versucht, was ebenfalls scheiterte,
somit habe ich es so versucht:

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
Var
i : integer;
begin
i := 0;
continue := true;
while (i < 50) and continue do
begin
  Application.ProcessMessages;
  i:=i+1;
  Application.ProcessMessages;
  if Webbrowser1.LocationURL = 'http://www.webseite.de/stop.php' then continue := false else
    begin
    Application.ProcessMessages;
    WebBrowser1.Navigate('http://www.webseite.de/profile.php?'+memo1.Lines[memo1.Lines.Count-1]);
    Application.ProcessMessages;
    sleep(3000);
    Application.ProcessMessages;
    Profil := memo1.Lines[memo1.Lines.Count-1];
    Application.ProcessMessages;
    memo1.Lines.delete(memo1.Lines.Count-1);
    Application.ProcessMessages;
  end;
   Application.ProcessMessages;
  end;
  PlaySound('SystemQuestion', 0, SND_ALIAS or SND_ASYNC) ;
  PlaySound('DeviceConnect', 0, SND_ALIAS or SND_ASYNC) ;

end;
Was aber auch nicht funktioniert, die Schleife läuft einfach 50 mal durch und das wars,
selbst wenn innerhalb der 50x die "Stop-Seite" kommt, rennt er weiter. Außerdem öffnen
sich zwar die Seiten, wobei der TWebBrowser aber nicht aktuallisiert wird, d.h. die erste
Seite bleibt stehen (Und die Seiten öffnen sich unsichtbar alle 3 Sekunden).

Die Abfrage der Webseite ohne Schleife geht super, z.B. um einen Button zu disablen, daher
wundert es mich, dass es in meiner Schleife nicht geht.

Bin echt am Verzweifeln und mit meinem latein am Ende,
es muss doch einfach irgendwie gehen, dass trotz der Schleife die angezeigte Seite aktuallisiert
und bei der Stop - Seite die Schleife beendet wird !?

Freue mich auf Antworten,
Grüße,
- M.S.

EDIT:
Mit den vielen Application.ProcessMessages; versuche ich , das Programm "nicht hängend" aussehen zu lassen, sodass es refreshed wird während der Schleife sozusagen.

dominikkv 4. Feb 2008 23:26

Re: Schleife abbrechen, wenn eine gewisse Website angezeigt
 
zuerst einmal würde ich die variable nicht continue nennen...
und dann kannst du dir mal diese procedure anschauen:
Delphi-Quellcode:
procedure WaitForWebBrowser(eWebbrowser: TWebBrowser; Delay: Integer);
begin
  while (eWebbrowser.ReadyState <> READYSTATE_COMPLETE) and (not Application.Terminated) do
    begin
      Sleep(Delay);
      Application.ProcessMessages;
    end;
end;
und das mit den Application.processmessages sieht echt übel aus xD

sirius 5. Feb 2008 07:31

Re: Schleife abbrechen, wenn eine gewisse Website angezeigt
 
Hat der WebBrowser nicht so ein Ereignis, welches ausgelöst wird nachdem die Seite vollständig geladen wurde?
Ich würde da ansetzen.

Noobinator 5. Feb 2008 09:39

Re: Schleife abbrechen, wenn eine gewisse Website angezeigt
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
webbrowser1.Navigate('www.web.de');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
webbrowser1.Navigate('www.google.de');
application.ProcessMessages;

form1.Caption := webbrowser1.locationurl ;
end;
Ausgabe: http://www.web.de

wenn du mal ein Projekt mit diesen Quellzeilen ablaufen lässt, dann wirst du schnell merken woran das liegt.

So wie es aussieht wird die locationURL erst gesetzt, nachdem die Seite komplett geladen ist.
--> deine While schleife rennt einfach zu schnell durch.

dein Sleep hilft dir hier aber auch nicht, da damit alles einfriert, auch das laden deiner Website.

Maxisoft2 5. Feb 2008 10:05

Re: Schleife abbrechen, wenn eine gewisse Website angezeigt
 
Hallo!

Ich habe mein sleep(3000) mal durch die Procedure ersetzt: procedure WaitForWebBrowser
Tatsache ist, dass die Webseiten nun tatsächlich laden und angezeigt werden! Vielen Dank!
Die Ladezeit ist zwar recht lang, aber es scheint zumindest zu funktionieren ;-).

Jetzt muss ich nurnoch das "Stopp" zum Laufen bringen.

Bernhard Geyer 5. Feb 2008 10:12

Re: Schleife abbrechen, wenn eine gewisse Website angezeigt
 
Zitat:

Zitat von Maxisoft2
Ich habe mein sleep(3000) mal durch die Procedure ersetzt: procedure WaitForWebBrowser

Sleep legt ja den Prozess schlafen. Da kann auch kein in deinem Prozess laufender IE (TWebBrowser) weiter laden ...

Maxisoft2 5. Feb 2008 13:26

Re: Schleife abbrechen, wenn eine gewisse Website angezeigt
 
Hallo nochmal!

Wollte nur bescheid geben, dass nun - dank der Procedure - Wirklich alles gut läuft.
Ich danke Euch allen sehr, sehr, sehr für Eure Hilfe, ohne Euch hätte ich es nicht gepackt!

Grüße, und eine schöne Woche,
- M.S.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:04 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