Hi Green Snake,
das war genau das was ich gesucht habe

. Danke.
Scrolling hab ich an sich schon drin, also so, dass man mit einem ScrollAreaGadget das Feld verschieben kann.
Wahrscheinlich hast du das gemeint. Hier auch noch mal der Code (dürften keine Fragen mehr offen bleiben

).
Habs noch ein bisschen angepasst:
Code: Alles auswählen
; Dummy-Bild
CreateImage(0, 279, 781)
StartDrawing(ImageOutput(0))
For i=1 To 77
Line(10, i*10, 259, 0, $FFFFFF)
Next
StopDrawing()
; zwei verschiedene 'Fensterzustaende'
Procedure CB_1(hWnd.l,Message.l,wParam.l,lParam)
Protected *MinMax.MINMAXINFO
Select Message
Case #WM_GETMINMAXINFO
*MinMax = lParam
*MinMax\ptMinTrackSize\x = 304
*MinMax\ptMaxTrackSize\x = 304
*MinMax\ptMinTrackSize\y = 100
*MinMax\ptMaxTrackSize\y = 815
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Procedure CB_2(hWnd.l,Message.l,wParam.l,lParam)
Protected *MinMax.MINMAXINFO
Select Message
Case #WM_GETMINMAXINFO
*MinMax = lParam
*MinMax\ptMinTrackSize\x = 287
*MinMax\ptMaxTrackSize\x = 287
*MinMax\ptMinTrackSize\y = 100
*MinMax\ptMaxTrackSize\y = 815
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
; Fenster mit Gadgets
OpenWindow(0, 0, 0, 296, 500, "Spieloberflaeche", #PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget)
CreateGadgetList(WindowID(0))
ScrollAreaGadget(0, 0, 0, 296, WindowHeight(0), 279, 781, 1, #PB_ScrollArea_BorderLess)
ImageGadget(1, 0, 0, 279, 781, ImageID(0))
SetWindowCallback(@CB_1())
; Event-Schleife
resize = -1
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_SizeWindow
If (resize = 1)
ResizeGadget(0, #PB_Ignore, #PB_Ignore, #PB_Ignore, 819)
SetWindowCallback(@CB_2())
ResizeWindow(0, #PB_Ignore, #PB_Ignore, 281, #PB_Ignore)
resize + 1
EndIf
If (resize <= 0)
resize + 1
EndIf
Case #WM_LBUTTONUP
If (resize)
ResizeGadget(0, #PB_Ignore, #PB_Ignore, #PB_Ignore, WindowHeight(0))
If (WindowHeight(0) = 781)
SetWindowCallback(@CB_2())
ResizeWindow(0, #PB_Ignore, #PB_Ignore, 281, #PB_Ignore)
Else
SetWindowCallback(@CB_1())
ResizeWindow(0, #PB_Ignore, #PB_Ignore, 296, #PB_Ignore)
EndIf
resize = 0
EndIf
EndSelect
ForEver
Funktioniert einwandfrei.
Nur das 'Resizen' ist etwas umständlich, aber wenn man das so macht:
Code: Alles auswählen
...
Case #PB_Event_SizeWindow
ResizeGadget(0, #PB_Ignore, #PB_Ignore, WindowWidth(0), WindowHeight(0))
...
...
Hat man das Problem, dass wenn die Fenstergröße verändert wird die Gadgets beim Anpassen flackern.
Oder kann man das mit einer eleganteren Lösung (als im Code oben) verhindern?