GadgetAutoSize

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
mirca
Beiträge: 169
Registriert: 13.11.2011 16:05

GadgetAutoSize

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: GadgetAutoSize

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
mk-soft
Beiträge: 3844
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: GadgetAutoSize

Beitrag 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...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: GadgetAutoSize

Beitrag von ts-soft »

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
mirca
Beiträge: 169
Registriert: 13.11.2011 16:05

Re: GadgetAutoSize

Beitrag 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.
Antworten