Resize ScrollArea [gelöst]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Resize ScrollArea [gelöst]

Beitrag 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.
Zuletzt geändert von Sebastian am 19.12.2007 18:22, insgesamt 1-mal geändert.
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Resize ScrollArea

Beitrag 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
a²+b²=mc²
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag 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 ...
v6.00
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Den Callback braucht man nicht mehr, seitdem '#PB_Window_Resize' korrekt
funktioniert.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag 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^^
v6.00
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag 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
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag von Sebastian »

Ja klar!!! Ich hätte genauer hinschauen müssen! Vielen Dank!!!
(Win 11 64-bit, PB 6.04 und 6.10)
Antworten