ScrollAreaGadget: ScrollBarWidth?

Anfängerfragen zum Programmieren mit PureBasic.
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

ScrollAreaGadget: ScrollBarWidth?

Beitrag 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 

Signatur und so
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: ScrollAreaGadget: ScrollBarWidth?

Beitrag 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
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: ScrollAreaGadget: ScrollBarWidth?

Beitrag von Derren »

Vielen Dank :) :allright:
Signatur und so
mestnyi
Beiträge: 15
Registriert: 25.02.2014 22:00

Re: ScrollAreaGadget: ScrollBarWidth?

Beitrag von mestnyi »

for Linux as will :iamwithstupid:
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ScrollAreaGadget: ScrollBarWidth?

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: ScrollAreaGadget: ScrollBarWidth?

Beitrag von NicknameFJ »

Vielen Dank RSBasic. Wusste ich nicht.
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Antworten