Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Beitrag von Delle »

Hallo,

kann man den folgenden Code so verwenden? Das Programm soll erst weiterlaufen, wenn die Webseite vollständig geladen wurde.

Code: Alles auswählen

WebGadget(#Web,0,0,800,600,url$)
While GetGadgetAttribute(#Web,#PB_Web_Busy)<>0
While WindowEvent():Wend
Wend
Soll ich ev. zwischen Webgadget und While ein Delay machen?

Nicht das am Ende noch gar nicht damit begonnen wurde die Website zu laden und While gleich überflogen wird...

Danke,
Delle
PB 6.21 | Win 11
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Beitrag von RSBasic »

Ich würde das nicht so machen, sondern:

Code: Alles auswählen

EnableExplicit

Define EventID
Define Browser.IWebBrowser2
Define SiteLoaded

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Invisible)
  WebGadget(1, 10, 10, 480, 380, "http://webfail.de")
  ;Ist nur dazu da, um die nervigen IE-Fehlermeldungen zu unterdrücken.
  Browser = GetWindowLongPtr_(GadgetID(1), #GWL_USERDATA)
  Browser\put_Silent(#True)
  
  ;HideGadget(1, 1)
  
  Debug "Seite wird geladen. Bitte warten..."
  
  Repeat
    EventID = WaitWindowEvent()
    If GetGadgetAttribute(1, #PB_Web_Busy) = 0 And SiteLoaded = 0
      ;HideGadget(1, 0)
      ;oder
      HideWindow(0, 0)
      SiteLoaded = 1
      Debug "Seite wurde vollständig geladen."
    EndIf
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Beitrag von Danilo »

RSBasic hat geschrieben:Ich würde das nicht so machen, sondern:
[...]
WinAPI forever.
:D
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Beitrag von Delle »

RSBasic hat geschrieben:Ich würde das nicht so machen, sondern:
Jetzt fehlt mir nur noch die Begründung ;)
PB 6.21 | Win 11
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Beitrag von Andesdaf »

bei RSBasics Code besteht die Möglichkeit, dass während des Ladevorgangs
noch auf andere Events reagiert werden kann (z.B. Schließen des Fensters).
Dein Code würde das Programm während des Ladens der Seite erst einmal
nicht ansprechbar machen, was in den Augen des Anwenders nicht positiv
rüberkommen wird.
Win11 x64 | PB 6.20
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Beitrag von Delle »

Andesdaf hat geschrieben:bei RSBasics Code besteht die Möglichkeit, dass während des Ladevorgangs noch auf andere Events reagiert werden kann (z.B. Schließen des Fensters). Dein Code würde das Programm während des Ladens der Seite erst einmal nicht ansprechbar machen, was in den Augen des Anwenders nicht positiv rüberkommen wird.
Der Anwender soll da auch gar nicht irgendwie drin rumklicken ;)

Mir ging's mehr darum, dass das Webgadget am Ende noch gar nicht läd aber While schon aufgerufen und eben übersprungen wird.
PB 6.21 | Win 11
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Beitrag von Delle »

RSBasic hat geschrieben:Wenn ein Fenster geöffnet wird und dann muss die Eventschleife stets durchlaufen werden, da sonst das Fenster nicht reagiert und keine Events abgefeuert und verarbeitet werden können. Es ist einfach unsauber, wenn das Fenster aufgrund eines Delays oder einer anderen Schleife nicht auf Events reagieren kann.
Ich weiß, aber in dem Falle ist es a) egal und b) der User soll auch gar nicht während dem Ablauf "reinpfuschen".
RSBasic hat geschrieben:Außerdem würde dein Code, den du in deinem Startbeitrag gepostet hast, nicht funktionieren, weil GetGadgetAttribute(#WebGadget, #PB_Web_Busy) den Wert "1" zurückgibt, wenn die Seite noch beim Laden ist. Wenn der Ladevorgang fertig ist, dann wird "0" zurückgegeben.
Nun dann ist die Hilfe anscheinend fehlerhaft:
#PB_Web_Busy: Gibt einen Wert ungleich Null zurück, wenn das Gadget mit dem Laden einer Seite beschäftigt ist.
Also irgendein Wert (außer 0) wenn es noch läd.
Wert = GetGadgetAttribute(#Gadget, Attribut)
Rückgabewert: Gibt den Wert des angegebenen Gadget-Attributs zurück, oder Null wenn das Gadget das Attribut nicht unterstützt.
Und hier wird angeblich 0 zurückgegeben, wenn das Attribut nicht unterstützt wird...
PB 6.21 | Win 11
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Beitrag von bobobo »

LOGIK ¿?¿?
Das schliesst sich nicht aus. Das Webgadget unterstützt ja das Attribut und gibt 0 zurück wenn es
fertig ist mit dem Laden.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten