Page 1 sur 1

La bordure de l'ImageGadget

Publié : jeu. 27/juil./2006 10:06
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

Publié : jeu. 27/juil./2006 10:17
par Jacobus
Efficace et pratique, merci Dri.
Tu pourrais appeler ça "ImageToggle" :)

Publié : jeu. 27/juil./2006 14:50
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 ;)