ich versuche zu prüfen, wann eine Seite im Webgadget geladen ist.
Problematik :
1. Schreibt man eine Schleife, die z.B. die Adresse prüft um eine veränderung festzustellen, bleibt die Schleife hängen.
2. Benutzt man einen Thread mit niedriger Priorität funktioniert das überprüfen, leider kann man per SetgadgetText() die Adresse nicht mehr
ändern, da die seite nicht gefunden wird.
Versucht man die Überprüfung im anderen Thread durchzuführen, bleibt das Programm stecken.
3. Freaks Webgadget_Extras aus dem englischen Forum.
http://www.purebasic.fr/english/viewtop ... highlight=
Auf Seite 2 oder 3 stellt der User "yabune" fest, dass die Funktion
"Webgadget_isloaded" ebenfalls hängen bleibt.
Eine Antwort ist bisher ausgeblieben.
Ich würde selbst ins englische Forum posten, leider kommen meine Zugangslinks nicht an (habs nun 3x probiert...)
Hat jemand eine Lösung gefunden, zu prüfen, ob eine Webseite geladen ist und danach die adressen noch zu ändern (siehe 2.) ?
Hier der Code mit Thread :
(Eventuell hat jemand einen Kniff, den Thread zu beenden, so dass sich das Webgadget wieder benutzen lässt nach der Prüfung)
-Ohne Thread würde die Schleife sofort stehenbleiben !-
Code: Alles auswählen
Declare wait()
Declare window()
Declare thread()
window()
Procedure window()
OpenWindow(0, 5, 5, 800, 500, "TEST")
CreateGadgetList(WindowID(0))
WebGadget(1,20,20,400,300,"www.google.de")
thread()
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndProcedure
Procedure thread()
thid = CreateThread(@Wait(), 48)
ThreadPriority(thid, 10)
;Repeat ; <- würde hier hängen bleiben
;Until test = 1
;Debug "Main Thread"
EndProcedure
Procedure Wait()
Repeat
adresse.s=GetGadgetText(1)
position=FindString(adresse.s,"google",1)
If position > 2
test= 1
EndIf
Until test=1
SetGadgetText (1,"www.purebasic.de" ); lädt nicht ^^!
EndProcedure
_____________________________________________
EDIT :
Ich habe nun Code gefunden, sicherlich interessant für jeden, der einmal auf dasselbe Problem stösst :
Aus dem Englischen Forum
http://www.purebasic.fr/english/viewtop ... adget+wait
Den wichtigen Code habe ich mal herausgefiltert, ist ziemlich wenig und ich verstehe nicht viel davon, ausser das es eine WindowsDLL benutzt und eine Funktion dort aufruft, dürfte also nur unter Windows lauffähig sein :
Code: Alles auswählen
If OpenWindow(0, 0, 0, 1000, 800, "WebGadget Edit", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
If CreateGadgetList(WindowID(0))
WebGadget(0, 5, 5, 990, 790, "www.google.com")
; get webgadgets IWebBrowser2 interface: (ruft die Funktion auf und bestimmt die Gadget ID))
Browser.IWebBrowser2 = GetWindowLong_(GadgetID(0), #GWL_USERDATA)
; wait For page To be loaded..
Repeat
While WindowEvent(): Wend
Delay(1)
Browser\get_Busy(@IsBusy.l)
Until IsBusy = 0
;Debug "loaded"
; get the document interface
Repeat
EventID = WaitWindowEvent()
Until EventID = #PB_Event_CloseWindow
EndIf
EndIf
End
Was aber für mich noch viel interessanter war, warum funktioniert es ohne hängenzubleiben und das ist dabei herausgekommmen :
Code: Alles auswählen
Declare window()
Declare wait()
window()
Procedure window()
OpenWindow(0, 5, 5, 800, 500, "TEST")
CreateGadgetList(WindowID(0))
WebGadget(1,20,20,400,300,"www.google.de")
wait()
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndProcedure
Procedure wait()
Repeat
While WindowEvent(): Wend
;<- keine Blockade der Schleife mehr, da erst beim Ereignis im Fenster die Schleife durchgegangen wird.
Delay(1)
;Delay scheint nicht unbedingt notwendig, vielleicht bei langsamerer verbindung ?
adresse.s=GetGadgetText(1)
position=FindString(adresse.s,"google",1)
If position > 2
test= 1
EndIf
Until test=1
;Debug test
SetGadgetText (1,"http://www.purebasic.de" )
EndProcedure
