How about something like this Mistrel. It's not perfect but maybe it's less code with the same results
Code: Select all
UseJPEGImageDecoder()
If OpenWindow(0, 0, 0, 400, 400, "ScrollArea Test", #PB_Window_SizeGadget | #PB_Window_ScreenCentered | #PB_Window_SystemMenu) And CreateGadgetList(WindowID(0))
;CreateImage(0, 80, 80)
ScrollAreaGadget(0, 10, 10, 380, 380, 450, 450, 10);, #PB_ScrollArea_BorderLess)
ImageGadget(1, 10, 10, 80, 80, CatchImage(0, ?myImage))
CloseGadgetList()
;... Disable XP Theme for the ScrollAreaGadget
;... The result should be flat scroll bars
If OSVersion() >= #PB_OS_Windows_XP
If OpenLibrary(0, "uxtheme.dll")
If CallFunction(0, "SetWindowTheme", GadgetID(0), @null.w, @null.w) = 0
Debug "Theme turned off for ScrollAreaGadget"
EndIf
CloseLibrary(0)
EndIf
EndIf
Repeat
event = WaitWindowEvent()
If event = #PB_Event_SizeWindow
ResizeGadget(0, 10, 10, WindowWidth(0)-20, WindowHeight(0)-20)
;... The ScrollAreaGadget removes the #WS_HSCROLL / #WS_VSCROLL
;... as they become un-necessary. We will make sure they stay visible at all times
;... I tried using #SIF_DISABLENOSCROLL but it was a no-go for me
style = GetWindowLong_(GadgetID(0), #GWL_STYLE)
If Not style & #WS_HSCROLL
SetWindowLong_(GadgetID(0), #GWL_STYLE, style | #WS_HSCROLL)
EnableScrollBar_(GadgetID(0), #SB_HORZ, #ESB_DISABLE_BOTH)
sbHorz = 0
EndIf
If GadgetWidth(0) <= GetGadgetAttribute(0, #PB_ScrollArea_InnerWidth) And sb = 0
sbHorz = 1
EnableScrollBar_(GadgetID(0), #SB_HORZ, #ESB_ENABLE_BOTH)
EndIf
If Not style & #WS_VSCROLL
SetWindowLong_(GadgetID(0), #GWL_STYLE, style | #WS_VSCROLL)
EnableScrollBar_(GadgetID(0), #SB_VERT, #ESB_DISABLE_BOTH)
sbVert = 0
EndIf
If GadgetHeight(0) <= GetGadgetAttribute(0, #PB_ScrollArea_InnerHeight) And sbVert = 0
sbVert = 1
EnableScrollBar_(GadgetID(0), #SB_VERT, #ESB_ENABLE_BOTH)
EndIf
EndIf
Until event = #PB_Event_CloseWindow
EndIf
End
DataSection
myImage:
Data.b $FF,$D8,$FF,$E0,$00,$10,$4A,$46,$49,$46,$00,$01,$01,$01,$00,$48
Data.b $00,$48,$00,$00,$FF,$DB,$00,$43,$00,$72,$4F,$56,$64,$56,$47,$72
Data.b $64,$5D,$64,$81,$79,$72,$88,$AB,$FF,$BA,$AB,$9D,$9D,$AB,$FF,$FA
Data.b $FF,$CF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$C0,$00,$0B,$08,$00,$4D
Data.b $00,$46,$01,$01,$11,$00,$FF,$C4,$00,$18,$00,$00,$03,$01,$01,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$02,$03,$04
Data.b $FF,$C4,$00,$22,$10,$00,$02,$02,$02,$03,$00,$01,$05,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$01,$02,$11,$21,$31,$03,$12,$41,$04,$13
Data.b $22,$32,$51,$61,$FF,$DA,$00,$08,$01,$01,$00,$00,$3F,$00,$88,$FD
Data.b $AE,$D3,$2A,$52,$C6,$3D,$33,$6F,$16,$18,$A1,$00,$50,$50,$51,$52
Data.b $95,$2A,$44,$5E,$47,$B0,$AA,$0A,$C8,$68,$02,$E8,$2C,$92,$A1,$1E
Data.b $C5,$F5,$0E,$A5,$52,$48,$96,$AD,$19,$0D,$30,$6C,$46,$BC,$5F,$8B
Data.b $29,$80,$9B,$15,$D1,$93,$D8,$00,$17,$C6,$E9,$9A,$36,$2B,$44,$B9
Data.b $50,$94,$B2,$29,$EC,$90,$02,$A0,$E9,$95,$3D,$10,$AD,$B2,$A5,$1C
Data.b $09,$2A,$09,$BC,$92,$03,$A0,$5B,$35,$AC,$53,$D8,$A8,$1B,$11,$12
Data.b $D8,$50,$8D,$23,$C7,$37,$E1,$A7,$1F,$0F,$57,$72,$79,$1F,$22,$A9
Data.b $59,$0C,$96,$09,$1A,$CB,$8B,$BC,$6D,$6C,$CF,$E8,$CE,$E8,$6F,$E3
Data.b $CB,$C6,$74,$12,$4C,$BF,$A4,$75,$FD,$10,$ED,$78,$5F,$1C,$3D,$66
Data.b $CA,$69,$22,$EF,$02,$B2,$44,$02,$A1,$49,$24,$AE,$81,$2B,$F4,$B4
Data.b $87,$E1,$36,$7F,$FF,$D9
EndDataSection