Problème dessin clic droit, à partir de CanvasGadget
Publié : jeu. 04/mai/2017 11:53
Bonjour,
Afin d'avancer dans mon apprentissage de la souris en mode graphique. Je me suis amusé à modifier l'exemple de PureBasic, CanvasGadget.pb.
Seulement il n'y a plus que l'outil remplissage qui fonctionne avec les deux clics.
Seul l'outil brosse fonctionne partiellement seulement avec le clic gauche.
Cela fait deux jours que je cherche des réponses à ces questions sans succès.
Voici ma réécriture avec le code de base. Merci d'avance à toutes les personnes qui pourront m'aider.
Afin d'avancer dans mon apprentissage de la souris en mode graphique. Je me suis amusé à modifier l'exemple de PureBasic, CanvasGadget.pb.
Seulement il n'y a plus que l'outil remplissage qui fonctionne avec les deux clics.
Seul l'outil brosse fonctionne partiellement seulement avec le clic gauche.
Cela fait deux jours que je cherche des réponses à ces questions sans succès.
Voici ma réécriture avec le code de base. Merci d'avance à toutes les personnes qui pourront m'aider.
Code : Tout sélectionner
;
; ------------------------------------------------------------
;
; PureBasic - CanvasGadget example file
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
; ================================================
;
; PureBasic - Notysoft PurePaint v1.00 - 2017
;
; (c) Notysoft Software
;
; ================================================
EnableExplicit
Enumeration
#JPG_Couleurs_L
#JPG_Couleurs_R
#JPG_Contenu_L
#JPG_Contenu_R
#JPG_OuvrirSauver
#ID_Canvas
#ID_Couleur_L
#ID_Couleur_R
#ID_Brosse_L
#ID_Brosse_R
#ID_Ligne_L
#ID_Ligne_R
#ID_Boite_L
#ID_Boite_R
#ID_Cercle_L
#ID_Cercle_R
#ID_Remplir_L
#ID_Remplir_R
#ID_Effacer
#ID_Ouvrir
#ID_Saver
#ID_Aide
#ID_Test
#Fenetre_a_propos
#TextAPropos1
#TextAPropos2
#TextAPropos3
#TextAPropos4
#TextAPropos5
#ID_bouton_a_propos
#ID_Close_Aide
#Fenetre_PurePaint
#ID_Son_1
#ID_Son_2
#ID_Son_3
#ID_Son_4
#ID_Son_5
#ID_Son_6
#ID_Son_7
#ID_Son_8
#ID_Son_9
#ID_Son_10
#ID_Son_11
#ID_Son_12
#ID_Son_13
#ID_Son_14
#ID_Son_15
#ID_Son_16
#ID_Son_17
#ID_Son_18
#ID_Son_19
#ID_Son_20
EndEnumeration
;-Declarations des Variables
Global Etat_Actuel_Color_L.i,Etat_Actuel_Color_R.i,Etat_Actuel_Mode_L.i,Etat_Actuel_Mode_R.i,StartX.i, StartY.i
Global X.i,Y.i,Rx.i,Ry.i,Event.i,Type.i,EventGadget.i,Gadget.i
Global Fichier.s
;-Declarations de Prcocedure
Declare Dessin(x, y, EventType)
Declare Open_PurePaint()
Declare Open_A_Propos()
Declare Sauver()
Declare Ouvrir()
Declare Effacer()
;-Initialisations
UseJPEGImageDecoder()
UseJPEGImageEncoder()
Procedure Dessin(x, y, EventType)
If StartDrawing(CanvasOutput(#ID_Canvas))
Select Etat_Actuel_Mode_L
Case #ID_Brosse_L
If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
Circle(x, y, 5, Etat_Actuel_Color_L)
EndIf
Case #ID_Ligne_L
If EventType = #PB_EventType_LeftButtonDown
DrawImage(ImageID(#JPG_Contenu_L),0, 0)
LineXY(StartX, StartY, x, y, Etat_Actuel_Color_L)
EndIf
Case #ID_Boite_L
If EventType = #PB_EventType_LeftButtonDown
DrawImage(ImageID(#JPG_Contenu_L), 0, 0)
Box(StartX, StartY, x-StartX, y-StartY, Etat_Actuel_Color_L)
EndIf
Case #ID_Cercle_L
If EventType = #PB_EventType_LeftButtonDown
DrawImage(ImageID(#JPG_Contenu_L), 0, 0)
If x > StartX
rx = x - StartX
Else
rx = StartX - x
EndIf
If y > StartY
ry = y - StartY
Else
ry = StartY - y
EndIf
If GetGadgetAttribute(#ID_Canvas, #PB_Canvas_Modifiers) & #PB_Canvas_Control
ry = rx
EndIf
Ellipse(StartX, StartY, rx, ry, Etat_Actuel_Color_L)
EndIf
Case #ID_Remplir_L
If EventType = #PB_EventType_LeftButtonDown
FillArea(x, y, -1,Etat_Actuel_Color_L)
EndIf
EndSelect
;================================================================
Select Etat_Actuel_Mode_R
Case #ID_Brosse_R
If EventType = #PB_EventType_RightButtonDown Or EventType = #PB_EventType_MouseMove
Circle(x, y, 5, Etat_Actuel_Color_R)
EndIf
Case #ID_Ligne_R
If EventType = #PB_EventType_RightButtonDown
DrawImage(ImageID(#JPG_Contenu_R), 0, 0)
LineXY(StartX, StartY, x, y, Etat_Actuel_Color_R)
EndIf
Case #ID_Boite_R
If EventType = #PB_EventType_RightButtonDown
DrawImage(ImageID(#JPG_Contenu_R), 0, 0)
Box(StartX, StartY, x-StartX, y-StartY, Etat_Actuel_Color_R)
EndIf
Case #ID_Cercle_R
If EventType = #PB_EventType_RightButtonDown
DrawImage(ImageID(#JPG_Contenu_R), 0, 0)
If x > StartX
rx = x - StartX
Else
rx = StartX - x
EndIf
If y > StartY
ry = y - StartY
Else
ry = StartY - y
EndIf
If GetGadgetAttribute(#ID_Canvas, #PB_Canvas_Modifiers) & #PB_Canvas_Control
ry = rx
EndIf
Ellipse(StartX, StartY, rx, ry, Etat_Actuel_Color_R)
EndIf
Case #ID_Remplir_R
If EventType = #PB_EventType_RightButtonDown
FillArea(x, y, -1,Etat_Actuel_Color_R)
EndIf
EndSelect
StopDrawing()
EndIf
EndProcedure
Procedure Open_PurePaint()
Etat_Actuel_Color_L = $000000
Etat_Actuel_Mode_L = #ID_Brosse_L
Etat_Actuel_Color_R = $000000
Etat_Actuel_Mode_R = #ID_Brosse_R
CreateImage(#JPG_Couleurs_L, 75, 75, 24)
CreateImage(#JPG_Couleurs_R, 75, 75, 24)
CreateImage(#JPG_Contenu_L, 830, 630, 24)
CreateImage(#JPG_Contenu_R, 830, 630, 24)
If OpenWindow(#Fenetre_PurePaint, 0, 0, 1000, 650, "Notysoft PurePaint v1.00 - 2017", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowColor(#Fenetre_PurePaint, RGB(150,150,150))
CanvasGadget(#ID_Canvas, 160, 10, 830, 630, #PB_Canvas_ClipMouse)
ButtonImageGadget(#ID_Couleur_L, 10, 10, 70, 70, ImageID(#JPG_Couleurs_L))
ButtonImageGadget(#ID_Couleur_R, 80, 10, 70, 70, ImageID(#JPG_Couleurs_R))
ButtonGadget(#ID_Brosse_L, 10, 110, 70, 25, "Brosse G",#PB_Button_Toggle)
ButtonGadget(#ID_Ligne_L, 10, 140, 70, 25, "Ligne G",#PB_Button_Toggle)
ButtonGadget(#ID_Boite_L, 10, 170, 70, 25, "Boîte G",#PB_Button_Toggle)
ButtonGadget(#ID_Cercle_L, 10, 200, 70, 25, "Cercle G",#PB_Button_Toggle)
ButtonGadget(#ID_Remplir_L,10, 230, 70, 25, "Remplir G",#PB_Button_Toggle)
ButtonGadget(#ID_Brosse_R, 80, 110, 70, 25, "Brosse D",#PB_Button_Toggle)
ButtonGadget(#ID_Ligne_R, 80, 140, 70, 25, "Ligne D",#PB_Button_Toggle)
ButtonGadget(#ID_Boite_R, 80, 170, 70, 25, "Boîte D",#PB_Button_Toggle)
ButtonGadget(#ID_Cercle_R, 80, 200, 70, 25, "Cercle D",#PB_Button_Toggle)
ButtonGadget(#ID_Remplir_R,80, 230, 70, 25, "Remplir D",#PB_Button_Toggle)
ButtonGadget(#ID_Ouvrir, 10, 335, 70, 25, "Ouvrir")
ButtonGadget(#ID_Effacer,10, 365, 70, 25, "Effacer")
ButtonGadget(#ID_Saver, 80, 335, 70, 25, "Sauver")
ButtonGadget(#ID_Aide, 80, 365, 70, 25, "Aide")
SetGadgetState(#ID_Brosse_L, 1)
SetGadgetState(#ID_Brosse_R, 1)
SetGadgetAttribute(#ID_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)
EndIf
EndProcedure
Procedure Open_A_Propos()
Protected iColor.I,iColorText.I
If OpenWindow(#Fenetre_a_propos,153,40,260,175, "Aide - A Propos", #PB_Window_TitleBar | #PB_Window_BorderLess,WindowID(#Fenetre_PurePaint))
SetWindowColor(#Fenetre_a_propos, RGB(150,150,150))
ButtonGadget(#ID_Close_Aide,105,130,50,30, "Ok")
TextGadget(#TextAPropos1,0, 10, 259, 29,"Notysoft PurePaint v1.00 - 2017",#PB_Text_Center)
TextGadget(#TextAPropos2,0, 30, 259, 29,"Créer simplement des dessins",#PB_Text_Center)
TextGadget(#TextAPropos3,0, 50, 259, 29,"Écrit par Frédéric CHERPE - 2016 - 2017",#PB_Text_Center)
TextGadget(#TextAPropos4,0, 70, 259, 29,"À partir du fichier exemple CanvasGadget.pb",#PB_Text_Center)
TextGadget(#TextAPropos5,0, 90, 259, 29,"En PureBasic de (c) Fantaisie Software ",#PB_Text_Center)
For iColor = #TextAPropos1 To #TextAPropos5
SetGadgetColor(iColor,#PB_Gadget_BackColor, RGB(150,150,150))
SetGadgetColor(iColor,#PB_Gadget_FrontColor,RGB(255,255,255))
Next
;If LoadSound(#ID_Son_1,"Sons\back.wav")
; PlaySound(#ID_Son_1)
;EndIf
EndIf
EndProcedure
; Initialisation
UseOGGSoundDecoder() ; Utilisation des fichiers Ogg
UseFLACSoundDecoder() ; Utilisation des fichiers Flac
UseJPEG2000ImageDecoder()
UseJPEG2000ImageEncoder()
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()
UsePNGImageEncoder()
If InitSound() = 0
MessageRequester("Erreur", "carte son non détecté !",64)
End
EndIf
Procedure Sauver()
Fichier = SaveFileRequester("Sauver l'image...", Fichier, "JPEG Images|*.jpeg|Tous les fichiers|*.*", 0)
If Fichier And (FileSize(Fichier) = -1 Or MessageRequester("Notysoft PurePaint v1.00 - 2017", "Écrire par dessus ce fichier ? " + Fichier, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes)
If CreateImage(#JPG_OuvrirSauver, 830, 630, 24) And StartDrawing(ImageOutput(#JPG_OuvrirSauver))
DrawImage(GetGadgetAttribute(#ID_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
If SaveImage(#JPG_OuvrirSauver, Fichier, #PB_ImagePlugin_JPEG) = 0
MessageRequester("Notysoft PurePaint v1.00 - 2017", "Impossible de sauvé l'image : " + Fichier)
EndIf
FreeImage(#JPG_OuvrirSauver)
EndIf
EndIf
EndProcedure
Procedure Ouvrir()
Fichier = OpenFileRequester("Ouvrir l'image...", "", "JPEG Images|*.jpeg|Tous les fichiers|*.*", 0)
If Fichier
If LoadImage(#JPG_OuvrirSauver, Fichier)
If StartDrawing(CanvasOutput(#ID_Canvas))
Box(0, 0, 830, 630, $FFFFFF)
DrawImage(ImageID(#JPG_OuvrirSauver), 0, 0)
StopDrawing()
EndIf
FreeImage(#JPG_OuvrirSauver)
Else
MessageRequester("Notysoft PurePaint v1.00 - 2017", "Impossible de lire l'image: " + Fichier)
EndIf
EndIf
EndProcedure
Procedure Effacer()
If StartDrawing(CanvasOutput(#ID_Canvas))
Box(0, 0, 830, 630, $FFFFFF)
StopDrawing()
EndIf
EndProcedure
Open_PurePaint()
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case #ID_Canvas
X = GetGadgetAttribute(#ID_Canvas, #PB_Canvas_MouseX)
Y = GetGadgetAttribute(#ID_Canvas, #PB_Canvas_MouseY)
Type = EventType()
Select EventType()
Case #PB_EventType_LeftButtonDown
If StartDrawing(ImageOutput(#JPG_Contenu_L))
DrawImage(GetGadgetAttribute(#ID_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
EndIf
StartX = X
StartY = Y
Dessin(X, Y, EventType())
Case #PB_EventType_LeftButtonUp
Dessin(X, Y, EventType())
Case #PB_EventType_MouseMove
If GetGadgetAttribute(#ID_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
Dessin(X, Y, EventType())
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case #PB_EventType_RightButtonDown
If StartDrawing(ImageOutput(#JPG_Contenu_R))
DrawImage(GetGadgetAttribute(#ID_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
EndIf
StartX = X
StartY = Y
Dessin(X, Y, EventType())
Case #PB_EventType_RightButtonUp
Dessin(X, Y, EventType())
Case #PB_EventType_MouseMove
If GetGadgetAttribute(#ID_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_RightButton
Dessin(X, Y, EventType())
EndIf
EndSelect
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case #ID_Couleur_L
Etat_Actuel_Color_L = ColorRequester(Etat_Actuel_Color_L)
If StartDrawing(ImageOutput(#JPG_Couleurs_L))
Box(0, 0, 75, 75, Etat_Actuel_Color_L)
StopDrawing()
SetGadgetAttribute(#ID_Couleur_L,#PB_Button_Image, ImageID(#JPG_Couleurs_L))
EndIf
Case #ID_Couleur_R
Etat_Actuel_Color_R = ColorRequester(Etat_Actuel_Color_R)
If StartDrawing(ImageOutput(#JPG_Couleurs_R))
Box(0, 0, 75, 75, Etat_Actuel_Color_R)
StopDrawing()
SetGadgetAttribute(#ID_Couleur_R,#PB_Button_Image, ImageID(#JPG_Couleurs_R))
EndIf
Case #ID_Brosse_L,#ID_Ligne_L,#ID_Boite_L,#ID_Cercle_L,#ID_Remplir_L
EventGadget = EventGadget()
For Gadget = #ID_Brosse_L To #ID_Remplir_L
If Gadget = EventGadget
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0)
EndIf
Next Gadget
Etat_Actuel_Mode_L = EventGadget
Case #ID_Brosse_R,#ID_Ligne_R,#ID_Boite_R,#ID_Cercle_R,#ID_Remplir_R
EventGadget = EventGadget()
For Gadget = #ID_Brosse_R To #ID_Remplir_R
If Gadget = EventGadget
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0)
EndIf
Next Gadget
Etat_Actuel_Mode_R = EventGadget
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case #ID_Effacer
Effacer()
Case #ID_Ouvrir
Ouvrir()
Case #ID_Saver
Sauver()
Case #ID_Aide
Open_A_Propos()
Case #ID_Close_Aide
CloseWindow(#Fenetre_a_propos)
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow