Entwickler-Ecke
Internet / Netzwerk - Timer auf Prozedur?
tckids - Mi 12.10.11 07:03
Titel: Timer auf Prozedur?
Hallo !
Ich bin ein absoluter Neuling was Delphi betrifft und beschäftige mich derzeit mit einfach gehaltenen Sachen, nun jetzt hab ich mir einen Webbrowser mithilfe der Twebbrowser komponente gebastelt, komme aber bei einer Sache nicht wirklich weiter.
Mein Problem ist folgendes:
Ich möchte meinen Browser nur auf eine von mir vorgegebene Seite navigieren lassen, dies soll solange der Fall sein bis diese Seite komplett aufgerufen wurde, das Programm soll später in meinen Autostart, somit kann es passieren das ich bei der Ausführung des Programmes noch kein Zugang zum Internet hab und das erste Navigations kommando in einem "Seite nicht gefunden endet" und dort feststeckt.
Jetzt möchte ich gerne einen 5 Sekunden Timer auf folgende procedure setzen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.titlechange(Sender: TObject; const Text: WideString); begin if Text = 'Untitled Document' then begin StaticText1.Visible := False; end else webbrowser1.Navigate('http://meineurl.de'); end; |
Dies überprüft soweit ich es richtig gemacht habe den Titel der Webseite, ist der Titel nicht "Untitled Document" navigiere erneut.
Jetzt verstehe ich aber beim besten willen nicht wie ich das in einen Timer bekomme ?
Vielen dank schonmal für jegliche hilfe!
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Mi 12.10.2011 um 11:48
Xion - Mi 12.10.11 08:17
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.OnTimer(Sender: TObject); begin if webbrowser1.Title = 'Untitled Document' then begin StaticText1.Visible := False; end else webbrowser1.Navigate('http://meineurl.de'); end; |
Ich habe einfach nur die Funktion so umgebaut, dass sie das .Text nichtmehr verwendet. Ich hab dabei einfach mal angenommen, dass Text der Title vom Webbrowser ist. Ich vermute weiterhin, dass man den auch anders auslesen kann.
Btw: Stimmt das so? Du tust ja so immer dann neu laden, wenn der Titel NICHT 'Unititled' ist. Sollte es nicht genau umgekehrt sein?
Wenn du dann einmal die richtige Seite erhalten hast, solltest du den Timer abschalten (Timer.Enabled)
tckids - Mi 12.10.11 09:27
Ja das ist soweit richtig, ich möchte solange der Titel der Webseite NICHT "Untitled Document" ist, die Seite neu laden / den Navigationsbefehl erneut senden.
Habe den von Dir angebotenen Code gleich mal ausprobiert, bekomme beim erzeugen den Fehler: Undefinierter Bezeichner: 'Title'
Kannst du mir weiterhelfen was ich tun muss?
Vielen Dank!
Delete - Mi 12.10.11 09:33
Wäre es nicht sinnvoller das Ereignis OnDocumentComplete oder wie das heißt, vom Webbrowser zu nehmen und sich vom Webbrowser benachrichtigen zu lassen alls ständig zu überprüfen, ob er die Seite fertig geladen hat?
tckids - Mi 12.10.11 09:35
Hallo,
daran hatte ich auch gedacht, ich hatte es auch schon eingebaut, aber dann ist mir aufgefallen, dass eine Error Page anstatt der eigentlichen Page die aufgerufen werden soll genauso "OnDocumentComplete" ausloest.
Es gibt allerdings noch OnNavigationError, da weiss ich aber leider nicht wie ich das einzusetzen habe.
Narses - Mi 12.10.11 11:50
Moin und :welcome: in der EE!
tckids hat folgendes geschrieben : |
das Programm soll später in meinen Autostart, somit kann es passieren das ich bei der Ausführung des Programmes noch kein Zugang zum Internet hab und das erste Navigations kommando in einem "Seite nicht gefunden endet" und dort feststeckt. |
Wie wäre es denn, statt an den Symptomen rumzudoktoren, an die Ursache zu gehen? :roll: Z.B. vor dem ersten Navigate-Request eine Ping-Schleife laufen zu lassen, die prüft, ob der Host überhaupt erreicht werden kann? :idea:
cu
Narses
Delete - Mi 12.10.11 12:12
Narses hat folgendes geschrieben : |
eine Ping-Schleife |
Ich weiß zwar nicht, was eine Ping-Schleife ist, aber das sagt dir nur, dass der Server erreichbar ist, aber nicht, ob der gewünschte Dienst läuft und antworten kann.
Narses - Mi 12.10.11 13:21
Moin!
Luckie hat folgendes geschrieben : |
Narses hat folgendes geschrieben : | eine Ping-Schleife | Ich weiß zwar nicht, was eine Ping-Schleife ist, |
Für dich gerne auch nochmal ausführlich: eine Schleife, die den Host anpingt und nur verlassen wird, wenn er antwortet oder ein Wiederholungstimeout eintritt. ;)
Luckie hat folgendes geschrieben : |
aber das sagt dir nur, dass der Server erreichbar ist, aber nicht, ob der gewünschte Dienst läuft und antworten kann. |
Ja, das ist natürlich sachlich korrekt, aber trotzdem am Ziel vorbei:
Narses hat folgendes geschrieben : |
tckids hat folgendes geschrieben : | das Programm soll später in meinen Autostart, somit kann es passieren das ich bei der Ausführung des Programmes noch kein Zugang zum Internet hab und das erste Navigations kommando in einem "Seite nicht gefunden endet" und dort feststeckt. |
|
Hier steht vermutlich noch keine LAN/Internet-Verbindung, also wird dieser Ansatz in den meisten Fällen das Problem lösen. :idea:
Das es bei dieser Problemklasse keine wasserdichte Lösung gibt, ist uns beiden spätestens seit dem Internet-Doyo bekannt. :)
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!