Webgadget und LINK

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Webgadget und LINK

Beitrag von Velindos »

Hallo Leute,

wenn ich den Navigations Callback vom Webgadget einsetze, liefert er mir alle mögliche Links ins Stringgadget!

Nun habe ich mit LinkQuittierung = 0 auch nichts erreicht, weil dann die Google Link aus der Google Suche nicht mehr geht!

Code: Alles auswählen

Procedure SuppressJavaScriptErrorMessages(WebGadget)
  
  Protected MyWebGadget.IWebBrowser2
  
  MyWebGadget = GetWindowLongPtr_(GadgetID(0), #GWL_USERDATA)
  MyWebGadget\put_Silent(#True) ; Suppress JavaScript error messages.
  
EndProcedure

Procedure NavigationCallback(Gadget, Url$)
  If Url$= "http://www.purebasic.com/news.php"
    MessageRequester("", "No news today!")
    ProcedureReturn #False
  Else
    If LinkQuittierung = 0
      SetGadgetText(5,Url$)
      LinkQuittierung = 1
    EndIf
    ProcedureReturn #True
  EndIf
EndProcedure

If OpenWindow(0, 0, 0, 600, 320, "WebGadget-Link", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  WebGadget(0, 10, 10, 580, 280, "http://www.purebasic.com")
  ButtonGadget(1,1,300,60,20,"Google")
  ButtonGadget(2,60,300,60,20,"Purebasic")
  ButtonGadget(3,120,300,60,20,"Welt")
  ButtonGadget(4,180,300,60,20,"Standard")
  StringGadget(5,240, 300,300,20,"Link")
  ProgressBarGadget(6, 0, 295, WindowWidth(0)-2, 3, 0, 100)
  SetGadgetAttribute(0, #PB_Web_NavigationCallback, @NavigationCallback())
  
  ; 			WebObject.IWebBrowser2 = GetWindowLongPtr_(GadgetID(0),#GWLP_USERDATA)
  ; 	If WebObject
  ; 		WebObject\put_Silent(#True)
  ; 		WebObject\put_Left(1)
  ; 	EndIf
  SuppressJavaScriptErrorMessages(0)
  
  
  Define Event,EventGadget,EventType
  ; ------------------
  Repeat
    Event = WaitWindowEvent()
    EventGadget = EventGadget()
    EventType = EventType()
    
    Select Event
        
      Case #WM_LBUTTONUP
        LinkQuittierung = 0
        
      Case #PB_Event_Gadget
        
        If EventGadget = 0
          If EventType = #PB_EventType_DownloadStart
            Debug "DownloadStart"
            HideGadget(6,0)
          EndIf
          If EventType = #PB_EventType_DownloadProgress
            SetGadgetState(6,GetGadgetAttribute(0,#PB_Web_Progress))
          EndIf
          If EventType = #PB_EventType_PopupMenu
          EndIf
          If EventType = #PB_EventType_TitleChange
          EndIf
          If EventType = #PB_EventType_DownloadEnd
            Debug "DownloadEnd"
            HideGadget(6,1)
          EndIf
        EndIf
        
        Select EventGadget
            
          Case 0:  SetGadgetText(5,GetGadgetText(0)) ; <============
            
          Case 1 : SetGadgetText(0,"http://www.google.com")
          Case 2 : SetGadgetText(0,"http://www.purebasic.com")
          Case 3 : SetGadgetText(0,"http://www.welt.de/newsticker/")
          Case 4 :SetGadgetText(0,"http://www.standard.at")
        EndSelect     
        
      Case #WM_KEYFIRST
        ; Web Navigation über LinkFeld
        If EventwParam() = #VK_RETURN
          Debug "ENTER gedrückt"
          If GetActiveGadget() = 5
            Debug "ENTER Taste hat FOCUS"
            SetGadgetText(0,GetGadgetText(5))
          EndIf
        EndIf
        
        
    EndSelect
    ; ESC Taste
    ; 		If GetAsyncKeyState_(#VK_ESCAPE):      End:    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf
Help, jemand noch eine Idee?

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Webgadget und LINK

Beitrag von udg »

und welchen link soll es liefern? den der aktuellen seite?
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Webgadget und LINK

Beitrag von Velindos »

Hallo,

ja, den der aktuellen Page. Was ja am Anfang der Fall ist, aber dann rattert er los. Man sieht alle anderen Aufrufe. Grund, ist das ich mir den Aufruf abspeichern möchte!

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Webgadget und LINK

Beitrag von udg »

funktioniert hier soweit ich das richtig erkenne? so wie es soll. es zeigt immer die url an, die gerade aufgerufen wird und im debug fenster rattert- (arbeitet) es nur so lang, bis die seite fertig geladen wurde.
Zuletzt geändert von udg am 23.05.2016 22:42, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Webgadget und LINK

Beitrag von Kiffi »

vielleicht sollte man erst einmal klären, was "rattern" bedeutet ;-)

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Webgadget und LINK

Beitrag von Velindos »

Hallo,
das rattern kommt vom Callback, wenn er irgend ein Aufruf ladet, der ... jetzt kommt´s ... nicht von mir kommt sondern von der Page!

Habe die Sache mit "#WM_LBUTTONUP" getrickst!

Jetzt bräuchte ich noch einen Tip, den meine Progressbar zeigt nichts an, wenn er ladet! Ist meine Mühle(dzt.W7/x64) hinüber oder wie???

Code: Alles auswählen

EnableExplicit
Enumeration
  #Win
  #Webgadget
  #Progressbar
  #Btn1
  #Btn2
  #Btn3
  #Btn4
  #Btn5
  #Link
EndEnumeration
OpenWindow(#Win, 0, 0, 800,700, "WebGadget Fortschritt", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(#Btn1,1,WindowHeight(#Win)-20 ,60,20,"Standard")
ButtonGadget(#Btn2,60,WindowHeight(#Win)-20 ,60,20,"Welt")
ButtonGadget(#Btn3,120,WindowHeight(#Win)-20 ,60,20,"Google")
ButtonGadget(#Btn4,180,WindowHeight(#Win)-20 ,60,20,"Purebasic")
ButtonGadget(#Btn5,240,WindowHeight(#Win)-20 ,60,20,"news.google")
StringGadget(#Link,WindowWidth(#Win)-300, WindowHeight(#Win)-20 ,300,20,"Link")
WebGadget(#Webgadget, 10, 10, 790, 560, "https://news.google.de/")
; WebGadget(#Webgadget, 10, 10, 790, 560, "http://www.standard.at")
ProgressBarGadget(#Progressbar,10, 580, 790, 20,0,1000000)
Define Event, EventGadget, EventType
Repeat
  Event = WaitWindowEvent()
  EventGadget = EventGadget()
  EventType = EventType()
  Select Event
      
    Case #WM_LBUTTONUP
      SetGadgetText(#Link,GetGadgetText(#Webgadget))
      
    Case #PB_Event_Gadget
      Select EventGadget
          
        Case #Webgadget
          Select EventType
            Case #PB_EventType_DownloadStart
              Debug "DownloadStart"
              Debug "#PB_Web_ProgressMax = "+ GetGadgetAttribute(#Webgadget,#PB_Web_ProgressMax ) 
              SetGadgetAttribute(#Progressbar,#PB_ProgressBar_Maximum,GetGadgetAttribute(#Webgadget,#PB_Web_ProgressMax))
            Case #PB_EventType_DownloadProgress
              Debug "DownloadProgress: " + Str(GetGadgetAttribute(#Webgadget, #PB_Web_Progress))
              Debug "DownloadProgressMax: " + Str(GetGadgetAttribute(#Webgadget, #PB_Web_ProgressMax))
              SetGadgetState(#Progressbar,GetGadgetAttribute(#Webgadget,#PB_Web_Progress))
            Case #PB_EventType_DownloadEnd
              Debug "DownloadEnd"
              SetGadgetState(#Progressbar,0)
          EndSelect 
          
        Case #Btn1 :SetGadgetText(#Webgadget,"http://www.standard.at")
          SetGadgetText(#Link,GetGadgetText(#Webgadget))
          SetGadgetAttribute(#Progressbar,#PB_ProgressBar_Maximum,100)
          SetGadgetState(#Progressbar,100)
        Case #Btn2 : SetGadgetText(#Webgadget,"http://www.welt.de/newsticker/")
          SetGadgetText(#Link,GetGadgetText(#Webgadget))
          SetGadgetAttribute(#Progressbar,#PB_ProgressBar_Maximum,100)
          SetGadgetState(#Progressbar,100)
        Case #Btn3 : SetGadgetText(#Webgadget,"http://www.google.com")
          SetGadgetText(#Link,GetGadgetText(#Webgadget))
          SetGadgetAttribute(#Progressbar,#PB_ProgressBar_Maximum,100)
          SetGadgetState(#Progressbar,100)
        Case #Btn4 : SetGadgetText(#Webgadget,"http://www.purebasic.com")
          SetGadgetText(#Link,GetGadgetText(#Webgadget))
          SetGadgetAttribute(#Progressbar,#PB_ProgressBar_Maximum,100)
          SetGadgetState(#Progressbar,100)
        Case #Btn5 : SetGadgetText(#Webgadget,"https://news.google.de/")
          SetGadgetText(#Link,GetGadgetText(#Webgadget))
          SetGadgetAttribute(#Progressbar,#PB_ProgressBar_Maximum,100)
          SetGadgetState(#Progressbar,100)
      EndSelect
  EndSelect   
Until Event = #PB_Event_CloseWindow
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Webgadget und LINK

Beitrag von Velindos »

Hallo Leute,
hier mal ein Beispiel welches im Webgadget nicht geladen wird!

Code: Alles auswählen

EnableExplicit

Enumeration
  #Window_0
  #Webgadget
  #ProgressBar
EndEnumeration

Global   Browser.IWebBrowser2
Define Event

OpenWindow(#Window_0, 0, 0, 1024, 600, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ProgressBarGadget(#ProgressBar, 10, 570, WindowWidth(#Window_0) - 20, 20, 0, 0)

WebGadget(#Webgadget, 10, 10, WindowWidth(#Window_0) - 20, WindowHeight(#Window_0) - 50, "http://www.standard.at")
Browser.IWebBrowser2 = GetWindowLongPtr_(GadgetID(#Webgadget),#GWLP_USERDATA)
If Browser
  Browser\put_Silent(#True)
  Browser\put_Left(1)
EndIf


Repeat
  Event = WaitWindowEvent()
  
  Select Event
    Case #PB_Event_Gadget
      Select EventGadget()
          
        Case #Webgadget
          
          If GetGadgetAttribute(#Webgadget, #PB_Web_ProgressMax) = 0
            SetGadgetState(#ProgressBar,0)
          EndIf
          
          Select EventType()
            Case #PB_EventType_DownloadProgress
              Debug "Progress"
              Debug GetGadgetAttribute(#Webgadget, #PB_ProgressBar_Maximum) 
              Debug GetGadgetAttribute(#Webgadget, #PB_Web_ProgressMax) 
              Debug GetGadgetAttribute(#Webgadget, #PB_Web_Progress) 
              SetGadgetAttribute(#ProgressBar, #PB_ProgressBar_Maximum, GetGadgetAttribute(#Webgadget, #PB_Web_ProgressMax))
              SetGadgetState(#ProgressBar, GetGadgetAttribute(#Webgadget, #PB_Web_Progress))
          EndSelect
          
      EndSelect
      
  EndSelect   
  
Until Event = #PB_Event_CloseWindow
Kann mir jemand sagen warum ladet das Ding nicht fertig, sondern bleibt hängen?

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Webgadget und LINK

Beitrag von RSBasic »

Das ist ein Internet Explorer-Problem. IE kommt anscheinend mit einer Javascript-Datei nicht klar bzw. der JS-Code ist nicht mit älteren IE-Versionen kompatibel und es entsteht eine Endlosschleife.
Irgendwann nach einem Timeout meldet sich der IE mit folgender Meldung:
Webbrowser hat geschrieben:Ausführung des Skripts abbrechen?

Ein Skript auf dieser Seite verursacht eine Browserverzögerung.
Eine weitere Ausführung des Skripts kann dazu führen,
dass der Computer nicht mehr reagiert.
Da kannst du nicht viel machen außer diese Seite zu vermeiden oder einen anderen Browser mit Hilfe eines Plugins zu verwenden.
Alternativ kannst du die IE-Kompatibilität mit Hilfe der Registry höher stellen: https://msdn.microsoft.com/en-us/librar ... 85%29.aspx
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Webgadget und LINK

Beitrag von Velindos »

Hallo RSBasic,
danke für deinen Tip. Habe die Sache aufgegriffen und funzt. Aber beim Refresh und bei der Link Anzeige habe ich noch Probleme!

Daher habe ich folgende Lösung entwickelt

Code: Alles auswählen

; Global UrlMerker = 0 
Global merker = 0
Global Callbackstate = 0


Procedure NavigationCallback(Gadget, Url$) 
	Static Browser.IWebBrowser2
	Static UrlMerker 
	; 	Static merker
	; 	Static Callbackstate
	
	Browser.IWebBrowser2 = GetWindowLongPtr_(GadgetID(0),#GWLP_USERDATA)
	
	Debug "=>>>>>>>>>>>>>>>>  Url$= "+Url$
	
	
	
	If merker = 1
		SetWindowTitle(0,Url$)
		StatusBarText(0, 0, Url$)
		
		DropUrl$=Url$
		Url$=""
		Callbackstate = 1
		merker =0
	EndIf
	
	
	; 	If Callbackstate = 0
	
	If Url$=DropUrl$ 
		MessageRequester("", "No news today!") 
		; 																										SetWindowTitle(0,URL$)
		ProcedureReturn #False 
	Else 
		
		Browser\get_ReadyState(@isReady)
		;--> Determine the load state
		
		Select isReady
			Case 1
				Debug "Seite Loading Begin"
				StatusBarText(0, 0, "Seite Loading Begin")
				; 					SetWindowTitle(0,DropUrl$)
				
			Case 2
				; 				Debug "Seite Loaded"
				StatusBarText(0, 0, "Seite Loaded")
				SetWindowTitle(0,Url$)
				
			Case 3
				Debug "Seite java"
				StatusBarText(0, 0, "Seite java")
				
				; 				SetWindowTitle(0,URL$)
				Debug DropUrl$
				If FindString(Url$,"javascript",0)
					ProcedureReturn  #False
				Else
					ProcedureReturn  #True
				EndIf
				
			Case 4
				Debug "Seite Fertig"
				StatusBarText(0, 0, "Seite Fertig")
				; 				SetWindowTitle(0,URL$)
				; 											SetGadgetText(0,URL$)
				
				Callbackstate = 0
				ProcedureReturn #True 
		EndSelect
		
		ProcedureReturn #True 
	EndIf
	
	; 	EndIf
	
EndProcedure 

If OpenWindow(0, 0, 0, 1000, 600, "WebGadget  Java", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
	CreateStatusBar(0,WindowID(0))
	AddStatusBarField(1000)
	
	; 	WebGadget(0, 10, 10, 580, 280, "http://www.purebasic.com") 
	DropUrl$ = "http://www.standard.at"
	WebGadget(0, 10, 10, 1000, 500, DropUrl$) 
	SetGadgetAttribute(0, #PB_Web_NavigationCallback, @NavigationCallback())
	ButtonGadget(1, 10,600-50,20,20,"X")
	ButtonGadget(2, 30,600-50,20,20,"X")
	Repeat
		Event = WaitWindowEvent()
		Select Event
				; GADGET
			Case #WM_LBUTTONDOWN
				Merker = 1
				Debug "button"
				
		EndSelect
		
		If Event = #PB_Event_Gadget
			
			Select EventGadget()
				Case 1
					DropUrl$ = "http://www.purebasic.com"
					SetGadgetText(0, DropUrl$)
				Case 2
					DropUrl$ = "http://www.standard.at"
					SetGadgetText(0, DropUrl$)
			EndSelect
		EndIf
		
	Until WaitWindowEvent() = #PB_Event_CloseWindow 
EndIf
Für Anregung bin ich noch zu haben!!!

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten