Autor Beitrag
SvenK
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 02.12.09 03:17 
Hallo,

möchte von einer HTML-Seite automatisch Daten extrahieren, was das Lesen vereinfacht. Aus Platzgründen benutze ich PageControl.

Auf einem TabSheet wähle ich in einem kleineren Fenster per TWebBrowser die Seite aus, die ich sehen möchte, welche dann auf einem weiteren TabSheet im Browser (TWebBrowser) angezeigt wird ... angezeigt werden sollte.

Im Normalfall führt mein Auswahlklick (TabSheet1) zum Browser (TabSheet2) - das klappt tadellos. Gehe ich jedoch nicht auf das TabSheet2 mit dem Browser, geht es nicht weiter, was zum Beispiel in
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
REPEAT
    Application.ProcessMessages;
    IF Automatik_Stop_Flag THEN EXIT;
    Sleep(1);
UNTIL WebBrowser1.ReadyState=READYSTATE_COMPLETE;

hängen bleibt. Das bedeutet also, ReadyState ist nicht erfüllt... Da kann ich warten und warten... Gehe ich nur einmal kurz auf TabSheet2 mit dem Browser, läuft das korrekt weiter. Alternativ erledigt das zur Zeit WebBrowser1.Show.

Wenn ich mich nicht irre, laufen danach weitere Aktionen ganz korrekt ab, nur kann ich nicht immer extra zum Fertigladen zum Browser klicken bzw. Show aufrufen.

Frage: Was muss ich tun, damit der TWebBrowser im Hintergrund korrekt arbeitet, ohne dass ich WebBrowser.Show verwenden musste. Refresh? brachte gar nix. InnerText und so ist leider vorher nicht einsetzbar und jede weitere Verarbeitung hängt.

In der Hoffnung, dass es simpel und einfach ist ...


TabSheet1: Button mit Aufruf WebBrowser1.Navigate('http://www.delphi-forum.de');

TabSheet2: enthält den WebBrowser1

Effekt: Der WebBrowser lädt erst dann vollständig und korrekt, wenn man auf TabSheet2 klickt.


Ist das eine Macke? Habe ich eine ? Oder sehe ich die simple Lösung vor lauter Bäumen nicht?

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 02.12.09 07:34 
Hallo und :welcome: im Forum!

Das Verhalten ist so korrekt, denn es handelt sich um eine Komponente zur Anzeige von Webseiten. Wenn du die dazu missbrauchen willst im Hintergrund darüber Daten abzurufen statt lieber Indy oder und TIdHttp ohne visuelle Komponente zu benutzen, dann gibt es genau diesen Effekt, den du beobachtet hast.

Deshalb nimm lieber TIdHttp oder ähnliches und rufe den Seiteninhalt normal darüber ab, das klappt dann auch im Hintergrund.
SvenK Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 02.12.09 16:21 
Danke, obwohl es mir lieber gewesen wäre, ich hätte einen peinlichen Denkfehler begangen.

Der Haken ist, dass ich die Seite auch schon einmal sehen möchte, nur nicht immer.
Das hiesse, entweder unter Beachtung des Aufrufes (Anzeigen oder Benutzung) funktionsbedingt ein .Show .Processmessage und dann '&C9 Return'... oder zweigleisig.

Obwohl ich gar nicht weiss, ob man mit Indy so bequem Bildlinks und den ausgegebenen Text (Table) bekommt - zumal ich mit dem Programm ansonsten fast fertig bin, gerade was die Datenübernahme angeht. :roll:

Eigentlich doof, zumal das praktisch ja nicht zwangsläufig mit der Anzeige notwendig sein dürfte... Schade! Zumindest wiss ich, woran ich bin.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 02.12.09 23:31 
Wenn es nicht anders geht, kann man theoretisch wohl auch das entsprechende Interface hinter dem WebBrowser benutzen und darüber gehen. Allerdings habe ich das noch nie versucht, da ich es für keine gute Lösung halte.

Aber auf dem Wege ist es vielleicht möglich, keine Ahnung.
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: Mi 02.12.09 23:56 
As Designed. Der IE funktioniert erst mit gültigen Fensterhandle. Evtl. reicht ein entsprechender Aufruf von HandleNeeded um dem TWebBrowser und damit dem IE "zu befriedigen".
SvenK Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 06.12.09 00:00 
Dank und viele Grüsse nach Oberreichenbach ! :beer:

Genau das hat es gebracht.
Hatte es erst mit PageIndex-Merken -> Show -> PageIndex restaurieren am Laufen gehalten, was einen kurzen 'Blitz' erzeugte. Muss ja einmal sein. Denkste!

Statt Show nun HandleNeeded eingesetzt ... Lecker !

Das war die Lösung ... :zustimm: