Gadgeterstellung und Resize vereinfachen

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.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Gadgeterstellung und Resize vereinfachen

Beitrag von Nino »

Ich mache das immer so (cross-platform).
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Gadgeterstellung und Resize vereinfachen

Beitrag von NicTheQuick »

@Tommy:
Da hast du mich falsch verstanden. Ich meinte statt der beschreibenden Strings für Gadgettypen einfach die '#PB_GadgetType_*'-Konstanten nehmen:

Code: Alles auswählen

 EnableExplicit

Define Event
Define Editor3

Procedure _CreateResizeGadget(Type.i, 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 #PB_GadgetType_Button        : GadgetAnyNr = ButtonGadget       (GadgetNr, P1, P2, P3, P4, P1$, P6) 
      Case #PB_GadgetType_Canvas        : GadgetAnyNr = CanvasGadget       (GadgetNr, P1, P2, P3, P4, P6)
      Case #PB_GadgetType_Container     : GadgetAnyNr = ContainerGadget    (GadgetNr, P1, P2, P3, P4, P6)
      Case #PB_GadgetType_ExplorerCombo : GadgetAnyNr = ExplorerComboGadget(GadgetNr, P1, P2, P3, P4, P1$, P6)
      Case #PB_GadgetType_Frame         : GadgetAnyNr = FrameGadget        (GadgetNr, P1, P2, P3, P4, P1$, P6)
      Case #PB_GadgetType_Image         : GadgetAnyNr = ImageGadget        (GadgetNr, P1, P2, P3, P4, P5, P6)
      ;Case "MDIGadget"           : GadgetAnyNr = MDIGadget          (GadgetNr, P1, P2, P3, P4, P5, P6, P7)
      Case #PB_GadgetType_Panel         : GadgetAnyNr = PanelGadget        (GadgetNr, P1, P2, P3, P4)
      Case #PB_GadgetType_ScrollBar     : GadgetAnyNr = ScrollBarGadget    (GadgetNr, P1, P2, P3, P4, P5, P6, P7, P8)
      Case #PB_GadgetType_Splitter      : GadgetAnyNr = SplitterGadget     (GadgetNr, P1, P2, P3, P4, P5, P6, P7)
      Case #PB_GadgetType_TrackBar      : GadgetAnyNr = TrackBarGadget     (GadgetNr, P1, P2, P3, P4, P5, P6, P7)
      Case #PB_GadgetType_ButtonImage   : GadgetAnyNr = ButtonImageGadget  (GadgetNr, P1, P2, P3, P4, P5, P6)
      Case #PB_GadgetType_CheckBox      : GadgetAnyNr = CheckBoxGadget     (GadgetNr, P1, P2, P3, P4, P1$, P5)
      Case #PB_GadgetType_Date          : GadgetAnyNr = DateGadget         (GadgetNr, P1, P2, P3, P4, P1$, P5, P6)
      ;... soon
      Case #PB_GadgetType_Editor        :    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(#PB_GadgetType_Button, _G, _X, _Y, _W, _H, _F, 0, 0, 0, 0, 0, _T, "", "", "", "") : EndMacro
Macro CanvasGadget(_G, _X, _Y, _W, _H,     _F=0) : _CreateResizeGadget(#PB_GadgetType_Canvas, _G, _X, _Y, _W, _H, _F, 0, 0, 0, 0, 0, "", "", "", "", "") : EndMacro
;... soon
Macro EditorGadget(_G, _X, _Y, _W, _H,     _F=0) : _CreateResizeGadget(#PB_GadgetType_Editor, _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) - 45, 0)
    ButtonGadget(@Editor3, WindowWidth(0) - 100, WindowHeight(0) - 30, 95, 25, "MyButton", 0)
  EndIf
  If Event = #PB_Event_Gadget
    Select EventGadget()
      Case Editor3
        Debug "Es geht"
    EndSelect
  EndIf
Until Event = #PB_Event_CloseWindow
Benutzeravatar
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

Re: Gadgeterstellung und Resize vereinfachen

Beitrag von Tommy »

Gute Idee, NicTheQuick, mit den Konstanten. Danke für deine Mit-Hilfe. :allright:
PB 5.41 x64
Antworten