[Résolu] Problème avec canvas
Publié : jeu. 26/mars/2020 11:41
bjr à tous
j'ai des soucis avec canvas probablement un bug
comme vous le verrez dans ces deux code quand j utilise #PB_EventType_MouseEnter avant #PB_EventType_MouseLeave
test placé en seconde position dans la boucle j'ai deux retour " extérieur "
(exterieur) disparait lors d'une nouvelle entrée tout cela semble furtif mais il n’empêche que nous avons deux retour exterieur
à l'inverse #PB_EventType_MouseLeave avant #PB_EventType_MouseEnter cela fonctionne sans doublon " intérieur "
donc, pour une question de disposition dans la boucle le résultat n 'est pas pareil???
Si c'est un bug, quelqu'un peut il le poster sur le forum anglais, j'ai oublié mon mot de passe sur ce forum
Cordialement
voici un code qui crée des sauvegardes avec énumération pour les noms des image, dessin, etc..
j'ai des soucis avec canvas probablement un bug
comme vous le verrez dans ces deux code quand j utilise #PB_EventType_MouseEnter avant #PB_EventType_MouseLeave
test placé en seconde position dans la boucle j'ai deux retour " extérieur "
(exterieur) disparait lors d'une nouvelle entrée tout cela semble furtif mais il n’empêche que nous avons deux retour exterieur
à l'inverse #PB_EventType_MouseLeave avant #PB_EventType_MouseEnter cela fonctionne sans doublon " intérieur "
donc, pour une question de disposition dans la boucle le résultat n 'est pas pareil???
Si c'est un bug, quelqu'un peut il le poster sur le forum anglais, j'ai oublié mon mot de passe sur ce forum


Cordialement
Code : Tout sélectionner
If OpenWindow(0, 0, 0, 140,140, "CanvasGadget test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 20, 20, 100, 100)
mouseposition.l
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 0
EvType = EventType()
If EvType = #PB_EventType_MouseMove Or EvType = #PB_EventType_MouseLeave
X = GetGadgetAttribute(0, #PB_Canvas_MouseX)
Y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
Debug ">>>>>>>>>>>>>>>"
Debug " Exterieur"
Debug "<<<<<<<<<<<<<<<"
EndIf
If EvType = #PB_EventType_MouseMove Or EvType = #PB_EventType_MouseEnter
X = GetGadgetAttribute(0, #PB_Canvas_MouseX)
Y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
Debug ">>>>>>>>>>>>>>>"
Debug "interieur"
Debug "<<<<<<<<<<<<<<<"
EndIf
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
Code : Tout sélectionner
Enumeration
#Window
#Canvas
#File
#Bouton1
#Bouton2
#Bouton3
#Bouton4
EndEnumeration
Enumeration
#Image1
#Image2
#ImageBouton1
#ImageBouton2
#ImageBouton3
#ImageBouton4
EndEnumeration
UseJPEGImageEncoder()
UsePNGImageEncoder()
Procedure Imagebouton(num_Img, x, y, w, h, colorFr, ColorTx, ColorFx, titre$, Ft$, hf,typ)
;Auteur ??
ImgID = CreateImage(num_Img, w, h)
Font=LoadFont(#PB_Any, ft$ , hf, typ)
StartDrawing(ImageOutput(num_Img))
DrawingMode(#PB_2DDrawing_Transparent)
Box(0, 0, w, h,colorFr)
DrawingFont(FontID(Font))
FrontColor(ColorTx)
DrawText(x+1,y-1,titre$)
FrontColor(colorFx)
DrawText(x,y,titre$)
StopDrawing()
ProcedureReturn ImgID
EndProcedure
Procedure.s EnumerationImage(Fichier$)
;-00--Boucle d'Enumeration des noms de fichiers jusqu'a 999
;-01--Utilisation principale est de créer des fichiers temporaires, Auteur: kernadec
Repeat
;-02--Capture nom de l'extension
ext$ = StringField(Fichier$,CountString(Fichier$, ".") + 1, ".")
;-03--Capture le nombre de lettre de l'extension
ext = Len(StringField(Fichier$,CountString(Fichier$, ".") + 1, "."))
;-04--Capture le chemin des repertoires du fichier
CheminTmp$ = Mid(Fichier$, 1, Len(Fichier$)-Len(StringField(Fichier$,CountString(Fichier$, "\") + 1, "\")))
;-05--Capture le nom du fichier pour lui créér un pseudo nom
FichierTmp$ = StringField(Fichier$,CountString(Fichier$, "\") + 1, "\")
;-06--Sont accéptée que les extensions de 1 à 3 lettres
If ext => 1 And ext < 4
;-07--Reconnait que ces 3 formats d'images: bmp, jpg, et png
If Right(FichierTmp$,ext) = "bmp" Or Right(FichierTmp$,ext) = "jpg" Or Right(FichierTmp$,ext) = "png"
;-08--Recherche avec Chemin et Nom complet le numero suivant
If ReadFile(#File,Fichier$)
;-09--Capture le numéro associé au nom du fichier
tmp = Val(Mid(FichierTmp$, Len(FichierTmp$)-(3 + ext), ext))
;-10--Incrémente le numéro et place 2 zéro avant comme s'il était inférieur à 10
tmp$ = "00" + Str(tmp + 1)
;-11--Conserve les 3 caractères de droite du chiffre
If Len(tmp$) > 3 : tmp$ = Right(tmp$,3) : EndIf
;-12--Restitue chemin et nom et retourne tester si ce nom est disponible
Fichier$ = CheminTmp$ + Left(FichierTmp$,Len(FichierTmp$) - (3 + ext) - 1) + Tmp$ + "." + ext$
;-13--Passe à la rechercher du numéro suivant!
CloseFile(#File)
Else
;-14--Ce numéro de nom est accepté retour au selecteur
ProcedureReturn Fichier$
Break
EndIf
Else
MessageRequester("Format de Sauvegarde Inconnu", "Image Non Sauvegardée: " + Fichier$)
Break
EndIf
Else
MessageRequester("Après recherche du Type", " Ce fichier n'a pas d'extension: " + Fichier$)
Break
EndIf
ForEver
EndProcedure
Procedure Sauvegarde_Image_Canvas(Fichier$)
;###################################### Sauvegarde Image Canvas JPEG, PNG, BMP Images
Fichier$ = EnumerationImage(Fichier$)
Fichier$ = SaveFileRequester("Sauvegarde Image...", Fichier$, "Images (JPG,PNG,BMP) | *.jpg;*.jpeg;*.Png;*.bmp", 0)
If Fichier$ And (FileSize(Fichier$) = -1 Or MessageRequester("Canvas", "Fichier existant! utiliser le meme Nom? " + Fichier$, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes)
If CreateImage(#Image2, GadgetWidth(#Canvas), GadgetHeight(#Canvas), 24)
StartDrawing(ImageOutput(#Image2)) ; Copie de votre dessin Canvas dans cette Image
DrawImage(GetGadgetAttribute(#Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
If Right(Fichier$,3) = "jpg" Or Right(Fichier$,4) = "jpeg"
If SaveImage(#Image2, Fichier$, #PB_ImagePlugin_JPEG) = 0
MessageRequester("Canvas Sauvegarde Image", "Image Non Sauvegardée: " + Fichier$)
EndIf
ElseIf Right(Fichier$,3) = "png"
If SaveImage(#Image2, Fichier$, #PB_ImagePlugin_PNG) = 0
MessageRequester("Canvas Sauvegarde Image", "Image Non Sauvegardée: " + Fichier$)
EndIf
ElseIf Right(Fichier$,3) = "bmp"
If SaveImage(#Image2, Fichier$) = 0
MessageRequester("Canvas Sauvegarde Image", "Image Non Sauvegardée: " + Fichier$)
EndIf
EndIf
FreeImage(#Image2)
EndIf
EndIf
EndProcedure
Chemin$ = "C:\PureBasic\"
Fichier$ = Chemin$ + "Image001.jpg" ; nom de fichier par defaut
Color.l=RGB(Random(255), Random(255), Random(255))
If OpenWindow(#Window, 0, 0, 300,360, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(#Canvas, 10, 10, 280, 310,#PB_Canvas_ClipMouse)
ButtonImageGadget(#bouton1, 9, 330,78, 22,Imagebouton(#ImageBouton1, 4, 4, 75, 22,Color,RGB(255,255,255),RGB(0,0,0)," C o u l e u r ","arial",8,#PB_Font_Bold))
ButtonImageGadget(#bouton2, 100, 330, 60, 22,Imagebouton(#ImageBouton2, 2, 4, 56, 22,RGB(255,255,255),RGB(255,255,255),RGB(0,0,0)," E f f a c e ","arial",8,#PB_Font_Bold))
ButtonImageGadget(#bouton3, 170, 330, 60, 22,Imagebouton(#ImageBouton3, 2, 4, 56, 22,RGB(0,255,0),RGB(255,255,255),RGB(0,0,0)," S a u v e ","arial",8,#PB_Font_Bold))
ButtonImageGadget(#bouton4, 240, 330, 50, 22,Imagebouton(#ImageBouton4, 4, 4, 46, 22,RGB(255,0,0),RGB(0,0,0),RGB(255,255,255)," Q u i t ","arial",9,#PB_Font_Bold))
SetGadgetAttribute(#Canvas, #PB_Canvas_Cursor, #PB_Cursor_Hand)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #bouton1
Color = ColorRequester()
ButtonImageGadget(#bouton1, 9, 330,78, 22,Imagebouton(#ImageBouton1, 4, 4, 75, 22,Color,RGB(255,255,255),RGB(0,0,0)," C o u l e u r ","arial",8,#PB_Font_Bold))
Case #bouton2
StartDrawing(CanvasOutput(#Canvas)) : Box(0, 0, 280, 310,#White) : StopDrawing()
Case #bouton3
Sauvegarde_Image_Canvas(Fichier$)
Case #bouton4
Quit = 1
EndSelect
EndSelect
If Event = #PB_Event_Gadget And EventGadget() = #Canvas
If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(#Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
c=1
StartDrawing(CanvasOutput(#Canvas))
x = GetGadgetAttribute(#Canvas, #PB_Canvas_MouseX)
y = GetGadgetAttribute(#Canvas, #PB_Canvas_MouseY)
Circle(x, y, 4, Color)
StopDrawing()
EndIf
;
If EventType() = #PB_EventType_MouseLeave
If c=1
Debug "sortie & save buffer"
EndIf
c=0
EndIf
EndIf
Until Quit = 1 Or Event = #PB_Event_CloseWindow
EndIf