Seite 1 von 1

GadgetAutoSize

Verfasst: 19.10.2013 22:18
von mirca
Hey Freunde :)
Ich hatte eine Idee und habe ein Code geschrieben um leichter seine Gadgets autozusizen
wenn man zb ein Editorgadget automatisch an die Windowgrösse anpassen lassen möchte.
Ich habe bis jetzt nur für Editorgadget gemacht aber bei Bedarf füge ich andere Gadgets
hinzu. Ich würde mich über Feedbacks sehr freuen.

Code: Alles auswählen

Global NewMap AutoSizeGadgets.s()

Procedure EditorGadgetAutoSize(Gadget,x,y,Width,Height,Flags)
  EditorGadget(Gadget,x,y,Width,Height,Flags)
  AutoSizeGadgets(Str(Gadget)) = Str(x)+"|"+Str(y)
EndProcedure

OpenWindow(0,0,0,300,300,"",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)

EditorGadgetAutoSize(0,10,10,0,0,0)

Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_SizeWindow
    ForEach AutoSizeGadgets()
      CurrentGadgetSize$ = AutoSizeGadgets()
      CurrentGadgetSize_Gadget = Val(MapKey(AutoSizeGadgets()))
      CurrentGadgetSize_X = Val(StringField(CurrentGadgetSize$,1,"|"))
      CurrentGadgetSize_Y = Val(StringField(CurrentGadgetSize$,2,"|"))
      ResizeGadget(CurrentGadgetSize_Gadget,CurrentGadgetSize_X,CurrentGadgetSize_Y,WindowWidth(0)-(CurrentGadgetSize_X*2),WindowHeight(0)-(CurrentGadgetSize_Y*2))
    Next
  EndIf
Until Event = #PB_Event_CloseWindow

Re: GadgetAutoSize

Verfasst: 20.10.2013 01:29
von STARGÅTE
Hallo mirca, ich möchte deine Leistung nicht schmälern, aber das geht bedeutend "eleganter" und auch ohne Umwege wie Strings und StringField.

Hier mal eine kleine Erweiterung (funktioniert zur Zeit auch nur mit einem Fenster):

Code: Alles auswählen

;- AutoSize Code

Structure AutoSizeGadget_Offset
	X.f
	Y.f
	Width.i
	Height.i
EndStructure

Structure AutoSizeGadget
	Gadget.i
	X.f
	Y.f
	Width.f
	Height.f
	Offset.AutoSizeGadget_Offset
EndStructure

Global NewList AutoSizeGadget.AutoSizeGadget()

Procedure AutoSizeCallback()
	Protected Width.i = WindowWidth(EventWindow())
	Protected Height.i = WindowHeight(EventWindow())
	ForEach AutoSizeGadget()
		With AutoSizeGadget()
			ResizeGadget(\Gadget, \Offset\X+Width*\X, \Offset\Y+Height*\Y, \Offset\Width+Width*\Width, \Offset\Height+Height*\Height)
		EndWith
	Next
EndProcedure

Procedure AttachAutoSize(Gadget.i, X.f, Y.f, Width.f, Height.f, OffsetX.i=0, OffsetY.i=0, OffsetWidth.i=0, OffsetHeight.i=0)
	AddElement(AutoSizeGadget())
	With AutoSizeGadget()
		\Gadget        = Gadget
		\X             = X
		\Y             = Y
		\Width         = Width
		\Height        = Height
		\Offset\X      = OffsetX
		\Offset\Y      = OffsetY
		\Offset\Width  = OffsetWidth
		\Offset\Height = OffsetHeight
	EndWith
	PostEvent(#PB_Event_SizeWindow)
EndProcedure



;- Beispiel

Enumeration
	#Window
	#Gadget_EditorLeft
	#Gadget_EditorRight
	#Gadget_Button1
	#Gadget_Button2
EndEnumeration

BindEvent(#PB_Event_SizeWindow, @AutoSizeCallback())

OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_SizeGadget|#PB_Window_ScreenCentered)

EditorGadget(#Gadget_EditorLeft, 0, 0, 0, 0) : AttachAutoSize(#Gadget_EditorLeft, 0.0, 0.0, 0.5, 1.0, 10, 10, -15, -55)
EditorGadget(#Gadget_EditorRight, 0, 0, 0, 0) : AttachAutoSize(#Gadget_EditorRight, 0.5, 0.0, 0.5, 0.7, 5, 10, -15, -10)
ButtonGadget(#Gadget_Button1, 0, 0, 0, 0, "Button mit fester Höhe") : AttachAutoSize(#Gadget_Button1, 0.0, 1.0, 0.5, 0.0, 10, -35, -15, 25)
ButtonGadget(#Gadget_Button2, 0, 0, 0, 0, "Button") : AttachAutoSize(#Gadget_Button2, 1.0, 0.7, 0.0, 0.0, -110, 10, 100, 25)

Repeat
	
	Select WaitWindowEvent()
			
		Case #PB_Event_CloseWindow
			End

	EndSelect
	
ForEver
AttachAutoSize() bietet die Möglichkeit relative Lage und Größe zu definieren sowie für Lage und Größe.

Re: GadgetAutoSize

Verfasst: 20.10.2013 10:41
von mk-soft
Gibt es schon sehr Lange :wink:

http://www.purebasic.fr/english/viewtop ... 12&t=10218

P.S. Es hilft manchmal im Forum zu suchen. Mache ich zu mindestens um nicht immer wieder das Rad neu zu erfinden...

Re: GadgetAutoSize

Verfasst: 20.10.2013 10:47
von ts-soft

Re: GadgetAutoSize

Verfasst: 20.10.2013 14:33
von mirca
Jupp die Codes die ihr gepostet und verlinkt habt sind natürlich besser als meins.
Ich habe nicht gewusst das so was schon gibt.