Change ScrollAreaGadget inner sizes
Posted: Thu Feb 07, 2008 7:05 pm
No topics found on PB Forums about #PB_ScrollArea_InnerWidth and #PB_ScrollArea_InnerHeight, so here is a small tip to change ScrollAreaGadget inner sizes on the fly.
Code: Select all
;Change ScrollAreaGadget inner sizes
;by einander - feb 2008 - PB 4.10
Structure SAGInnerSize
SAG.l
HorSpin.l
VerSpin.l
IMG.l
ImGad.l
TmpIMG.l
EndStructure
Global _InfoSize
iSag.SAGInnerSize
Procedure SAGSiz(*iSag.SAGInnerSize)
With *iSag
If IsImage(\TmpIMG):FreeImage(\TmpIMG):EndIf
\TmpIMG=GrabImage(\IMG,-1,0,0,ImageWidth(\IMG),ImageHeight(\IMG))
ResizeImage(\TmpIMG,GetGadgetState(\HorSpin)-24,GetGadgetState(\VerSpin)-46)
SetGadgetState(\ImGad,ImageID(\TmpIMG))
SetGadgetAttribute(\SAG, #PB_ScrollArea_InnerWidth ,ImageWidth(\TmpIMG))
SetGadgetAttribute(\SAG, #PB_ScrollArea_InnerHeight ,ImageHeight(\TmpIMG))
SetGadgetText(_InfoSize,Str(GetGadgetState(\HorSpin))+" "+Str(GetGadgetState(\VerSpin)))
EndWith
EndProcedure
Macro GadgetBottom(Gad) : GadgetY(Gad)+GadgetHeight(Gad) : EndMacro
Macro GadgetRight(Gad) : GadgetX(Gad)+GadgetWidth(Gad) : EndMacro
Macro NoFlick(Gad)
SetWindowLong_(GadgetID(Gad), #GWL_EXSTYLE, GetWindowLong_(GadgetID(Gad), #GWL_EXSTYLE) | #WS_EX_COMPOSITED)
EndMacro
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
hwnd=OpenWindow(0,0,0,400,300,"ScrollArea Inner Resize",#WS_OVERLAPPEDWINDOW | #PB_Window_ScreenCentered)
StickyWindow(0,1)
Wi=WindowWidth(0):He=WindowHeight(0)
CreateGadgetList(hwnd)
iSag\IMG=LoadImage(-1,"c:\test1.bmp") ; <<<<<<<<<<<<< Here Your Image <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
iSag\HorSpin=TrackBarGadget(-1,0,0,0,0,80,5000)
SetGadgetState(iSag\HorSpin,WindowWidth(0))
iSag\VerSpin=TrackBarGadget(-1,0,0,0,0,80,5000,#PB_TrackBar_Vertical)
SetGadgetState(iSag\VerSpin,WindowHeight(0))
_BtnFit=ButtonGadget(-1,0,0,0,0,"Fit to window")
_InfoSize=TextGadget(-1,0,0,0,0,"",#PB_Text_Border)
iSag\SAG=ScrollAreaGadget(-1,0,0,0,0,GetGadgetState(iSag\HorSpin),GetGadgetState(iSag\VerSpin),10,#PB_ScrollArea_Center)
NoFlick(iSag\SAG)
iSag\ImGad=ImageGadget(-1,0,0,0,0,0)
SetGadgetColor(iSag\SAG, #PB_Gadget_BackColor,$BBBBBB)
Repeat
If GetAsyncKeyState_(#VK_ESCAPE):End:EndIf
Ev = WaitWindowEvent()
Select Ev
Case #PB_Event_SizeWindow
Wi=WindowWidth(0):He=WindowHeight(0)
ResizeGadget(iSag\SAG,0,0,Wi-20,He-42)
ResizeGadget(iSag\HorSpin,2,GadgetBottom(iSag\SAG)+2,GadgetWidth(iSag\SAG)-2,16)
ResizeGadget(iSag\VerSpin,GadgetRight(iSag\SAG)+2,2,16,GadgetHeight(iSag\SAG)-2)
ResizeGadget(_BtnFit,2,GadgetBottom(iSag\HorSpin)+2,80,20)
ResizeGadget(_InfoSize,GadgetRight(_BtnFit)+2,GadgetBottom(iSag\HorSpin)+2,80,20)
SAGSiz(iSag)
Case #PB_Event_Gadget
Select EventGadget()
Case iSag\HorSpin,iSag\VerSpin
SAGSiz(iSag)
Case _BtnFit
SetGadgetState(iSag\HorSpin,Wi)
SetGadgetState(iSag\VerSpin,He)
SAGSiz(iSag)
EndSelect
Case #PB_Event_CloseWindow: End
EndSelect
ForEver