La bordure de l'ImageGadget

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

La bordure de l'ImageGadget

Message par Dr. Dri »

Une fonction, deux macros, et un exemple ^^

Code : Tout sélectionner

Macro ImageGadgetBorderWidth()
  GetSystemMetrics_(#SM_CXEDGE)
EndMacro

Macro ImageGadgetBorderHeight()
  GetSystemMetrics_(#SM_CYEDGE)
EndMacro

Procedure.l SetImageGadgetBorder(Gadget.l, State.l)
  Protected Set.l = #False, GadgetID.l, Style.l
  Protected Width.l, Height.l, Change.l = #False
  
  GadgetID = GadgetID(Gadget)
  
  If GadgetID
    Style = GetWindowLong_(GadgetID, #GWL_EXSTYLE)
    
    Width  = GadgetWidth(Gadget)
    Height = GadgetHeight(Gadget)
    
    If State
      If Not Style & #PB_Image_Border
        Width  + ImageGadgetBorderWidth()  * 2
        Height + ImageGadgetBorderHeight() * 2
        Style |  #PB_Image_Border
        Change = #True
      EndIf
    Else
      If Style & #PB_Image_Border
        Width  - ImageGadgetBorderWidth()  * 2
        Height - ImageGadgetBorderHeight() * 2
        Style & ~#PB_Image_Border
        Change = #True
      EndIf
    EndIf
    
    If Change
      SetWindowLong_(GadgetID, #GWL_EXSTYLE, Style)
      SetWindowPos_(GadgetID, 0, 0, 0, Width, Height, #SWP_NOMOVE | #SWP_FRAMECHANGED)
    EndIf
    
    Set = #True
  EndIf
  
  ProcedureReturn Set
EndProcedure

CreateImage(0, 100, 80)

If StartDrawing( ImageOutput(0) )
  Box(0, 0, 100, 80, #Red)
  Circle(  0,  0, 5, #Blue)
  Circle(  0, 80, 5, #Blue)
  Circle(100,  0, 5, #Blue)
  Circle(100, 80, 5, #Blue)
  
  StopDrawing()
EndIf

If OpenWindow(0, 0, 0, 340, 100, "SetImageGadgetBorder", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  
  ImageGadget(0,  10, 10, 100, 83, ImageID(0))
  ImageGadget(1, 120, 10, 100, 83, ImageID(0), #PB_Image_Border)
  ImageGadget(2, 230, 10, 100, 83, ImageID(0))
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Gadget
      SetImageGadgetBorder(0, #False)
      SetImageGadgetBorder(1, #False)
      SetImageGadgetBorder(2, #False)
      
      SetImageGadgetBorder(EventGadget(), #True)
    EndIf
    
  Until Event = #PB_Event_CloseWindow
EndIf
Dri
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Efficace et pratique, merci Dri.
Tu pourrais appeler ça "ImageToggle" :)
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

A vrai dire j'ai fait une fonction SetGadgetBorder que j'utilise aussi bien avec l'ImageGadget que le StringGadget etc...

La fonction est là, nomme la comme tu veux ^^
J'ai fait un exemple spécifique qui redimensionne le gadget comme le fait PB (ou windows, peut importe) avec le flag au moment de le créer.

Dri ;)
Répondre