Seite 1 von 1
Resize ScrollArea [gelöst]
Verfasst: 19.12.2007 17:47
von Sebastian
Ich kämpfe mit dem Problem, dass ich ein Fenster in der Größe veränderbar halten möchte. In diesem befindet sich ein Scrollareagadget. Dies soll das Fenster ausfüllen und mit in der Größe verändert werden können.
Code: Alles auswählen
If IsWindow(#TileSetWindow)
If WindowEvent()=#PB_Event_SizeWindow
ResizeGadget(#TileSetWindow_Gadget_ScrollArea,0,0,WindowWidth(#TileSetWindow),WindowHeight(#TileSetWindow))
EndIf
EndIf
Leider funktioniert es nicht. Es wird erst mitvergrößert, dann eine Zeit nicht und dann springt die Vergrößertung plötzlich wieder auf die Fenstergröße.
Re: Resize ScrollArea
Verfasst: 19.12.2007 17:53
von Kiffi
Sebastian hat geschrieben:Code: Alles auswählen
If IsWindow(#TileSetWindow)
If WindowEvent()=#PB_Event_SizeWindow ; !!! TADAAA
ResizeGadget(#TileSetWindow_Gadget_ScrollArea,0,0,WindowWidth(#TileSetWindow),WindowHeight(#TileSetWindow))
EndIf
EndIf
innerhalb Deiner Eventschleife WindowEvent()
noch einmal abzufragen ist
eine ganz schlechte Idee. Dadurch werden andere Events verschluckt und es
kann dadurch zu den von Dir geschilderten Problemen kommen.
Tipp: Ganz zu Anfang der Event-Schleife den Rückgabewert von
(Wait-)WindowEvent() in eine Variable speichern und dann nur noch diese
auswerten.
Grüße ... Kiffi
Verfasst: 19.12.2007 17:56
von Thomas
Ich hab mal was im Codearchiv gefunden:
Code: Alles auswählen
Procedure ResizeCallback(hWnd,Msg,wParam,lParam)
Result = #PB_ProcessPureBasicEvents
If Msg = #WM_SIZE
w = lParam & $FFFF
h = (lParam >> 16 ) & $FFFF
Select hWnd
Case WindowID(0)
MoveWindow_(GadgetID(0),0,0,w,h,1)
EndSelect
EndIf
ProcedureReturn Result
EndProcedure
OpenWindow(0,0,0,500,300,"PB_Scrollbar",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ScrollAreaGadget(0,0,0,WindowWidth(0),WindowHeight(0),500,500,10,#PB_ScrollArea_Single)
CloseGadgetList()
SetWindowCallback(@ResizeCallback())
Repeat
Event.l = WaitWindowEvent():
Until Event = 16
End
Vielleicht kannst du damit was anfangen ...
Verfasst: 19.12.2007 17:59
von NicTheQuick
Den Callback braucht man nicht mehr, seitdem '#PB_Window_Resize' korrekt
funktioniert.
Verfasst: 19.12.2007 18:00
von Thomas
Ok, ich dachte halt, bevor ich das Rad neu erfinde, schaue ich erst mal im CodeArchiv ...
aber wie es aussieht, ist der Code schon etwas veraltet^^
Verfasst: 19.12.2007 18:03
von milan1612
Hier mal was natives
Code: Alles auswählen
OpenWindow(0, 0, 0, 320, 180, "Autosize", #PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_SystemMenu)
SmartWindowRefresh(0, 1) ;Damit verhinderst du das Flackern beim vergrößern
CreateGadgetList(WindowID(0))
ButtonGadget(0, 0, 0, 320, 180, "Ich vergrößere mich automatisch ;-)")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_SizeWindow
ResizeGadget(0, 0, 0, WindowWidth(0), WindowHeight(0))
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 0
Break
EndIf
EndSelect
ForEver
End
Verfasst: 19.12.2007 18:07
von Sebastian
Ja klar!!! Ich hätte genauer hinschauen müssen! Vielen Dank!!!