Seite 1 von 2

WebGadget scrollen mit eigenen Scrollpfeilen

Verfasst: 29.11.2005 16:42
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

Verfasst: 29.11.2005 18:02
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

Verfasst: 29.11.2005 18:16
von Delle
Wow! Danke!!! Also wer sich da bischen reinarbeitet, kann sicher richtig geile Webapplikationen basteln...

Verfasst: 30.11.2005 19:32
von Nik
Vielen Vielen dank Freak suche schon seit Tagen danach. (Hast ja auch ne PM von mir deswegen im englischen forum bekommen)

Verfasst: 30.11.2005 20:05
von Delle
Kann man die aktuelle Position der WebGadget-Scrollbalken auch irgendwie abfragen?

GetScrollPos_() ?

Verfasst: 12.12.2005 22:36
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.

Verfasst: 12.12.2005 22:48
von Nik
Wenn du ganz anch unten scrollen willst setz einfach ne riesige zahl als position ein er scroltl dann so das es passt^^

Verfasst: 12.12.2005 22:53
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...

Verfasst: 12.12.2005 22:59
von Delle
Geht leider schwer, weil Du ja zwischendurch das WebGadget neu füllen musst...

Verfasst: 13.12.2005 00:17
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