[Résolu] Problème avec canvas

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

[Résolu] Problème avec canvas

Message par kernadec »

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 :mrgreen: 8O

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
voici un code qui crée des sauvegardes avec énumération pour les noms des image, dessin, etc..

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
Dernière modification par kernadec le sam. 04/avr./2020 6:35, modifié 3 fois.
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Problème avec canvas

Message par TazNormand »

Salut Kernadec,

je dirai qu'il n'y a rien d'anormal compte tenu que tu as bien 2 event :
1 mousemove
1 mouseleave/enter

vire le mousemove dans tes if et ça marche comme attendu
Image
Image
G-Rom
Messages : 3626
Inscription : dim. 10/janv./2010 5:29

Re: Problème avec canvas

Message par G-Rom »

Salut, comme dit taz :

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
        
        EvType = EventType()
        
        Select EventGadget()
          Case 0
            
            If EvType = #PB_EventType_MouseEnter
              X = GetGadgetAttribute(0, #PB_Canvas_MouseX)
              Y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
              Debug  ">>>>>>>>>>>>>>>"
              Debug  "interieur"   
              Debug  "<<<<<<<<<<<<<<<"
            EndIf
           
            If EvType = #PB_EventType_MouseLeave
              X = GetGadgetAttribute(0, #PB_Canvas_MouseX)
              Y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
              Debug  ">>>>>>>>>>>>>>>"
              Debug  "  Exterieur"
              Debug  "<<<<<<<<<<<<<<<"
            EndIf
        EndSelect
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Problème avec canvas

Message par kernadec »

desole de vous contredire
mais d'un sens j'ai qu'un signal et de l autre deux , c'est la ou cela c est pas normal
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Problème avec canvas

Message par Ar-S »

Tu devrais déjà plus utiliser Select plutôt que les IF pour ce genre de détection.

Ensuite, comme on te l'a dit, c'est le mousemove qui chie.
Enfin, ton x,y tu les calcules si le canvas est solicité, pas besoin de le faire à chaque eventtype.

Le code suivant sera plus parlant.
Ton mouse mouve apparait x fois, tant que tu bouges, les autres n'ont qu'un appel.

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
            X = GetGadgetAttribute(0, #PB_Canvas_MouseX)
            Y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
            
            Select EventType()
             Case #PB_EventType_MouseEnter
              Debug  ">>>>>>>>>>>>>>>"
              Debug  "interieur"   
              Debug  "<<<<<<<<<<<<<<<"
              
            Case #PB_EventType_MouseMove
              Debug  ">>>>>>>>>>>>>>>"
              Debug  "  Je bouge"
              Debug  "<<<<<<<<<<<<<<<"

             Case #PB_EventType_MouseLeave
              Debug  ">>>>>>>>>>>>>>>"
              Debug  "Exterieur"   
              Debug  "<<<<<<<<<<<<<<<"
            
            EndSelect
            
        EndSelect
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Problème avec canvas

Message par kernadec »

merci à vous
ce que je n'avais pas pigè c'est que tant que la souris et dans le gadget elle incrémente a chaque seconde la variable
je pensais que c'était un je suis dans la zone et 0 j'y suis plus mais pas avec un repetition
je vous fais mes excuse de vous avoir fait perdre votre temps précieux :?

cordialement

Code : Tout sélectionner

Global a.l ,b.l,c.l

Procedure test1()
  a=a+1
  c=c+1
  Debug  "interieur" +Str(a)  +"  :  " +Str(c)
EndProcedure

Procedure test2()
  b=b+1
  c=c+1
  Debug  "  Exterieur" +Str(b) +"  :  " +Str(c)
EndProcedure
If OpenWindow(0, 0, 0, 140,140, "CanvasGadget test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 20, 20, 100, 100)
  mouseposition.l
  
  Repeat
    a=0
    b=0
    Event = WaitWindowEvent()
    
    Select Event
        
      Case #PB_Event_Gadget
        Select EventGadget() 
            
          Case 0
            
            If EvType = #PB_EventType_MouseMove  Or EvType = #PB_EventType_MouseEnter
              X = GetGadgetAttribute(0, #PB_Canvas_MouseX)
              Y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
              
              Debug  ">>>>>>>>>>>>>>>"
              test2() 
              Debug  "<<<<<<<<<<<<<<<"
            EndIf
            
            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  ">>>>>>>>>>>>>>>"
              test1()
              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  ">>>>>>>>>>>>>>>" 
;               test2() 
;               Debug  "<<<<<<<<<<<<<<<"
;              EndIf
        EndSelect
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Problème avec canvas

Message par MLD »

Bonjour Kernadec

Il me semble que tu fait une erreur de logique, ou de fonctionnement du canvas :roll:
Fait un test avec ces deux codes, tu devrais comprendre. :lol:

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_MouseEnter
;              If EvType = #PB_EventType_MouseMove  
;               Debug "toto"
;             EndIf   
;               X = GetGadgetAttribute(0, #PB_Canvas_MouseX)
;               Y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
;               Debug  ">>>>>>>>>>>>>>>"
;               Debug  "interieur"   
;               Debug  "<<<<<<<<<<<<<<<"
;             EndIf
;             If EvType = #PB_EventType_MouseLeave
;               If EvType = #PB_EventType_MouseMove 
;               Debug "titi"
;             EndIf  
;               X = GetGadgetAttribute(0, #PB_Canvas_MouseX)
;               Y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
;               Debug  ">>>>>>>>>>>>>>>"
;               Debug  "  Exterieur"
;               Debug  "<<<<<<<<<<<<<<<"
;             EndIf
;         EndSelect
;     EndSelect
;   Until Event = #PB_Event_CloseWindow
; EndIf
  
Repeat
   
    Event = WaitWindowEvent(10000)
   
    Select Event
       
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0
            EvType = EventType()
            If EvType = #PB_EventType_MouseMove  
              Debug "toto"
            EndIf   
            If EvType = #PB_EventType_MouseEnter
              X = GetGadgetAttribute(0, #PB_Canvas_MouseX)
              Y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
              Debug  ">>>>>>>>>>>>>>>"
              Debug  "interieur"   
              Debug  "<<<<<<<<<<<<<<<"
            EndIf
            If EvType = #PB_EventType_MouseMove 
              Debug "titi"
            EndIf  
            If EvType = #PB_EventType_MouseLeave
              X = GetGadgetAttribute(0, #PB_Canvas_MouseX)
              Y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
              Debug  ">>>>>>>>>>>>>>>"
              Debug  "  Exterieur"
              Debug  "<<<<<<<<<<<<<<<"
            EndIf
        EndSelect
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf  

En fait entrer ou sortir du canvas ne fait pas forcément bon ménage associer avec MouseMove
Enfin c'est mon avis
A+
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Problème avec canvas

Message par MLD »

Ouarf
j'ai été grillé le temps de ma réponse
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Problème avec canvas

Message par kernadec »

merci MLD
en fait ca y est j'ai compris ca a mis du temps a faire le tour
j'ai ce que je voulais un interrupteur oui/non voilà c'est exactement ce que je voulais faire :mrgreen:

cordialement

Code : Tout sélectionner

Global a.l ,b.l,c.l

Procedure test1()
  a=a+1
  c=c+1
  Debug  "Exterieur" +Str(a)  +"  :  " +Str(c)
EndProcedure

Procedure test2()
  b=b+1
  c=c+1
  Debug  "  Interieur" +Str(b) +"  :  " +Str(c)
EndProcedure
If OpenWindow(0, 0, 0, 140,140, "CanvasGadget test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 20, 20, 100, 100)
  mouseposition.l
  
  Repeat
    a=0
    b=0
    Event = WaitWindowEvent()
    
    Select Event
        
      Case #PB_Event_Gadget
        Select EventGadget() 
            
          Case 0
            
            If EvType = #PB_EventType_MouseEnter
              X = GetGadgetAttribute(0, #PB_Canvas_MouseX)
              Y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
              
              Debug  ">>>>>>>>>>>>>>>"
              test2() 
              Debug  "<<<<<<<<<<<<<<<"
            EndIf
            
            EvType = EventType()
            If  EvType = #PB_EventType_MouseLeave
              X = GetGadgetAttribute(0, #PB_Canvas_MouseX)
              Y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
              
              Debug  ">>>>>>>>>>>>>>>"
              test1()
              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  ">>>>>>>>>>>>>>>" 
            ;               test2() 
            ;               Debug  "<<<<<<<<<<<<<<<"
            ;              EndIf
        EndSelect
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Problème avec canvas

Message par TazNormand »

kernadec a écrit :merci à vous
ce que je n'avais pas pigè c'est que tant que la souris et dans le gadget elle incrémente a chaque seconde la variable
je pensais que c'était un je suis dans la zone et 0 j'y suis plus mais pas avec un repetition
je vous fais mes excuse de vous avoir fait perdre votre temps précieux :?

cordialement
T'inquiète, en ce moment le temps on est nombreux à en avoir je pense :lol:

Je dis ça mais je bosse plus en étant en télétravail que quand je suis à mon bureau :?
Image
Image
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Problème avec canvas

Message par Ollivier »

Salut le messager Umoamoa !


je profite que tu parle de canvas pour t'inciter à regarder cet autre sujet :

https://www.purebasic.fr/french/viewtop ... 4&start=30

En l'occurence, le dernier code en page 3, mais tous le sujet et les autres codes sont bons à relire.

Normalement le dernier code page 3, tu es complètement couvert au niveau des évènements. Je pense que ça peut t'intéresser car je crois bien utiliser l'accélération vidéo des sprites et la gestion de la GUI avec CanvasGadget. A toi de voir !

Olliv
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Problème avec canvas

Message par kernadec »

bjr à tous
@TazNormand merci...
je suis de Caen et donc Normand depuis de générations :wink:

je dois te dire que j'avais un peu mis de cote PB
pour cela que je me suis fait attraper par le mousemove etc..
c'est le genre truc quand tu revisite un vieux code et que tu te dit
j'aurais pu faire plus simple, après quelques heures tu reviens au point départ 8O

@Ollivier
merci pour ta compile je vais l'étudier
mais je dois dire que je ne programme presque jamais
en screen les jeux ne m’intéresse plus vraiment..

Ce que je veux faire avec Canvas c'est un buffer fichier
temporaire qui sauve a chaque fois que tu quitte le Canvas
pour choisir une couleur etc..
donc voici le ptit code d'exemple.

Cordialement
ps: je vais le mettre au premier poste également.

Code : Tout sélectionner

Procedure Imagebouton(num_Img, x, y, w, h, colorFr, ColorTx, titre$, Ft$, hf,typ)
   
  ImgID = CreateImage(num_Img, w, h)
  Font=LoadFont(#PB_Any, ft$  , hf, typ)
  StartDrawing(ImageOutput(num_Img))
  DrawingMode(1)
  Box(0, 0, w, h,colorFr)
  DrawingFont(FontID(Font))
  FrontColor(RGB(0,0,0))
  DrawText(x+1,y-1,titre$)
  FrontColor(colorTx)
  DrawText(x,y,titre$)
  StopDrawing()
  ProcedureReturn ImgID
  
EndProcedure

Color.l=RGB(Random(255), Random(255), Random(255))

If OpenWindow(0, 0, 0, 300,330, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 10, 10, 280, 280,#PB_Canvas_ClipMouse)
  ButtonImageGadget(1, 10, 300,68, 20,Imagebouton(1,3,3,62, 20,Color,RGB(201,201,201),"Couleur","arial",8,#PB_Font_Bold))
  ButtonGadget(2, 130,  300, 50, 20, "Efface")
  ButtonGadget(3, 240,  300, 50, 20, "Quit")
  
  
  Repeat
    
    Event = WaitWindowEvent()
    
    Select Event
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 1
            Color = ColorRequester()
            ButtonImageGadget(1, 10,  300,68, 20,Imagebouton(1,3,3,62, 20,Color,RGB(201,201,201),"  Couleur","arial",8,#PB_Font_Bold))
          Case 2
            StartDrawing(CanvasOutput(0)) : Box(0, 0, 300, 300,#White) : StopDrawing()
          Case 3 
            Quit = 1
        EndSelect      
    EndSelect
    
    If Event = #PB_Event_Gadget And EventGadget() = 0 
      
      If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(0, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
        c=1
        
        StartDrawing(CanvasOutput(0))
        x = GetGadgetAttribute(0, #PB_Canvas_MouseX)
        y = GetGadgetAttribute(0, #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
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: [Résolu] Problème avec canvas

Message par TazNormand »

[Hors-sujet]
@Kernadec : tu es de Caen !!! je suis du Calvados aussi, avec ton pseudo j'aurais cru que tu étais plutôt breton. Tu vis toujours en Normandie ?
Je te rassure, ça fait des années que j'ai aussi mis PB de côté, je viens sur le forum très très souvent histoire de lire les différents topics des uns et des autres. Des fois je me marre.
Je travaille sur Caen, enfin surtout chez moi en ce moment.
Au plaisir de te lire
[/Hors-sujet]
Image
Image
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: [Résolu] Problème avec canvas

Message par MLD »

Super Kernadec
Super TazNormand ce trouve entre nous deux sur la même route .Après les problèmes de virus ,nous pourrons faire un apéro chez lui. :mrgreen: :oops: :lol:
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [Résolu] Problème avec canvas

Message par Micoute »

Il n'y a que les montagnes qui ne se rencontrent pas.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre