Box (ou Shape) Gadget et LineGadget

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Box (ou Shape) Gadget et LineGadget

Message par Dr. Dri »

maintenant qu'on peut gérer les couleurs des gadgets avec PB un nouveau gadget natif serait bien pratique ^^

Avant pour faire un BoxGadget (ailleurs on trouve aussi "shape control") il fallait passer par un ImageGadget et une image de la taille du gadget pour le faire sans api...

Et avant pour faire une ligne horizontale je mettais une barre d'outils dans un container de hauteur "2" (par exemple dans WinDestroyer)... Ce genre de gadget serait le bienvenu ^^

Code : Tout sélectionner

#PB_Box_Border = #PB_Text_Border

Enumeration
  #PB_Line_Horz
  #PB_Line_Vert
EndEnumeration

Procedure.l BoxGadget(Gadget.l, x.l, y.l, Width.l, Height.l, Color.l, Flags.l = #Null)
  Protected Box.l
  
  Box = TextGadget(Gadget, x, y, Width, Height, #NULL$, Flags)
  If Box
    If Gadget = #PB_Any
      Gadget = Box
    EndIf
    SetGadgetColor(Gadget, #PB_Gadget_BackColor, Color)
  EndIf
  
  ProcedureReturn Box
EndProcedure

Procedure.l LineGadget(Gadget.l, x.l, y.l, Width.l, Height.l, Type.l = #PB_Line_Horz)
  Type & (#PB_Line_Horz | #PB_Line_Vert)
  ProcedureReturn TextGadget(Gadget, x, y, Width, Height, #NULL$, Type + #SS_ETCHEDHORZ)
EndProcedure

If OpenWindow(0, 0, 0, 270, 200, "BoxGadget LineGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  BoxGadget(0, 10,  10, 100, 140, #White, #PB_Box_Border)
  
  LineGadget(1, 10, 160, 250, 2)
  LineGadget(2, 120, 10, 2, 140, #PB_Line_Vert)
  
  BoxGadget(3, 130,  10, 130, 20, #Red)
  BoxGadget(4, 130,  40, 130, 20, #Blue, #PB_Box_Border)
  BoxGadget(5, 130,  70, 130, 20, #Black)
  BoxGadget(6, 130, 100, 130, 20, #Magenta, #PB_Box_Border)
  BoxGadget(7, 130, 130, 130, 20, #Green, #PB_Box_Border)
  
  ButtonGadget(8, 210, 170, 50, 20, "&Quitter")
  AddKeyboardShortcut(0, #PB_Shortcut_Alt|#PB_Shortcut_Q, #SC_CLOSE)
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow Or Event = #PB_Event_Gadget
EndIf
Dri