
mais comme ça on s'y retrouve mieux

SPH mat mon code et apres dit moi si ça c'est pas mieux heinLa dayvid, tu ne peux pas dire qu'on ne peux pas dessiner a 100% un bouton !!

SPH mat mon code et apres dit moi si ça c'est pas mieux heinLa dayvid, tu ne peux pas dire qu'on ne peux pas dessiner a 100% un bouton !!
J'ai matté ton code mais je pense qu'on peux faire pareil en beaucoup plus court !!!!!!dayvid a écrit :SPH mat mon code et apres dit moi si ça c'est pas mieux hein
Code : Tout sélectionner
UseJPEGImageDecoder()
;Un gadget est il survolé (Joli macro hein ?"
Macro GadgetHoverCheck(x, y, Gadget)
(((Not x<GadgetX(Gadget)) & (Not y<GadgetY(Gadget))) &(Not x>=(GadgetX(Gadget)+GadgetWidth(Gadget))) & (Not y>=(GadgetY(Gadget)+GadgetHeight(gadget))))
EndMacro
Enumeration
#MainForm
#ButtonImage ;Bouton Image
#ImageState_Normal
#ImageState_Hover
#ImageState_Click
EndEnumeration
;Affichage de notre fenetre
Procedure MainFormShow()
;Chargement des 'images
LoadImage(#ImageState_Normal, "bouton10.jpg")
LoadImage(#ImageState_Hover, "bouton11.jpg")
LoadImage(#ImageState_Click, "bouton12.jpg")
OpenWindow(#MainForm,0,0,500,300,"Bouton Image Rollover",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
ImageGadget(#ButtonImage,10,20,106,32,ImageID(#ImageState_Normal))
EndProcedure
;Evenement souris (Valeur retournée 0:Rien, 1 : Clique gauche, 2:Clique 3, 3:Clique milieu
Procedure EventMouse()
If GetActiveWindow()<>-1
ProcedureReturn Abs(GetAsyncKeyState_(#VK_LBUTTON) + GetAsyncKeyState_(#VK_RBUTTON)*2 + GetAsyncKeyState_(#VK_MBUTTON)*3)/$8000
EndIf
EndProcedure
MainFormShow()
Repeat
Select EventMouse()
Case 0 ;Bouton Relaché
If GadgetHoverCheck(WindowMouseX(#mainform), WindowMouseY(#mainform), #ButtonImage)
SetGadgetState(#ButtonImage, ImageID(#ImageState_Hover))
Else
SetGadgetState(#ButtonImage, ImageID(#ImageState_Normal))
EndIf
Case 1
If GadgetHoverCheck(WindowMouseX(#mainform), WindowMouseY(#mainform), #ButtonImage)
SetGadgetState(#ButtonImage, ImageID(#ImageState_Click))
MessageRequester("Information", "Joli bouton non ?")
Else
SetGadgetState(#ButtonImage, ImageID(#ImageState_Normal))
EndIf
EndSelect
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Regarde ce que j'ai fais : une detection de boutton non rectangulaire :dayvid a écrit :Bon ba voilà donc personne ne m'as aider
alors je vous met un 0 pointer a tous![]()
voici the monster
http://www.archive-host.com/files/88275 ... _maison.7z
C du boulot![]()
vous trouvé sa comment
Comment sa ?EDIT : dayvid, qu'est ce que tu fais ? Tu t'es barré ou quoi ??
Oui, comme je te l'ai suggeré.dayvid a écrit :Bon je suis en train de tous recommencer depuis le debut pour faire beaucoup plus simple
Code : Tout sélectionner
UsePNGImageDecoder()
UseJPEG2000ImageDecoder()
UseJPEGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
Enumeration
#Window_0
#Planche_Image
#Image_sur_planche
#ImageGadget
#Identifient_Image_Bouton_1
#Numero_Image_personnaliser_Bouton_1
#Police_texte_Bouton_1
EndEnumeration
#FONT_NORMAL = %00000000
#FONT_BOLD = %00000001
#FONT_ITALIC = %00000010
#FONT_UNDERLINE = %00000100
#FONT_STRIKEOUT = %00001000
Global Bouton_1_X = 100
Global Bouton_1_Y = 20
Global Bouton_1_L = 300
Global Bouton_1_H = 250
Global Mode_bordure_1_haute_Bouton_1$ = ""
Global Mode_bordure_1_droite_Bouton_1$ = "degrader"
Global Mode_bordure_1_bas_Bouton_1$ = ""
Global Mode_bordure_1_gauche_Bouton_1$ = "degrader"
Global Couleur_1_degrader_bordure_1_haute_Bouton_1 = RGB(255, 0, 0)
Global Couleur_1_degrader_bordure_1_droite_Bouton_1 = RGB(0, 0, 255)
Global Couleur_1_degrader_bordure_1_bas_Bouton_1 = RGB(0, 0, 0)
Global Couleur_1_degrader_bordure_1_gauche_Bouton_1 = RGB(255, 0, 0)
Global Couleur_2_degrader_bordure_1_haute_Bouton_1 = RGB(0, 0, 255)
Global Couleur_2_degrader_bordure_1_droite_Bouton_1 = RGB(255, 0, 0)
Global Couleur_2_degrader_bordure_1_bas_Bouton_1 = RGB(0, 0, 255)
Global Couleur_2_degrader_bordure_1_gauche_Bouton_1 = RGB(0, 0, 255)
Global Mode_face_Bouton_1$ = "degrader"
Global Couleur_1_degrader_face_Bouton_1 = RGB(255, 198, 0)
Global Couleur_2_degrader_face_Bouton_1 = RGB(0, 0, 255)
Global Transparence_Face_Bouton_1 = 255
Global Transparence_bordure_1_haute_Bouton_1 = 255
Global Transparence_bordure_1_droite_Bouton_1 = 255
Global Transparence_bordure_1_bas_Bouton_1 = 255
Global Transparence_bordure_1_gauche_Bouton_1 = 255
Global Couleur_face_Bouton_1 = RGBA(255, 198, 0, Transparence_Face_Bouton_1)
; Global Couleur_bordure_1_haute_Bouton_1 = RGBA(255, 255, 255, Transparence_bordure_1_haute_Bouton_1)
; Global Couleur_bordure_1_droite_Bouton_1 = RGBA(105, 105, 105, Transparence_bordure_1_droite_Bouton_1)
; Global Couleur_bordure_1_bas_Bouton_1 = RGBA(105, 105, 105, Transparence_bordure_1_bas_Bouton_1)
; Global Couleur_bordure_1_gauche_Bouton_1 = RGBA(255, 255, 255, Transparence_bordure_1_gauche_Bouton_1)
Global Couleur_bordure_1_haute_Bouton_1 = RGBA(0, 0, 255, Transparence_bordure_1_haute_Bouton_1)
Global Couleur_bordure_1_droite_Bouton_1 = RGBA(105, 105, 105, Transparence_bordure_1_droite_Bouton_1)
Global Couleur_bordure_1_bas_Bouton_1 = RGBA(255, 0, 0, Transparence_bordure_1_bas_Bouton_1)
Global Couleur_bordure_1_gauche_Bouton_1 = RGBA(255, 255, 255, Transparence_bordure_1_gauche_Bouton_1)
Global Epaisseur_bordure_1_haute_Bouton_1 = 1
Global Epaisseur_bordure_1_droite_Bouton_1 = 1
Global Epaisseur_bordure_1_bas_Bouton_1 = 1
Global Epaisseur_bordure_1_gauche_Bouton_1 = 1
Global Arrondi_face_X_Bouton_1 = 0
Global Arrondi_face_Y_Bouton_1 = 0
Global Arrondi_bordure_1_haute_X_Bouton_1 = 0
Global Arrondi_bordure_1_haute_Y_Bouton_1 = 0
Global Arrondi_bordure_1_droite_X_Bouton_1 = 0
Global Arrondi_bordure_1_droite_Y_Bouton_1 = 0
Global Arrondi_bordure_1_bas_X_Bouton_1 = 0
Global Arrondi_bordure_1_bas_Y_Bouton_1 = 0
Global Arrondi_bordure_1_gauche_X_Bouton_1 = 0
Global Arrondi_bordure_1_gauche_Y_Bouton_1 = 0
Global DrawingMode_bordure_1_haute_Bouton_1 = #PB_2DDrawing_Default
Global DrawingMode_bordure_1_droite_Bouton_1 = #PB_2DDrawing_Default
Global DrawingMode_bordure_1_bas_Bouton_1 = #PB_2DDrawing_Default
Global DrawingMode_bordure_1_gauche_Bouton_1 = #PB_2DDrawing_Default
Global Mode_bordure_2_haute_Bouton_1$ = ""
Global Mode_bordure_2_droite_Bouton_1$ = "degrader"
Global Mode_bordure_2_bas_Bouton_1$ = ""
Global Mode_bordure_2_gauche_Bouton_1$ = "degrader"
Global Couleur_1_degrader_bordure_2_haute_Bouton_1 = RGB(255, 0, 0)
Global Couleur_1_degrader_bordure_2_droite_Bouton_1 = RGB(255, 0, 0)
Global Couleur_1_degrader_bordure_2_bas_Bouton_1 = RGB(255, 0, 0)
Global Couleur_1_degrader_bordure_2_gauche_Bouton_1 = RGB(0, 0, 255)
Global Couleur_2_degrader_bordure_2_haute_Bouton_1 = RGB(0, 0, 255)
Global Couleur_2_degrader_bordure_2_droite_Bouton_1 = RGB(0, 0, 255)
Global Couleur_2_degrader_bordure_2_bas_Bouton_1 = RGB(0, 0, 255)
Global Couleur_2_degrader_bordure_2_gauche_Bouton_1 = RGB(255, 0, 0)
Global Transparence_bordure_2_haute_Bouton_1 = 255
Global Transparence_bordure_2_droite_Bouton_1 = 255
Global Transparence_bordure_2_bas_Bouton_1 = 255
Global Transparence_bordure_2_gauche_Bouton_1 = 255
Global Couleur_face_Bouton_1 = RGBA(255, 198, 0, Transparence_Face_Bouton_1)
;
; Global Couleur_bordure_2_haute_Bouton_1 = RGBA(227, 227, 227, Transparence_bordure_2_haute_Bouton_1)
; Global Couleur_bordure_2_droite_Bouton_1 = RGBA(160, 160, 160, Transparence_bordure_2_droite_Bouton_1)
; Global Couleur_bordure_2_bas_Bouton_1 = RGBA(160, 160, 160, Transparence_bordure_2_bas_Bouton_1)
; Global Couleur_bordure_2_gauche_Bouton_1 = RGBA(227, 227, 227, Transparence_bordure_2_gauche_Bouton_1)
Global Couleur_bordure_2_haute_Bouton_1 = RGBA(0, 0, 255, Transparence_bordure_2_haute_Bouton_1)
Global Couleur_bordure_2_droite_Bouton_1 = RGBA(160, 160, 160, Transparence_bordure_2_droite_Bouton_1)
Global Couleur_bordure_2_bas_Bouton_1 = RGBA(255, 0, 0, Transparence_bordure_2_bas_Bouton_1)
Global Couleur_bordure_2_gauche_Bouton_1 = RGBA(227, 227, 227, Transparence_bordure_2_gauche_Bouton_1)
Global Epaisseur_bordure_2_haute_Bouton_1 = 1
Global Epaisseur_bordure_2_droite_Bouton_1 = 1
Global Epaisseur_bordure_2_bas_Bouton_1 = 1
Global Epaisseur_bordure_2_gauche_Bouton_1 = 1
Global Arrondi_face_X_Bouton_1 = 0
Global Arrondi_face_Y_Bouton_1 = 0
Global Arrondi_bordure_2_haute_X_Bouton_1 = 0
Global Arrondi_bordure_2_haute_Y_Bouton_1 = 0
Global Arrondi_bordure_2_droite_X_Bouton_1 = 0
Global Arrondi_bordure_2_droite_Y_Bouton_1 = 0
Global Arrondi_bordure_2_bas_X_Bouton_1 = 0
Global Arrondi_bordure_2_bas_Y_Bouton_1 = 0
Global Arrondi_bordure_2_gauche_X_Bouton_1 = 0
Global Arrondi_bordure_2_gauche_Y_Bouton_1 = 0
Global DrawingMode_bordure_2_haute_Bouton_1 = #PB_2DDrawing_Default
Global DrawingMode_bordure_2_droite_Bouton_1 = #PB_2DDrawing_Default
Global DrawingMode_bordure_2_bas_Bouton_1 = #PB_2DDrawing_Default
Global DrawingMode_bordure_2_gauche_Bouton_1 = #PB_2DDrawing_Default
; #PB_2DDrawing_Default
; #PB_2DDrawing_Outlined
Global Nom_police_Bouton_1$ = "Verdana"
Global Style_police_gras_Bouton_1 = 0
Global Style_police_italique_Bouton_1 = 0
Global Style_police_soulignier_Bouton_1 = 0
Global Style_police_barrer_Bouton_1 = 0
Global Taille_police_Bouton_1 = 12
Global Couleur_texte_Bouton_1 = RGB(255, 255, 255)
Global Texte_Bouton_1$ = " Ceci est une image d'une très jolie maison de toutes les couleurs avec transparence sur un fond dégrader ainsi que bords en dégrader"
Global AngleTexte = 0
Global Position_X_texte_Bouton_1 = 0
Global Position_Y_texte_Bouton_1 = 40
Global Surplus_position_X_texte_Bouton_1 = 0
Global Surplus_position_Y_texte_Bouton_1 = 0
DataSection
Pointeur_Numero_Image_personnaliser_Bouton_1:
IncludeBinary "maison.png"
EndDataSection
CatchImage(#Numero_Image_personnaliser_Bouton_1, ?Pointeur_Numero_Image_personnaliser_Bouton_1)
Global DrawingMode_image_personnaliser_sur_Bouton_1 = #PB_2DDrawing_AlphaBlend
Global Position_X_Image_personnaliser_Bouton_1 = 0
Global Position_Y_Image_personnaliser_Bouton_1 = -25
Global Utiliser_image_personnaliser_sur_Bouton_1 = 1
; English forum: http://www.purebasic.fr/english/viewtopic.php?t=7042&highlight=
; Author: GPI
; Date: 28. July 2003
; OS: Windows
; Demo: No
; Some note: Windows send a #wm_mousemove, wenn the mouse is moved over one of
; your windows. (You can get this message with WaitWindowEvent())
; English forum: http://www.purebasic.fr/english/viewtopic.php?t=7603&highlight=
; Author: PB (updated for PB4.00 by blbltheworm)
; Date: 21. September 2003
; OS: Windows
; Demo: No
; Note: starting with PB v4 there is also a native command GadgetType() available
; Hinweis: seit PB v4 ist auch ein nativer Befehl GadgetType() verfügbar
; pas de moi
Procedure CreateFont(Name$,Size,Style)
If (Style & #FONT_BOLD)
bold = 700
EndIf
If (Style & #FONT_ITALIC)
italic = 1
EndIf
If (Style & #FONT_UNDERLINE)
underline = 1
EndIf
If (Style & #FONT_STRIKEOUT)
strikeout = 1
EndIf
ProcedureReturn CreateFont_(Size,0,0,0,bold,italic,underline,strikeout,0,0,0,0,0,Name$)
EndProcedure
; pas de moi mais modifier par moi
Procedure.l MonImage(MonImageID, Largeur, Hauteur, CouleurTexte, CouleurFond, Texte$, AngleTexte, PositionTexteX, PositionTexteY, Police$, Gras, Italique, soulignier, barrer, TaillePolice, PositionTexteXP, PositionTexteYP, ImageID, PositionImageX, PositionImageY, PositionImageXP, PositionImageYP, AfficherImage = 0)
Attributes = #FONT_NORMAL
If Gras
Attributes = Attributes + #FONT_BOLD
EndIf
If Italique
Attributes = Attributes + #FONT_ITALIC
EndIf
If soulignier
Attributes = Attributes + #FONT_UNDERLINE
EndIf
If barrer
Attributes = Attributes + #FONT_STRIKEOUT
EndIf
FontUtiliser = CreateFont(Police$, TaillePolice, Attributes)
RetourImageID = CreateImage(MonImageID, Largeur + Epaisseur_bordure_1_droite_Bouton_1 + Epaisseur_bordure_2_droite_Bouton_1, Hauteur + Epaisseur_bordure_1_bas_Bouton_1 + Epaisseur_bordure_2_bas_Bouton_1)
StartDrawing(ImageOutput(MonImageID))
DrawingMode(#PB_2DDrawing_AlphaBlend)
Largeur + Epaisseur_bordure_1_droite_Bouton_1 + Epaisseur_bordure_2_droite_Bouton_1
Hauteur + Epaisseur_bordure_1_bas_Bouton_1 + Epaisseur_bordure_2_bas_Bouton_1
RoundBox(0, 0, Largeur, Hauteur, 0, 0, CouleurFond)
If Mode_face_Bouton_1$ = "degrader"
DrawingMode(#PB_2DDrawing_Gradient)
; degrader en horizontale
; LinearGradient(1, 1, Bouton_1_L, 1)
; GradientColor(1, RGB(255, 198, 0))
;
; LinearGradient(Bouton_1_L, 1, 1, 1)
; GradientColor(0, RGB(0, 0, 255))
; degrader en verticalle
LinearGradient(Bouton_1_H, 1, 1, Bouton_1_H)
GradientColor(1, Couleur_1_degrader_face_Bouton_1)
LinearGradient(1, Bouton_1_H, 1, 1)
GradientColor(0, Couleur_2_degrader_face_Bouton_1)
Box(0, 0, Largeur, Hauteur, CouleurFond)
EndIf
FrontColor(RGB(Red(CouleurTexte),Green(CouleurTexte),Blue(CouleurTexte)))
DrawingFont(FontUtiliser)
DrawingMode(1)
If AfficherImage = 1
If ImageID
DrawingMode(DrawingMode_image_personnaliser_sur_Bouton_1)
DrawImage(ImageID(ImageID), Largeur / 2 - ImageWidth(ImageID) / 2 + PositionImageX + PositionImageXP + 9, Hauteur / 2 - ImageHeight(ImageID) / 2 + PositionImageY + PositionImageYP)
EndIf
EndIf
DrawingMode(1)
Position_extraction = 0
Phrase$ = ""
Ligne = 1
Position_texte_Y = 0
If TextWidth(Texte$) > Largeur
Repeat
Phrase$ = ""
Repeat
Position_extraction + 1
caractere$ = Mid(Texte$, Position_extraction, 1)
Phrase$ + caractere$
If TextWidth(Phrase$) > (Largeur - 9 - (Epaisseur_bordure_1_droite_Bouton_1 + Epaisseur_bordure_2_droite_Bouton_1 + Epaisseur_bordure_1_gauche_Bouton_1 + Epaisseur_bordure_2_gauche_Bouton_1))
Ligne + 1
Break
ElseIf Position_extraction = Len(Texte$)
Ligne + 1
Break
EndIf
ForEver
Traitement_texte$ + "»" + Phrase$
Until Position_extraction = Len(Texte$)
Else
Traitement_texte$ = Texte$
EndIf
For Affichage_texte = 1 To Ligne
Texte$ = StringField(Traitement_texte$, Affichage_texte, "»")
DrawRotatedText(Largeur / 2 - TextWidth(Texte$) / 2 + PositionTexteX + PositionTexteXP, Hauteur / 2 - TextHeight(Texte$) / 2 + Position_texte_Y + PositionTexteY + PositionTexteYP, Texte$, AngleTexte, CouleurTexte)
Position_texte_Y + TextHeight(Texte$)
Next
StopDrawing()
ProcedureReturn RetourImageID
EndProcedure
Procedure Open_Window_0()
If OpenWindow(#Window_0, 220, 0, 600, 300, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered )
Image_personnaliser_Bouton_1 = MonImage(#Identifient_Image_Bouton_1, Bouton_1_L - Epaisseur_bordure_1_gauche_Bouton_1 - Epaisseur_bordure_1_droite_Bouton_1, Bouton_1_H - Epaisseur_bordure_1_haute_Bouton_1 - Epaisseur_bordure_1_bas_Bouton_1, Couleur_texte_Bouton_1, Couleur_face_Bouton_1, Texte_Bouton_1$, AngleTexte, Position_X_texte_Bouton_1, Position_Y_texte_Bouton_1, Nom_police_Bouton_1$, Style_police_gras_Bouton_1, Style_police_italique_Bouton_1, Style_police_soulignier_Bouton_1, Style_police_barrer_Bouton_1, Taille_police_Bouton_1, Surplus_position_X_texte_Bouton_1, Surplus_position_Y_texte_Bouton_1, #Numero_Image_personnaliser_Bouton_1, Position_X_Image_personnaliser_Bouton_1, Position_Y_Image_personnaliser_Bouton_1, 1, 1, Utiliser_image_personnaliser_sur_Bouton_1)
CreateImage(#Planche_Image, Bouton_1_L, Bouton_1_H)
LoadFont(#Police_texte_Bouton_1, "Cambria", 10)
StartDrawing(ImageOutput(#Planche_Image))
DrawImage(Image_personnaliser_Bouton_1, 0, 0)
DrawingMode(DrawingMode_bordure_1_haute_Bouton_1 | #PB_2DDrawing_AlphaBlend)
If Mode_bordure_1_haute_Bouton_1$ = "degrader"
; bordure 1
DrawingMode(DrawingMode_bordure_1_haute_Bouton_1 | #PB_2DDrawing_Gradient)
; degrader en verticalle
; LinearGradient(1, 1, 1, 1)
; GradientColor(0, RGB(0, 150, 0))
;
; LinearGradient(1, Epaisseur_bordure_1_haute_Bouton_1, 1, 1)
; GradientColor(1, RGB(255, 0, 0))
; degrader en horizontale
LinearGradient(1, 1, 1, 1)
GradientColor(0, Couleur_1_degrader_bordure_1_haute_Bouton_1)
LinearGradient(1, 1, Bouton_1_L - Epaisseur_bordure_1_gauche_Bouton_1, 1)
GradientColor(1, Couleur_2_degrader_bordure_1_haute_Bouton_1)
EndIf
RoundBox(Epaisseur_bordure_1_gauche_Bouton_1, 0, Bouton_1_L - Epaisseur_bordure_1_gauche_Bouton_1, Epaisseur_bordure_1_haute_Bouton_1, Arrondi_bordure_1_haute_X_Bouton_1, Arrondi_bordure_1_haute_Y_Bouton_1, Couleur_bordure_1_haute_Bouton_1) ; bordure haut
DrawingMode(DrawingMode_bordure_1_droite_Bouton_1 | #PB_2DDrawing_AlphaBlend)
If Mode_bordure_1_droite_Bouton_1$ = "degrader"
; degrader en verticalle
DrawingMode(DrawingMode_bordure_1_droite_Bouton_1 | #PB_2DDrawing_Gradient)
LinearGradient(1, 1, 1, 1)
GradientColor(1, Couleur_1_degrader_bordure_1_droite_Bouton_1)
LinearGradient(1, Bouton_1_H - Epaisseur_bordure_1_haute_Bouton_1, 1, 1)
GradientColor(0, Couleur_2_degrader_bordure_1_droite_Bouton_1)
; degrader en horizontale
; LinearGradient(1, 1, 1, 1)
; GradientColor(1, RGB(255, 0, 0))
;
; LinearGradient(1, 1, 1, Bouton_1_H - Epaisseur_bordure_1_haute_Bouton_1)
; GradientColor(0, RGB(0, 0, 255))
EndIf
RoundBox(Bouton_1_L - Epaisseur_bordure_1_droite_Bouton_1, Epaisseur_bordure_1_haute_Bouton_1, Epaisseur_bordure_1_droite_Bouton_1, Bouton_1_H - Epaisseur_bordure_1_haute_Bouton_1, Arrondi_bordure_1_droite_X_Bouton_1, Arrondi_bordure_1_droite_Y_Bouton_1, Couleur_bordure_1_droite_Bouton_1) ; bordure droite
DrawingMode(DrawingMode_bordure_1_bas_Bouton_1 | #PB_2DDrawing_AlphaBlend)
If Mode_bordure_1_bas_Bouton_1$ = "degrader"
DrawingMode(DrawingMode_bordure_1_bas_Bouton_1 | #PB_2DDrawing_Gradient)
; degrader en verticalle
; LinearGradient(1, 1, 1, 1)
; GradientColor(0, RGB(0, 150, 0))
;
; LinearGradient(1, Epaisseur_bordure_1_haute_Bouton_1, 1, 1)
; GradientColor(1, RGB(255, 0, 0))
; degrader en horizontale
LinearGradient(1, 1, 1, 1)
GradientColor(1, Couleur_1_degrader_bordure_1_bas_Bouton_1)
LinearGradient(1, 1, Bouton_1_L - Epaisseur_bordure_1_gauche_Bouton_1, 1)
GradientColor(0, Couleur_2_degrader_bordure_1_bas_Bouton_1)
EndIf
RoundBox(0, Bouton_1_H - Epaisseur_bordure_1_bas_Bouton_1, Bouton_1_L - Epaisseur_bordure_1_droite_Bouton_1, Epaisseur_bordure_1_bas_Bouton_1, Arrondi_bordure_1_bas_X_Bouton_1, Arrondi_bordure_1_bas_Y_Bouton_1, Couleur_bordure_1_bas_Bouton_1) ; bordure bas
DrawingMode(DrawingMode_bordure_1_gauche_Bouton_1 | #PB_2DDrawing_AlphaBlend)
If Mode_bordure_1_gauche_Bouton_1$ = "degrader"
DrawingMode(DrawingMode_bordure_1_gauche_Bouton_1 | #PB_2DDrawing_Gradient)
; degrader en verticalle
LinearGradient(1, 1, 1, 1)
GradientColor(0, Couleur_1_degrader_bordure_1_gauche_Bouton_1)
LinearGradient(1, Bouton_1_H - Epaisseur_bordure_1_haute_Bouton_1, 1, 1)
GradientColor(1, Couleur_2_degrader_bordure_1_gauche_Bouton_1)
; degrader en horizontale
; LinearGradient(1, 1, 1, 1)
; GradientColor(1, RGB(255, 0, 0))
;
; LinearGradient(1, 1, 1, Bouton_1_H - Epaisseur_bordure_1_haute_Bouton_1)
; GradientColor(0, RGB(0, 0, 255))
EndIf
RoundBox(0, 0, Epaisseur_bordure_1_gauche_Bouton_1, Bouton_1_H - Epaisseur_bordure_1_bas_Bouton_1, Arrondi_bordure_1_gauche_X_Bouton_1, Arrondi_bordure_1_gauche_Y_Bouton_1, Couleur_bordure_1_gauche_Bouton_1) ; bordure gauche
; bordure 2
DrawingMode(DrawingMode_bordure_2_haute_Bouton_1 | #PB_2DDrawing_AlphaBlend)
If Mode_bordure_2_haute_Bouton_1$ = "degrader"
DrawingMode(DrawingMode_bordure_2_haute_Bouton_1 | #PB_2DDrawing_Gradient)
; degrader en verticalle
; LinearGradient(1, 1, 1, 1)
; GradientColor(0, RGB(0, 150, 0))
;
; LinearGradient(1, Epaisseur_bordure_1_haute_Bouton_1, 1, 1)
; GradientColor(1, RGB(255, 0, 0))
; degrader en horizontale
LinearGradient(1, 1, 1, 1)
GradientColor(1, Couleur_1_degrader_bordure_2_haute_Bouton_1)
LinearGradient(1, 1, Bouton_1_L - Epaisseur_bordure_1_gauche_Bouton_1, 1)
GradientColor(0, Couleur_2_degrader_bordure_2_haute_Bouton_1)
EndIf
RoundBox(Epaisseur_bordure_1_gauche_Bouton_1 + Epaisseur_bordure_2_gauche_Bouton_1, Epaisseur_bordure_1_haute_Bouton_1, Bouton_1_L - Epaisseur_bordure_1_gauche_Bouton_1 - Epaisseur_bordure_2_gauche_Bouton_1 - Epaisseur_bordure_1_droite_Bouton_1, Epaisseur_bordure_2_haute_Bouton_1, Arrondi_bordure_2_haute_X_Bouton_1, Arrondi_bordure_2_haute_Y_Bouton_1, Couleur_bordure_2_haute_Bouton_1) ; bordure haut
DrawingMode(DrawingMode_bordure_2_droite_Bouton_1 | #PB_2DDrawing_AlphaBlend)
If Mode_bordure_2_droite_Bouton_1$ = "degrader"
DrawingMode(DrawingMode_bordure_2_droite_Bouton_1 | #PB_2DDrawing_Gradient)
; degrader en verticalle
LinearGradient(1, 1, 1, 1)
GradientColor(0, Couleur_1_degrader_bordure_2_droite_Bouton_1)
LinearGradient(1, Bouton_1_H - Epaisseur_bordure_1_haute_Bouton_1, 1, 1)
GradientColor(1, Couleur_2_degrader_bordure_2_droite_Bouton_1)
; degrader en horizontale
; LinearGradient(1, 1, 1, 1)
; GradientColor(1, RGB(255, 0, 0))
;
; LinearGradient(1, 1, 1, Bouton_1_H - Epaisseur_bordure_1_haute_Bouton_1)
; GradientColor(0, RGB(0, 0, 255))
EndIf
RoundBox(Bouton_1_L - Epaisseur_bordure_1_droite_Bouton_1 - Epaisseur_bordure_2_droite_Bouton_1, Epaisseur_bordure_2_haute_Bouton_1 + Epaisseur_bordure_1_haute_Bouton_1, Epaisseur_bordure_2_droite_Bouton_1, Bouton_1_H - Epaisseur_bordure_1_haute_Bouton_1 - Epaisseur_bordure_1_bas_Bouton_1 - Epaisseur_bordure_2_bas_Bouton_1, Arrondi_bordure_2_droite_X_Bouton_1, Arrondi_bordure_2_droite_Y_Bouton_1, Couleur_bordure_2_droite_Bouton_1) ; bordure droite
DrawingMode(DrawingMode_bordure_2_bas_Bouton_1 | #PB_2DDrawing_AlphaBlend)
If Mode_bordure_2_bas_Bouton_1$ = "degrader"
DrawingMode(DrawingMode_bordure_2_bas_Bouton_1 | #PB_2DDrawing_Gradient)
; degrader en verticalle
; LinearGradient(1, 1, 1, 1)
; GradientColor(0, RGB(0, 150, 0))
;
; LinearGradient(1, Epaisseur_bordure_1_haute_Bouton_1, 1, 1)
; GradientColor(1, RGB(255, 0, 0))
; degrader en horizontale
LinearGradient(1, 1, 1, 1)
GradientColor(0, Couleur_1_degrader_bordure_2_bas_Bouton_1)
LinearGradient(1, 1, Bouton_1_L - Epaisseur_bordure_1_gauche_Bouton_1, 1)
GradientColor(1, Couleur_2_degrader_bordure_2_bas_Bouton_1)
EndIf
RoundBox(Epaisseur_bordure_1_gauche_Bouton_1, Bouton_1_H - Epaisseur_bordure_1_bas_Bouton_1 - Epaisseur_bordure_2_bas_Bouton_1, Bouton_1_L - Epaisseur_bordure_1_gauche_Bouton_1 - Epaisseur_bordure_1_droite_Bouton_1 - Epaisseur_bordure_2_droite_Bouton_1, Epaisseur_bordure_2_bas_Bouton_1, Arrondi_bordure_2_bas_X_Bouton_1, Arrondi_bordure_2_bas_Y_Bouton_1, Couleur_bordure_2_bas_Bouton_1) ; bordure bas
DrawingMode(DrawingMode_bordure_2_gauche_Bouton_1 | #PB_2DDrawing_AlphaBlend)
If Mode_bordure_2_gauche_Bouton_1$ = "degrader"
DrawingMode(DrawingMode_bordure_2_gauche_Bouton_1 | #PB_2DDrawing_Gradient)
; degrader en verticalle
LinearGradient(1, 1, 1, 1)
GradientColor(1, Couleur_1_degrader_bordure_2_gauche_Bouton_1)
LinearGradient(1, Bouton_1_H - Epaisseur_bordure_1_haute_Bouton_1, 1, 1)
GradientColor(0, Couleur_2_degrader_bordure_2_gauche_Bouton_1)
; degrader en horizontale
; LinearGradient(1, 1, 1, 1)
; GradientColor(1, RGB(255, 0, 0))
;
; LinearGradient(1, 1, 1, Bouton_1_H - Epaisseur_bordure_1_haute_Bouton_1)
; GradientColor(0, RGB(0, 0, 255))
EndIf
RoundBox(Epaisseur_bordure_1_gauche_Bouton_1, Epaisseur_bordure_1_haute_Bouton_1, Epaisseur_bordure_2_gauche_Bouton_1, Bouton_1_H - Epaisseur_bordure_1_bas_Bouton_1 - Epaisseur_bordure_1_haute_Bouton_1 - Epaisseur_bordure_2_bas_Bouton_1, Arrondi_bordure_2_gauche_X_Bouton_1, Arrondi_bordure_2_gauche_Y_Bouton_1, Couleur_bordure_2_gauche_Bouton_1) ; bordure gauche
StopDrawing()
ImageGadget(#ImageGadget, Bouton_1_X, Bouton_1_Y, Bouton_1_L - Epaisseur_bordure_1_gauche_Bouton_1 - Epaisseur_bordure_1_droite_Bouton_1, Bouton_1_H - Epaisseur_bordure_1_haute_Bouton_1 - Epaisseur_bordure_1_bas_Bouton_1, ImageID(#Planche_Image))
Repeat ; Start of the event loop
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
If Event = #PB_Event_Gadget
If GadgetID = #ImageGadget
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
EndIf
EndProcedure
Open_Window_0()
Code : Tout sélectionner
; English forum: http://www.purebasic.fr/english/viewtopic.php?t=13417&postdays=0&postorder=asc&start=15
; Author: Christian (updated for PB 4.00 by Andre)
; Date: 22. December 2004
; OS: Windows
; Demo: No
; Author: Christian
; Date: 22. December 2004
; --> This is needed for PB's drawing functions to work
Structure PBDrawingStruct
Type.l
WindowHandle.l
DC.l
ReleaseProcedure.l
EndStructure
Global mydraw.PBDrawingStruct
mydraw\Type = 1
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Procedures
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; --> Windowcallback
Procedure myWindowCallback(hwnd, msg, wparam, lparam)
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_DRAWITEM
; -- Get handle and DeviceContext
*lpdis.DRAWITEMSTRUCT = lparam
mydraw\WindowHandle = *lpdis\hwndItem
hDC = GetDC_(mydraw\WindowHandle)
; -- Get GadgetRect
XPos = *lpdis\rcItem\left
YPos = *lpdis\rcItem\top
Width = *lpdis\rcItem\right-*lpdis\rcItem\left
Height = *lpdis\rcItem\bottom-*lpdis\rcItem\top
; -- Get font information and GadgetText
GadgetFont = SendMessage_(mydraw\WindowHandle, #WM_GETFONT, 0, 0)
GetObject_(GadgetFont, SizeOf(LOGFONT), @lf.LOGFONT)
FontHeight.l = Abs(lf\lfHeight)
GadgetText.s = Space(1000)
GetWindowText_(mydraw\WindowHandle, @GadgetText, 1000)
; -- Start with OwnerDrawing
Select *lpdis\CtlType
Case #ODT_BUTTON
; -- Draw selected/pushed button
If *lpdis\itemState & #ODS_SELECTED
If StartDrawing(mydraw)
; -- Border
LineXY(XPos, YPos, Width, 0, GetSysColor_(3))
LineXY(XPos, YPos, 0, Height - 1, GetSysColor_(3))
LineXY(XPos + Width, YPos, XPos + Width, YPos + Height - 1, GetSysColor_(5))
LineXY(XPos, YPos + Height - 1, XPos + Width, YPos + Height - 1, GetSysColor_(5))
; -- BackgroundColor
Box(XPos + 1, YPos + 1, Width - 1, Height - 2, GetSysColor_(4))
; -- Text
DrawingMode(1) : FrontColor(RGB(0, 0, 0))
DrawingFont(GadgetFont)
DrawText((Width - XPos - TextWidth(GadgetText))/2 + 1, (Height - YPos - FontHeight)/2 + 1, GadgetText)
StopDrawing()
EndIf
Else
; -- Draw normal button
If StartDrawing(mydraw)
; -- Border
LineXY(XPos, YPos, Width, 0, GetSysColor_(5))
LineXY(XPos, YPos, 0, Height - 1, GetSysColor_(5))
LineXY(XPos + Width, YPos, XPos + Width, YPos + Height - 1, GetSysColor_(3))
LineXY(XPos, YPos + Height - 1, XPos + Width, YPos + Height - 1, GetSysColor_(3))
; -- BackgroundColor
Box(XPos + 1, YPos + 1, Width - 1, Height - 2, GetSysColor_(4))
; -- Text
DrawingMode(1) : FrontColor(RGB(0, 0, 0))
DrawingFont(GadgetFont)
DrawText((Width - XPos - TextWidth(GadgetText))/2, (Height - YPos - FontHeight)/2, GadgetText)
StopDrawing()
EndIf
EndIf
If *lpdis\itemState & #ODS_FOCUS
; -- Draw the FocusRect
*lpdis\rcItem\left + 3
*lpdis\rcItem\top + 3
*lpdis\rcItem\right - 3
*lpdis\rcItem\bottom - 3
DrawFocusRect_(hDC, *lpdis\rcItem)
EndIf
EndSelect
result = #True
EndSelect
ProcedureReturn result
EndProcedure
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Program
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If OpenWindow(0, 0, 0, 480, 260,"Christians OwnerDrawn Buttons",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
SetWindowCallback(@myWindowCallback())
ButtonGadget(0, 50, 50, 200, 50, "Owner Drawn Button 1", #BS_OWNERDRAW)
ButtonGadget(1, 50, 105, 200, 50, "Owner Drawn Button 2", #BS_OWNERDRAW)
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case 0
MessageRequester("Info", "Button 1 pressed!", 0)
Case 1
MessageRequester("Info", "Button 2 pressed!", 0)
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow
EndIf
End