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