Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi überprüfen ob dokument übertragen wurde (https://www.delphipraxis.net/6216-ueberpruefen-ob-dokument-uebertragen-wurde.html)

cookie_eater 3. Jul 2003 18:13


überprüfen ob dokument übertragen wurde
 
hallo leute

wie kann ich beim delphi webbrowser feststellen wann eine website fertig geladen ist?

ich habs mit webbrowser1.ondownloadcomplete probiert. nur schnall ich nicht wie ich das funzt...

kann mir jemand helfen??

:freak:

grüße an alle

Daniel B 3. Jul 2003 18:22

Hallo,

OnDocumentComplete.
OnDownloadComplete.
OnNavigateComplete2.

Was gefällt Dir an denen nicht? Vielleciht solltest Du uns einfach sagenw as Du vor hast.

Grüsse, Daniel :hi:

cookie_eater 3. Jul 2003 19:59

mein programm soll solange pause machen, bis das document übertragen wurde...

wie lös ich das??

:bounce1:

Greetz und danke für die Antwort

Marco Haffner 3. Jul 2003 20:35

Zitat:

Zitat von cookie_eater
ich habs mit webbrowser1.ondownloadcomplete probiert.

Das wird auch nicht funktionieren, OnDownloadComplete wird ausgelöst, wenn Du eine Datei heruntergeladen hast und nicht wenn das Dokument fertig geladen ist.
Du benötigst OnDocumentComplete, dieses Ereignis wird ausgelöst, wenn eine Seite geladen wurde.
Benutzt die zu ladende Seite aber Frames, sieht das ganze etwas anders aus.
Für weitere Informationen, suche mal hier im Forum nach OnDocumentComplete oder WebBrowser.

cookie_eater 4. Jul 2003 13:32

verstehe das nicht so richtig. was für ein ereignis wird ausgelöst....ich wollte zum beispiel versuchen einer variable (als int deffiniert) von 0 auf 1 zu setzen, wenn das OnDocumentComplete ereignis ausgelöst wird:

Code:
procedure TForm1.Button1Click(Sender: TObject);
var over : integer;
begin
webbrowser1.Navigate('http://www.google.de');
 
webbrowser1.OnDocumentComplete := over :=1




end;

end.
das sieht a bissel komisch aus und funktioniert auch nicht...

Daniel B 4. Jul 2003 13:35

Hallo,

OnDocumentComplete ist eine eigene Prozedur!
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
begin
  WebBrowser1.Navigate('http://google.de');
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  ShowMessage('Blupp');
end;
Statt der MEssage setzt Du da Deine Variable!
Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  MyIntVar := 1;
end;
Grüsse, Daniel :hi:

cookie_eater 4. Jul 2003 13:44

hmm aber bei.

Code:
procedure TForm1.Button1Click(Sender: TObject);
var over : integer;
begin
webbrowser1.Navigate('http://www.google.de');
end;


procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  ShowMessage('Blupp');
end;

end.
Bekomm ich die Meldung Undeffinierter Bezeichner 'WebBrowser1DocumentComplete'

beim compilieren

Daniel B 4. Jul 2003 13:47

:mrgreen:

Ich nehme an Du hast den COde einfach Kopiert und bei Dir eingefügt, also, richtiger Weg:

Klick den WebBrowser an, dann im OI auf Ereignisse, dann ein Doppelklick auf OnDocumentComplete, dann wird die Prozedur autom. angelegt und zwar mit! der deklaration im interface-Teil, sprich in der Klasse TForm1! Denn da oben fehlt die zeile, damit es geht. ;)

Grüsse, Daniel :hi:

cookie_eater 4. Jul 2003 13:56

gut so geht es...aber eine frage ist dann nur...

die integer variable "over" ist dann nur innerhalb der procedur von ondocumentload gültig. eigentlich wollte ich in einer while schleife so lange die variable over prüfen bis sie 1 ist und dann eine andere webseite aufrufen...wie mach ich das am Besten??

danke für Deine Hilfe

Daniel B 4. Jul 2003 14:03

Zitat:

Zitat von cookie_eater
die integer variable "over" ist dann nur innerhalb der procedur von ondocumentload gültig.

Wo Du die Variable deklariest und wo Du sie setzt oder abprüfst, sind verschiedene Sachen..

Mach doch z.B. eine globale Integer-Variable, oder besser wäre sogar Boolean.

Delphi-Quellcode:
var
  Form1: TForm1;
  MyIntVar: Integer;
  MyBoolVar: Boolean;

implementation

//Hier kommen dann die ganzen Prozeduren
In welcher Prozedur Du jetzt auf MyIntVar/MyBoolVar zugreifst ist egal, das ist dann aus allen möglich. Egal wo setzen und egal wo testen um andere Sachen dann zu machen...

Grüsse, DAniel :hi:

cookie_eater 4. Jul 2003 15:45

hmm ein problem ist, dass ich dann das was ich machen wollte gar nicht machen kann, wenn dieses ondocumentload eine eigene prozedur ist...

ich wollte eigentlich ein memo nehmen und in dieses memo zeile für zeile verschiedene URL's eintragen...der soll anfangen die erste url zu laden, dann abwarten bis das document übertragen wurde und dann die nächste URL aus dem Memo laden usw.

Ich zerbrech mir den kopf aber ich kanns dann weder über ne for-schlife noch über ne while schleifen lösen, da die 2 prozeduren undabhängig voneinenader laufen....mist...

Weiß einer eine Lösung...Mir qualmt der Kopf...

Grüße an alle!
:freak: :cry:

Christian Seehase 4. Jul 2003 16:50

Moin Cookie Eater,

Du arbeitest das Memo in einer For Schleife ab.
Bevor eine Seite geladen wird, setzt Du ein Flag.
Jetzt wird das Laden der Seite gestartet.
Anschliessend kommt eine While Schleife mit Application.ProcessMessages, die erst verlassen wird, wenn das Flag wieder gelöscht ist, und dies passiert im OnDocumentComplete o.ä.
Jetzt kommt der Rest der For Schleife.

Ggf. solltest Du vielleicht noch einen Abbruch Button vorsehen, der das Flag auch zurücksetzen kann.

Das Flag muss nicht unbedingt ein Boolean sein. Dann kannst Du ggf. unterscheiden, ob denn nun ein Abbruch für das akutelle Dokument angefordert wurde, oder für dieses und alle folgenden Dokumente.

cookie_eater 4. Jul 2003 18:13

Zitat:

Zitat von Christian Seehase
Moin Cookie Eater,

Du arbeitest das Memo in einer For Schleife ab.
Bevor eine Seite geladen wird, setzt Du ein Flag.
Jetzt wird das Laden der Seite gestartet.
Anschliessend kommt eine While Schleife mit Application.ProcessMessages, die erst verlassen wird, wenn das Flag wieder gelöscht ist, und dies passiert im OnDocumentComplete o.ä.
Jetzt kommt der Rest der For Schleife.

Ggf. solltest Du vielleicht noch einen Abbruch Button vorsehen, der das Flag auch zurücksetzen kann.

Das Flag muss nicht unbedingt ein Boolean sein. Dann kannst Du ggf. unterscheiden, ob denn nun ein Abbruch für das akutelle Dokument angefordert wurde, oder für dieses und alle folgenden Dokumente.

gute idee...habs ganz ähnlich gemacht! habe eine globale variable mit dem namen "loaddone" als int deffiniert die ich zuerst auf 0 setze und im event von OnDocumentComplete auf 1. so sollte document done 1 sein, wenn eine seite geladen wurde..habe dann eine while in einer for schleife gemacht:

Code:

     for i := 0 to 2 do begin
     webbrowser1.Navigate(memo1.Lines[i]);

while loaddone = 0 do begin
 //tue nichts und warte bis seite geladen
end;

     loaddone := 0;
     end;
problem ist, dass sich das programm aufhängt...habe das dumpfe gefühl, dass der in der while schleife hängen bleibt...aber das kann eigentlich nicht sein, denn irgendwann ist ja loaddone = 1 und damit müsste er diese schleife verlassen...

mache ich es aber so:

Code:

     for i := 0 to 2 do begin
     webbrowser1.Navigate(memo1.Lines[i]);

while loaddone = 0 do begin
 showmessage ('hallo');
end;

     loaddone := 0;
     end;
geht es :freak: ...ist der selbe code nur das ich mir solange die seite nicht geladen wurde eine meldung 'hallo' ausgeben lasse...warum hängt der sich bei ersterem beispiel auf??

das mit der messagebox iss mist. habe kein bock mit jedes mal daneben zu setzen und die message mit ok zu bestätigen...

sieht hier jemand durch???

Grüße

Christian Seehase 4. Jul 2003 19:26

Moin Cookie Eater,

Zitat:

Zitat von Christian Seehase
Anschliessend kommt eine While Schleife mit Application.ProcessMessages


cookie_eater 4. Jul 2003 19:59

ahso....sorry wusste gar nicht, dass Application.ProcessMessages ne anweisung ist....was genau bedeutet Application.ProcessMessages eigentlich....soviel wie tue nichts???

auf alle fälle funzt jetzt alles soweit... :hello:

:hi:

BIG BIG THNX!!!

Christian Seehase 4. Jul 2003 20:43

Moin Cookie Eater,

Application.ProcessMessages verarbeitet anstehende Windows Messages, und kehrt erst dann zurück.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz