thank you, got it working so far. But here I have also the problem that oStatic2 scrolls over the button on the top of the dialog.
Code: Select all
#INCLUDE "dcdialog.CH"
#INCLUDE "xbp.CH"
#INCLUDE "appevent.CH"
function Main()
******************************************************************
local getlist := {},x,oStatic1,oStatic2,lTest := .t.
local aStatic := {}
local nVertOffset := 0, nHorizOffset := 0, nVert, nHoriz, i, j, oVertScroll, oHorizScroll, GetOptions
@ 0,0 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX SIZE 500,700 OBJECT oStatic1 PIXEL RESIZE DCGUI_RESIZE_AUTORESIZE_SCALEFONT
@ 1,1 DCPUSHBUTTONXP size 500,40 caption "buttons" PIXEL PARENT oStatic1
@ 42,0 DCSTATIC TYPE XBPSTATIC_TYPE_TEXT SIZE 500,700-42 OBJECT oStatic2 PARENT oStatic1 PIXEL RESIZE DCGUI_RESIZE_AUTORESIZE_SCALEFONT
@ 0,500 DCSCROLLBAR DATA nVertOffset SIZE 50,700-42 TYPE XBPSCROLL_VERTICAL RANGE 0,2000 AUTOTRACK OBJECT oVertScroll SCROLL { |mp1,x,o| scroller(mp1,o,oStatic1,oStatic2,nVert,@nVertOffset,2) } PIXEL
for x := 1 to 100 step 20
@ x,20 dcsay "Test" saysize 0 parent oStatic2 PIXEL
next x
DCREAD GUI TITLE "Test" FIT EVAL {|o|nVert:=oStatic2:currentPos()[2], ;
nHoriz:=oStatic2:currentPos()[1], ;
o:reSize := {|a,b,x|scroll_resize(a,b,x,oStatic1,oStatic2,oVertScroll, @lStartUp )} }
return .t.
PROC appsys
return
STATIC FUNCTION scroll_resize( aOldSize, aNewSize, oDlg, oStatic1, oStatic2,oVertScroll, lStartUp )
******************************************************************
LOCAL nWidth := aNewSize[1] - aOldSize[1]
LOCAL nHeight := aNewSize[2] - aOldSize[2]
IF !empty(lStartUp)
lStartUp := .f.
RETURN nil
ENDIF
oStatic1:setSize( {oStatic1:currentSize()[1]+nWidth,oStatic1:currentSize()[2]+nHeight} )
oStatic2:setSize( {oStatic2:currentSize()[1]+nWidth,oStatic2:currentSize()[2]+nHeight} )
oVertScroll:setSize( {oVertScroll:currentSize()[1],oVertScroll:currentSize()[2]+nHeight} )
oVertScroll:setPos( {oVertScroll:currentPos()[1]+nWidth,oVertScroll:currentPos()[2]} )
RETURN nil
STATIC FUNCTION scroller( a, oScroll, oStatic1, oStatic2, nStart, nOffset, nScroll )
******************************************************************
LOCAL nEvent, mp1, mp2, oXbp
nEvent := DC_NextAppEvent(@mp1,@mp2,@oXbp)
IF nEvent = xbeSB_Scroll
RETURN nil
ENDIF
IF a[2] == XBPSB_NEXTPAGE
nOffset += oStatic1:currentSize()[nScroll]
oScroll:setData()
ELSEIF a[2] == XBPSB_PREVPAGE
nOffset -= oStatic1:currentSize()[nScroll]
oScroll:setData()
ELSE
nOffset := a[1]
ENDIF
altd()
IF nScroll = 2
oStatic2:setPos({oStatic2:currentPos()[1],nStart+nOffset})
ELSE
oStatic2:setPos({nStart-nOffset,oStatic2:currentPos()[2]})
ENDIF
RETURN nil