J'avais besoin d'un petit bouton pour un projet alors je me suis fabriqué un bouton avec un canvas . Du coup j'ai fais une petite librairie compilé à l'aide de Tailbite (comme les grands

Si vous pouviez testez et me dire si je gère bien le truc ce serait cool . Je n'est pas mis d'aide mais bon c'est relativement intuitif.
Lib : http://pic.microtuning.fr/pb/CanvasButton.zip
Source :
Code : Tout sélectionner
; /////////////////////////////////////////////////////////////////////////////
;-# Déclarations
; /////////////////////////////////////////////////////////////////////////////
;Initialisation
Declare CanvasButton_Init()
;Destructeurs
Declare CanvasButton_End()
;Créateurs
Declare.i CanvasButton(GadgetId.i,x.i,y.i,width.i,height.i)
Declare.i CanvasButton2(GadgetId.i,x.i,y.i,width.i,height.i,ImageId.i)
;Couleur du texte
Declare CanvasButton_SetTextFrontColor(GadGetId.i,Color.i)
Declare.i CanvasButton_GetTextFrontColor(GadgetId.i)
;Couleur du fond
Declare CanvasButton_SetBackColor(GadGetId.i,Color.i)
Declare.i CanvasButton_GetBackColor(GadgetId.i)
;Police du texte
Declare CanvasButton_SetFont(GadgetId.i,FontId.i)
Declare.i CanvasButton_GetFont(GadgetId.i)
;Image du boutton
Declare CanvasButton_SetImage(GadgetId.i,ImageId.i)
Declare CanvasButton_SetImage2(GadgetId.i,ImageId.i,Flag.i)
Declare CanvasButton_SetImagePos(GadgetId.i,ImageId.i,x.i,y.i)
Declare.i CanvasButton_GetImage(GadgetId.i)
;Texte du bouton
Declare CanvasButton_SetText(GadgetId.i,Text.s)
Declare CanvasButton_SetText2(GadgetId.i,Text.s,Flag.i)
Declare CanvasButton_SetTextPos(GadgetId.i,Text.s,x.i,y.i)
Declare.s CanvasButton_GetText(GadgetId.i)
Declare _find_element_(GadgetId.i)
Declare _update_canvas_(GadgetId.i)
Declare.i _get_flag_bit(flag.i,bit.i)
; /////////////////////////////////////////////////////////////////////////////
;-# Initialisation
; /////////////////////////////////////////////////////////////////////////////
ProcedureDLL CanvasButton_Init()
Global NewList CanvasButtonList.CanvasButton_Structure()
EndProcedure
; /////////////////////////////////////////////////////////////////////////////
;-# Destructeur
; /////////////////////////////////////////////////////////////////////////////
ProcedureDLL CanvasButton_End()
If ListSize(CanvasButtonList()) > 0
FreeList(CanvasButtonList())
EndIf
EndProcedure
; /////////////////////////////////////////////////////////////////////////////
;-# Constructeurs
; /////////////////////////////////////////////////////////////////////////////
ProcedureDLL.i CanvasButton(GadgetId.i,x.i,y.i,width.i,height.i) ;Nouveau CanvasButton
AddElement(CanvasButtonList())
With CanvasButtonList()
\x = x
\y = y
\width = width
\height = height
\FrontColor = #CBTN_DEFAULT_FRONTCOLOR
\BackColor = #CBTN_DEFAULT_BACKCOLOR
\FontId = #CBTN_DEFAULT_FONTID
\ImageId = -1 ; pas d'image
\ImageX = 0
\ImageY = 0
\TextX = 0
\TextY = 0
id = CanvasGadget(GadgetId,x,y,width,height)
If GadgetId = #PB_Any
\GadgetId = id
Else
\GadgetId = GadgetId
EndIf
EndWith
_update_canvas_(GadgetId)
ProcedureReturn GadgetId
EndProcedure
ProcedureDLL.i CanvasButton2(GadgetId.i,x.i,y.i,width.i,height.i,ImageId.i) ;Nouveau CanvasButton
AddElement(CanvasButtonList())
With CanvasButtonList()
\x = x
\y = y
\width = width
\height = height
\FrontColor = #CBTN_DEFAULT_FRONTCOLOR
\BackColor = #CBTN_DEFAULT_BACKCOLOR
\FontId = #CBTN_DEFAULT_FONTID
\ImageId = ImageId
\ImageX = 0
\ImageY = 0
\TextX = 0
\TextY = 0
id = CanvasGadget(GadgetId,x,y,width,height)
If GadgetId = #PB_Any
\GadgetId = id
Else
\GadgetId = GadgetId
EndIf
EndWith
_update_canvas_(GadgetId)
ProcedureReturn GadgetId
EndProcedure
ProcedureDLL.i CanvasButton3(GadgetId.i,x.i,y.i,width.i,height.i,ImageId.i,Texte.s) ;Nouveau CanvasButton
AddElement(CanvasButtonList())
With CanvasButtonList()
\x = x
\y = y
\width = width
\height = height
\FrontColor = #CBTN_DEFAULT_FRONTCOLOR
\BackColor = #CBTN_DEFAULT_BACKCOLOR
\FontId = #CBTN_DEFAULT_FONTID
\ImageId = ImageId
\ImageX = 0
\ImageY = 0
\Text =Texte
id = CanvasGadget(GadgetId,x,y,width,height)
If GadgetId = #PB_Any
\GadgetId = id
Else
\GadgetId = GadgetId
EndIf
EndWith
;CanvasButton_SetText2(GadgetId,Texte,#CBTN_ALIGN_CENTER|#CBTN_VALIGN_MIDDLE)
StartDrawing(CanvasOutput(GadgetId))
If CanvasButtonList()\FontId <> #CBTN_DEFAULT_FONTID
DrawingFont(FontID(CanvasButtonList()\FontId))
EndIf
CanvasButtonList()\TextY = (CanvasButtonList()\height - TextHeight(Texte))/2
CanvasButtonList()\TextX = (CanvasButtonList()\width - TextWidth(Texte))/2
StopDrawing()
_update_canvas_(GadgetId)
ProcedureReturn GadgetId
EndProcedure
ProcedureDLL.i CanvasButton4(GadgetId.i,x.i,y.i,width.i,height.i,ImageId.i,Texte.s,TexteSpacing.i) ;Nouveau CanvasButton
AddElement(CanvasButtonList())
With CanvasButtonList()
\x = x
\y = y
\width = width
\height = height
\FrontColor = #CBTN_DEFAULT_FRONTCOLOR
\BackColor = #CBTN_DEFAULT_BACKCOLOR
\FontId = #CBTN_DEFAULT_FONTID
\ImageId = ImageId
\ImageX = 0
\ImageY = 0
\Text = Texte
\TextX = TexteSpacing
id = CanvasGadget(GadgetId,x,y,width,height)
If GadgetId = #PB_Any
\GadgetId = id
Else
\GadgetId = GadgetId
EndIf
;CanvasButton_SetText2(GadgetId,Texte,#CBTN_VALIGN_MIDDLE)
;CanvasButton_SetTextPos(GadgetId,Texte,TexteSpacing,CanvasButtonList()\TextY)
StartDrawing(CanvasOutput(GadgetId))
If \FontId <> #CBTN_DEFAULT_FONTID
DrawingFont(FontID(\FontId))
EndIf
\TextY = (\height - TextHeight(Texte))/2
\ImageY = (\height - ImageHeight(ImageId))/2
StopDrawing()
EndWith
_update_canvas_(GadgetId)
ProcedureReturn GadgetId
EndProcedure
; /////////////////////////////////////////////////////////////////////////////
;-# Procedures Public
; /////////////////////////////////////////////////////////////////////////////
ProcedureDLL CanvasButton_SetTextFrontColor(GadgetId.i,Color.i) ;Change la couleur du texte du bouton
SelectElement(CanvasButtonList(),_find_element_(GadgetId))
CanvasButtonList()\FrontColor = Color
_update_canvas_(GadgetId)
EndProcedure
ProcedureDLL.i CanvasButton_GetTextFrontColor(GadgetId.i) ;Renvoie la couleur du texte du bouton
SelectElement(CanvasButtonList(),_find_element_(GadgetId))
ProcedureReturn CanvasButtonList()\FrontColor
EndProcedure
ProcedureDLL CanvasButton_SetBackColor(GadgetId.i,Color.i) ;Affecte la couleur de fond
SelectElement(CanvasButtonList(),_find_element_(GadgetId))
CanvasButtonList()\BackColor = Color
_update_canvas_(GadgetId)
EndProcedure
ProcedureDLL.i CanvasButton_GetBackColor(GadgetId.i) ;Renvoie la couleur de fond
SelectElement(CanvasButtonList(),_find_element_(GadgetId))
ProcedureReturn CanvasButtonList()\BackColor
EndProcedure
ProcedureDLL CanvasButton_SetFont(GadgetId.i,FontId.i) ;Change la police de caractère
SelectElement(CanvasButtonList(),_find_element_(GadgetId))
CanvasButtonList()\FontId = FontId
_update_canvas_(GadgetId)
EndProcedure
ProcedureDLL.i CanvasButton_GetFont(GadgetId.i) ;Change la police de caractère
SelectElement(CanvasButtonList(),_find_element_(GadgetId))
ProcedureReturn CanvasButtonList()\FontId
EndProcedure
ProcedureDLL CanvasButton_SetImage(GadgetId.i,ImageId.i) ;Affecte une image au bouton
SelectElement(CanvasButtonList(),_find_element_(GadgetId))
CanvasButtonList()\ImageId = ImageId
_update_canvas_(GadgetId)
EndProcedure
ProcedureDLL CanvasButton_SetImage2(GadgetId.i,ImageId.i,Flag.i) ;Affecte une image au bouton
SelectElement(CanvasButtonList(),_find_element_(GadgetId))
CanvasButtonList()\ImageId = ImageId
StartDrawing(CanvasOutput(GadgetId))
;Check Flag
If _get_flag_bit(Flag,0)
CanvasButtonList()\ImageY = 0
ElseIf _get_flag_bit(Flag,1)
CanvasButtonList()\ImageY = (CanvasButtonList()\height - ImageHeight(CanvasButtonList()\ImageId))/2
ElseIf _get_flag_bit(Flag,2)
CanvasButtonList()\ImageY = CanvasButtonList()\height - ImageHeight(CanvasButtonList()\ImageId)
EndIf
If _get_flag_bit(Flag,3)
CanvasButtonList()\ImageX = 0
ElseIf _get_flag_bit(Flag,4)
CanvasButtonList()\ImageX = (CanvasButtonList()\width - ImageWidth(CanvasButtonList()\ImageID))/2
ElseIf _get_flag_bit(Flag,5)
CanvasButtonList()\ImageX = CanvasButtonList()\width - ImageWidth(CanvasButtonList()\ImageId)
EndIf
StopDrawing()
_update_canvas_(GadgetId)
EndProcedure
ProcedureDLL CanvasButton_SetImagePos(GadgetId.i,ImageId.i,x.i,y.i) ;Positionne l'image
SelectElement(CanvasButtonList(),_find_element_(GadgetId.i))
CanvasButtonList()\ImageId = ImageId
CanvasButtonList()\ImageX = x
CanvasButtonList()\ImageY = y
_update_canvas_(GadgetId.i)
EndProcedure
ProcedureDLL.i CanvasButton_GetImage(GadgetId.i) ;Renvoie l'image du gadget
SelectElement(CanvasButtonList(),_find_element_(GadgetId))
ProcedureReturn CanvasButtonList()\ImageId
EndProcedure
ProcedureDLL CanvasButton_SetText(GadgetId.i,Text.s) ;Affecte un texte au gadget
SelectElement(CanvasButtonList(),_find_element_(GadgetId.i))
CanvasButtonList()\Text = Text
_update_canvas_(GadgetId.i)
EndProcedure
ProcedureDLL CanvasButton_SetText2(GadgetId.i,Text.s,Flag.i) ;Affecte un texte au gadget
SelectElement(CanvasButtonList(),_find_element_(GadgetId.i))
CanvasButtonList()\Text = Text
StartDrawing(CanvasOutput(GadgetId))
If CanvasButtonList()\FontId <> #CBTN_DEFAULT_FONTID
DrawingFont(FontID(CanvasButtonList()\FontId))
EndIf
;Check Flag
If _get_flag_bit(Flag,0) ;#CBTN_VALIGN_TOP
CanvasButtonList()\TextY = 0
ElseIf _get_flag_bit(Flag,1) ;#CBTN_VALIGN_MIDDLE
CanvasButtonList()\TextY = (CanvasButtonList()\height - TextHeight(Text))/2
ElseIf _get_flag_bit(Flag,2) ; #CBTN_VALIGN_BOTTOM
CanvasButtonList()\TextY = CanvasButtonList()\height - TextHeight(Text)
EndIf
If _get_flag_bit(Flag,3) ; #CBTN_ALIGN_LEFT
CanvasButtonList()\TextX = 0
ElseIf _get_flag_bit(Flag,4) ; #CBTN_ALIGN_CENTER
CanvasButtonList()\TextX = (CanvasButtonList()\width - TextWidth(Text))/2
ElseIf _get_flag_bit(Flag,5) ; #CBTN_ALIGN_RIGHT
CanvasButtonList()\TextX = CanvasButtonList()\width - TextWidth(Text)
EndIf
StopDrawing()
_update_canvas_(GadgetId.i)
EndProcedure
ProcedureDLL CanvasButton_SetTextPos(GadgetId.i,Text.s,x.i,y.i) ;Positionne le texte
SelectElement(CanvasButtonList(),_find_element_(GadgetId.i))
CanvasButtonList()\Text = Text
CanvasButtonList()\TextX = x
CanvasButtonList()\TextY = y
_update_canvas_(GadgetId.i)
EndProcedure
ProcedureDLL.s CanvasButton_GetText(GadgetId.i) ;Renvoie le texte du gadget
SelectElement(CanvasButtonList(),_find_element_(GadgetId))
ProcedureReturn CanvasButtonList()\Text
EndProcedure
; /////////////////////////////////////////////////////////////////////////////
;-# Procedures Internes
; /////////////////////////////////////////////////////////////////////////////
Procedure _get_flag_bit(flag.i,bit.i) ; Opération sur les Bits pour la gestions des flags
ProcedureReturn ((flag) & (1 << (bit)))
EndProcedure
Procedure.i _find_element_(GadgetId.i) ; Retrouve l'index du gadget spécifié
ForEach CanvasButtonList()
If CanvasButtonList()\GadgetId = GadgetId
ProcedureReturn ListIndex(CanvasButtonList())
EndIf
Next
EndProcedure
Procedure _update_canvas_(GadgetId.i) ; Redessine le gadget spécifié
SelectElement(CanvasButtonList(),_find_element_(GadgetId))
With CanvasButtonList()
StartDrawing(CanvasOutput(\GadgetId))
Box(0,0,\width,\height,\BackColor)
If \ImageId <> -1 And IsImage(\ImageId)
DrawAlphaImage(ImageID(\ImageId),\ImageX,\ImageY)
EndIf
DrawingMode(#PB_2DDrawing_Transparent)
If \FontId <> #CBTN_DEFAULT_FONTID
DrawingFont(FontID(\FontId))
EndIf
DrawText(\TextX,\TextY,\Text,\FrontColor)
StopDrawing()
EndWith
EndProcedure
Code : Tout sélectionner
; /////////////////////////////////////////////////////////////////////////////
;-# Constantes
; /////////////////////////////////////////////////////////////////////////////
#CBTN_DEFAULT_FRONTCOLOR = $000000
#CBTN_DEFAULT_BACKCOLOR = $F0F0F0
#CBTN_DEFAULT_FONTID = -1
#CBTN_VALIGN_TOP = 1
#CBTN_VALIGN_MIDDLE = 2
#CBTN_VALIGN_BOTTOM = 4
#CBTN_ALIGN_LEFT = 8
#CBTN_ALIGN_CENTER = 16
#CBTN_ALIGN_RIGHT = 32
; /////////////////////////////////////////////////////////////////////////////
;-# Structures
; /////////////////////////////////////////////////////////////////////////////
Structure Gadget_Structure
GadgetId.i
x.i
y.i
width.i
height.i
EndStructure
Structure CanvasButton_Structure Extends Gadget_Structure
FrontColor.i
BackColor.i
FontId.i
Text.s
TextX.i
TextY.i
ImageId.i
ImageX.i
ImageY.i
EndStructure
Dans le Zip

@+