Seite 1 von 1

ScrollAreaGadget: ScrollBarWidth?

Verfasst: 16.11.2014 16:35
von Derren
Hallo liebe Gemeinde

Ich versuche gerade ein paar Gadgets in ein ScrollAreaGadget zu packen und möchte, dass die Gadgets die gesamte Breite ausnutzen.
Wenn ich das Fenster dann verkleinere, erscheint rechts die Scrollleiste, so weit so gut. Jetzt nimmt diese Scrollleiste aber einige Pixel der ScrollArea-Breite weg. Das heißt die Gadgets "stehen über", was die horizontale Scrollleiste auf den Plan ruft.
Selbst wenn ich diese mit API oder so verstecke, sieht es immernoch bescheuert aus wenn die rechten 20 Pixel oder so von der Scrollleiste überdeckt werden.

GetGadgetAttribute(#ScrollArea, #PB_ScrollArea_InnerWidth) gibt leider immer den eingestellten Wert zurück, egal ob da eine Scrollleiste Platz wegnimmt oder nicht.

Gibt es irgendeine Möglichkeit das ganze "schön" zu gestalten, oder muss ich mit einem Puffer am rechten Rand leben?


Hier mal ein kurzer Beispielcode. Eigentlich sollte der Button in der Breite resized werden, aber das hab ich mir jetzt gespart, weil ich ncht weiß wie ich an den korrekten Wert komme...

Code: Alles auswählen

Enumeration 
	#Scroll
	#Button
EndEnumeration 

Define event

OpenWindow(0, 0, 0, 300, 300, "ScrollArea Test", #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget)
ScrollAreaGadget(#Scroll, 0, 0, 300, 300, 300, 400)
ButtonGadget(#Button, 0, 0, 300, 400, "B L A")
CloseGadgetList()

Repeat 
	event = WaitWindowEvent()
	Select event
		Case #PB_Event_CloseWindow
			End 
			
		Case #PB_Event_SizeWindow 
			ResizeGadget(#Scroll, 0, 0, WindowWidth(0), WindowHeight(0))			
			
			
			ResizeGadget(#Button, 0, 0, GetGadgetAttribute(#Scroll, #PB_ScrollArea_InnerWidth), 500)
			
			
	EndSelect 
ForEver 


Re: ScrollAreaGadget: ScrollBarWidth?

Verfasst: 16.11.2014 17:43
von NicknameFJ
Hi Deren,

probier mal diesen Ansatz.

Code: Alles auswählen

Enumeration
  #Scroll
  #Button
EndEnumeration

Define event

OpenWindow(0, 0, 0, 300, 300, "ScrollArea Test", #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget)
ScrollAreaGadget(#Scroll, 0, 0, 300, 300, 300, 400)
ButtonGadget(#Button, 0, 0, 300, 20, "B L A")
CloseGadgetList()

Repeat
  event = WaitWindowEvent()
  Select event
    Case #PB_Event_CloseWindow
      End
      
    Case #PB_Event_SizeWindow
      
      ResizeGadget(#Scroll, 0, 0, WindowWidth(0), WindowHeight(0))         
      
      Versatz = 0
      style.L = GetWindowLong_(GadgetID(#scroll), #GWL_STYLE)
      
      If style & #WS_VSCROLL <> 0
        Debug "Scroller vorhanden"       
        Versatz = GetSystemMetrics_(#SM_CXVSCROLL) 
        
      EndIf
      
      ResizeGadget(#Button, 0, 0, WindowWidth(0)-Versatz, 500)
      
  EndSelect
ForEver 
NicknameFJ

Re: ScrollAreaGadget: ScrollBarWidth?

Verfasst: 16.11.2014 23:30
von Derren
Vielen Dank :) :allright:

Re: ScrollAreaGadget: ScrollBarWidth?

Verfasst: 19.11.2014 15:34
von mestnyi
for Linux as will :iamwithstupid:

Re: ScrollAreaGadget: ScrollBarWidth?

Verfasst: 19.11.2014 17:01
von RSBasic
Allgemein: Bitte immer GetWindowLongPtr_() benutzen. GetWindowLong_() ist veraltet.
MSDN hat geschrieben:If you are retrieving a pointer or a handle, this function has been superseded by the GetWindowLongPtr function. (Pointers and handles are 32 bits on 32-bit Windows and 64 bits on 64-bit Windows.) To write code that is compatible with both 32-bit and 64-bit versions of Windows, use GetWindowLongPtr.

Re: ScrollAreaGadget: ScrollBarWidth?

Verfasst: 19.11.2014 19:21
von NicknameFJ
Vielen Dank RSBasic. Wusste ich nicht.