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 :wink:

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!!!