Basic Univers
EnableExplicit
Enumeration
#Fenetre
#Frame3DGadget = 0
#bouton
EndEnumeration
#WindowTitle = "Dégradé linéaire"
Global FenetreID.l
Global Largeur_Fenetre.l
Global Hauteur_Fenetre.l
Global hauteur_FenetreBlanche.l = 100
Global OldProc.l
Global WindowEvent.l
Global sens = #GRADIENT_FILL_RECT_V
Import "msimg32.lib"
GradientFill(a.l, b.l, c.l, d.l, e.l, f.l) As "_GradientFill@24"
EndImport
Procedure myCallback(window, message, wParam, lParam)
Protected dc.l, ps.PAINTSTRUCT, lpRect.RECT
Protected Dim vert.TRIVERTEX(1)
Protected gRect.GRADIENT_RECT
Select message
Case #WM_PAINT
dc = BeginPaint_(window, @ps)
If dc
If GetClientRect_(window, @lpRect)
vert(0)\x = 0
vert(0)\y = hauteur_FenetreBlanche
vert(0)\Red = $2B00
vert(0)\Green = $3900
vert(0)\Blue = $4400
vert(0)\Alpha = $FF00
vert(1)\x = lpRect\right
vert(1)\y = lpRect\bottom
vert(1)\Red = $9F00
vert(1)\Green = $D200
vert(1)\Blue = $FA00
vert(1)\Alpha = $FF00
gRect\UpperLeft = 0
gRect\LowerRight = 1
GradientFill(dc, @vert(), 2, @gRect, 1, sens)
EndIf
EndPaint_(window, @ps)
ProcedureReturn 0
EndIf
EndSelect
ProcedureReturn CallWindowProc_(OldProc, window, message, wParam, lParam)
EndProcedure
Largeur_Fenetre = 600
Hauteur_Fenetre = Largeur_Fenetre / 1.618033988
If OpenWindow(#Fenetre, 0, 0, Largeur_Fenetre, Hauteur_Fenetre, #WindowTitle, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Invisible)
SetWindowColor(#Fenetre, #White)
FenetreID = WindowID(#Fenetre)
If CreateGadgetList(FenetreID)
Frame3DGadget(#Frame3DGadget, 0, hauteur_FenetreBlanche, WindowWidth(#Fenetre), 1, "", #PB_Frame3D_Flat)
ButtonGadget(#bouton, 40, 320, 100, 30, "Sens du dégradé")
HideWindow(#Fenetre, 0)
OldProc = SetWindowLong_(WindowID(#Fenetre), #GWL_WNDPROC, @myCallback())
Repeat
WindowEvent = WaitWindowEvent()
Select WindowEvent
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If sens = #GRADIENT_FILL_RECT_V
sens = #GRADIENT_FILL_RECT_H
Else
sens = #GRADIENT_FILL_RECT_V
EndIf
RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE)
EndSelect
ForEver
EndIf
EndIf
End