Was mich immer stört ist immer die doppelte Schreibarbeit beim erstellen des Gadgetcode
und beim ResizeGadget. Man erstellt ein Gadget und wenn es an Fenstergröß angepasst werden soll
muss man wieder eine weitere Zeile schreiben.
Code: Alles auswählen
Define e
OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
EditorGadget(0, 5, 5, WindowWidth(0) - 10, (WindowHeight(0) / 2) - 5, 0)
EditorGadget(1, 5, (WindowHeight(0) / 2) + 5, WindowWidth(0) - 10, (WindowHeight(0) / 2) - 10, 0)
Repeat
e = WaitWindowEvent()
If e = #PB_Event_SizeWindow
ResizeGadget(0, 5, 5, WindowWidth(0) - 10, (WindowHeight(0) / 2) - 5)
ResizeGadget(1, 5, (WindowHeight(0) / 2) + 5, WindowWidth(0) - 10, (WindowHeight(0) / 2) - 10)
EndIf
Until e = #PB_Event_CloseWindow
Warum fasst man es nicht zusammen und sagt ich will ein Gadget und soll an der Größe angepasst werden ohne zwei Zeilen schreiben zu müssen?
Müsste irgendwie gehen. Habs versucht und habs geschaft. Ich finde es so viel einfacher und spart zukünftig Schreibarbeit.
Code: Alles auswählen
EnableExplicit
Define Event
Define Editor3
Procedure _CreateResizeGadget(Type$, Gadget, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P1$, P2$, P3$, P4$, P5$)
Protected GadgetNr, GadgetAnyNr, IsGadgetNr
If Gadget > 100000
GadgetNr = #PB_Any
GadgetAnyNr = PeekI(Gadget)
IsGadgetNr = PeekI(Gadget)
Else
GadgetNr = Gadget
IsGadgetNr = Gadget
EndIf
If IsGadget(IsGadgetNr)=0
Select Type$
Case "ButtonGadget" : GadgetAnyNr = ButtonGadget (GadgetNr, P1, P2, P3, P4, P1$, P6)
Case "CanvasGadget" : GadgetAnyNr = CanvasGadget (GadgetNr, P1, P2, P3, P4, P6)
Case "ContainerGadget" : GadgetAnyNr = ContainerGadget (GadgetNr, P1, P2, P3, P4, P6)
Case "ExplorerComboGadget" : GadgetAnyNr = ExplorerComboGadget(GadgetNr, P1, P2, P3, P4, P1$, P6)
Case "FrameGadget" : GadgetAnyNr = FrameGadget (GadgetNr, P1, P2, P3, P4, P1$, P6)
Case "ImageGadget" : GadgetAnyNr = ImageGadget (GadgetNr, P1, P2, P3, P4, P5, P6)
Case "MDIGadget" : GadgetAnyNr = MDIGadget (GadgetNr, P1, P2, P3, P4, P5, P6, P7)
Case "PanelGadget" : GadgetAnyNr = PanelGadget (GadgetNr, P1, P2, P3, P4)
Case "ScrollBarGadget" : GadgetAnyNr = ScrollBarGadget (GadgetNr, P1, P2, P3, P4, P5, P6, P7, P8)
Case "SplitterGadget" : GadgetAnyNr = SplitterGadget (GadgetNr, P1, P2, P3, P4, P5, P6, P7)
Case "TrackBarGadget" : GadgetAnyNr = TrackBarGadget (GadgetNr, P1, P2, P3, P4, P5, P6, P7)
Case "ButtonImageGadget" : GadgetAnyNr = ButtonImageGadget (GadgetNr, P1, P2, P3, P4, P5, P6)
Case "CheckBoxGadget" : GadgetAnyNr = CheckBoxGadget (GadgetNr, P1, P2, P3, P4, P1$, P5)
Case "DateGadget" : GadgetAnyNr = DateGadget (GadgetNr, P1, P2, P3, P4, P1$, P5, P6)
;... soon
Case "EditorGadget" : GadgetAnyNr = EditorGadget (GadgetNr, P1, P2, P3, P4, P6)
EndSelect
EndIf
If Gadget > 100000
PokeI(Gadget, GadgetAnyNr)
ResizeGadget(PeekI(Gadget), P1, P2, P3, P4)
Else
ResizeGadget(Gadget, P1, P2, P3, P4)
EndIf
EndProcedure
Define _, _G, _X, _Y, _W, _H, _T, _F
Macro ButtonGadget(_G, _X, _Y, _W, _H, _T, _F=0) : _CreateResizeGadget("ButtonGadget", _G, _X, _Y, _W, _H, _F, 0, 0, 0, 0, 0, _T, "", "", "", "") : EndMacro
Macro CanvasGadget(_G, _X, _Y, _W, _H, _F=0) : _CreateResizeGadget("CanvasGadget", _G, _X, _Y, _W, _H, _F, 0, 0, 0, 0, 0, "", "", "", "", "") : EndMacro
;... soon
Macro EditorGadget(_G, _X, _Y, _W, _H, _F=0) : _CreateResizeGadget("EditorGadget", _G, _X, _Y, _W, _H, _F, 0, 0, 0, 0, 0, "", "", "", "", "") : EndMacro
OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Repaint Or Event = #PB_Event_SizeWindow
EditorGadget(25, 5, 5, WindowWidth(0) - 10, WindowHeight(0) / 2, 0)
EditorGadget(50, 5, (WindowHeight(0) / 2) + 10, WindowWidth(0) - 10, (WindowHeight(0) / 2) - 35, 0)
ButtonGadget(@Editor3, WindowWidth(0) - 100, WindowHeight(0) - 20, 95, 15, "MyButton", 0)
EndIf
If Event = #PB_Event_Gadget
Select EventGadget()
Case Editor3
Debug "Es geht"
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
Diese Lösung finde ich echt super gut und möchte es mit euch teilen.