WebGadget scrollen mit eigenen Scrollpfeilen

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

WebGadget scrollen mit eigenen Scrollpfeilen

Beitrag von Delle »

Hallo,

ich möchte das beim Druck auf "Ende" der Inhalt
eines Webgadget bis nach unten scrollt/springt.

Das geht natürlich problemlos wenn man ins das Webgadget
klickt und dann diese Taste drückt, dass Gadget also fokussiert ist.

Es soll aber auch außerhalb des Webgadgets möglich sein,
z.B. durch einen eigenen Button wo "zum ende" draufsteht.

Folgender Code funktioniert mit einem ScrollAreaGadget,
wollte ihn auch für das Webgadget anwenden aber das
funktioniert nicht.

Kann man das anpassen oder gibt es keine Möglichkeit?

Code: Alles auswählen

Structure PB_ScrollAreaData 
  ScrollAreaChild.l 
  ScrollStep.l 
EndStructure

Procedure ScrollScrollArea(gadget, xoffset, yoffset)
  hScrollArea = GadgetID(gadget) 
  *SAGdata.PB_ScrollAreaData = GetWindowLong_(hScrollArea, #GWL_USERDATA) 
  If *SAGdata 
    posX = GetScrollPos_(hScrollArea, #SB_HORZ) 
    posY = GetScrollPos_(hScrollArea, #SB_VERT) 
    SetScrollPos_(hScrollArea, #SB_HORZ, posX + xoffset, #True) 
    SetScrollPos_(hScrollArea, #SB_VERT, posY + yoffset, #True) 
    posX = GetScrollPos_(hScrollArea, #SB_HORZ) 
    posY = GetScrollPos_(hScrollArea, #SB_VERT) 
    GetWindowRect_(*SAGdata\ScrollAreaChild, wr.RECT) 
    MoveWindow_(*SAGdata\ScrollAreaChild, -posX, -posY, wr\Right - wr\Left, wr\Bottom - wr\Top, #True) 
  EndIf 
EndProcedure

XIncludeFile "WebGadgetExtras.pb" 

#WebGadget = 100 

OpenWindow(0,0,0,550,350,#PB_Window_ScreenCentered|#PB_Window_BorderLess,"Test")

CreateGadgetList(WindowID(0))

WebGadget(#WebGadget,10,15,380,245,"http://www.spiegel.de")

InitKeyboard()
  
Repeat 
  
EventID=WaitWindowEvent()

ExamineKeyboard()     

If KeyboardReleased(#PB_Key_End)
ScrollScrollArea(#WebGadget,0,100)
EndIf 

If EventID=#PB_Event_CloseWindow:End:EndIf

ForEver
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Beitrag von freak »

Code: Alles auswählen

Procedure WebGadget_Scroll(Gadget.l, x.l, y.l)
  Browser.IWebBrowser2 = GetWindowLong_(GadgetID(Gadget), #GWL_USERDATA)
  If Browser
    If Browser\get_Document(@DocumentDispatch.IDispatch) = #S_OK
      If DocumentDispatch\QueryInterface(?IID_IHTMLDocument2, @Document.IHTMLDocument2) = #S_OK            
        If Document\get_parentWindow(@Window.IHTMLWindow2) = #S_OK
                
          While WindowEvent(): Wend ; wichtig!
          Window\ScrollTo(x, y)          
        
          Window\Release()
        EndIf                    
        Document\Release()
      EndIf          
      DocumentDispatch\Release()
    EndIf  
  EndIf    
EndProcedure
Wenn man das "Window\ScrollTo()" durch "Window\ScrollBy()" ersetzt sollte
die änderung relativ zur aktuellen Position sein, so wie jetzt ist es eine
absolute Position.

Hier noch die IID für IHTMLDocument2:

Code: Alles auswählen

DataSection
  IID_IHTMLDocument2: ; {332C4425-26CB-11D0-B483-00C04FD90119}
    Data.l $332C4425
    Data.w $26CB, $11D0
    Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19    
EndDataSection
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Wow! Danke!!! Also wer sich da bischen reinarbeitet, kann sicher richtig geile Webapplikationen basteln...
Nik
Beiträge: 132
Registriert: 04.02.2005 19:57

Beitrag von Nik »

Vielen Vielen dank Freak suche schon seit Tagen danach. (Hast ja auch ne PM von mir deswegen im englischen forum bekommen)
www.KoMaNi.de
Eine kleine Gruppe von Hobby Programmierern, die gerade einen Instant Messenger natürlich in PureBasic schreiben.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Kann man die aktuelle Position der WebGadget-Scrollbalken auch irgendwie abfragen?

GetScrollPos_() ?
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

Ich hätte auch noch eine Frage.
Kann man die Höhe der Html Datei rausfinden?
Also das man weiß wie viel Pixel sie hoch ist um dann entsprechend runter zu scrollen.

Schon mal danke im vorraus.
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Nik
Beiträge: 132
Registriert: 04.02.2005 19:57

Beitrag von Nik »

Wenn du ganz anch unten scrollen willst setz einfach ne riesige zahl als position ein er scroltl dann so das es passt^^
www.KoMaNi.de
Eine kleine Gruppe von Hobby Programmierern, die gerade einen Instant Messenger natürlich in PureBasic schreiben.
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

Ich möchte die höhe speichern, und dann die neue höhe nehmen.
dann die alte höhe von der neuen abziehen und genau so weit runterscrollen...
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Geht leider schwer, weil Du ja zwischendurch das WebGadget neu füllen musst...
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

zigapeda hat geschrieben:Ich möchte die höhe speichern, und dann die neue höhe nehmen.
dann die alte höhe von der neuen abziehen und genau so weit runterscrollen...
Du könntest einen Anker an diese Position in die HTML-Seite setzen, den Du
bei [c]onLoad()[/c] aufrufst. Das Webgadget dürfte dann automatisch
herunterscrollen.

Grüße ... Kiffi
Antworten