[Résolu] comment effacer un DrawText sur un CanvasGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Résolu] comment effacer un DrawText sur un CanvasGadget

Message par Micoute »

Bonjour à tous, j'ai un petit problème, car je ne sais pas comment effacer une donnée dans un CanvasGadget.

Code : Tout sélectionner

Enumeration
  #Fenetre_principale
EndEnumeration
Enumeration
  #Canvas_0
  #Canvas_1
  #Canvas_2
  #Canvas_3
  #Canvas_4
  #Canvas_5
  #Canvas_6
  #Canvas_7
  #Canvas_8
  #Canvas_9
  #Canvas_10
  #Canvas_11
  #Canvas_12
  #Canvas_13
  #Canvas_14
  #Canvas_15
  #Canvas_16
  #Canvas_17
  #Canvas_18
  #Canvas_19
  #Canvas_20
  #Canvas_21
  #Canvas_22
  #Canvas_23
  #Canvas_24
  #Canvas_25
  #Canvas_26
  #Canvas_27
  #Canvas_28
  #Canvas_29
  #Canvas_30
  #Canvas_31
  #Canvas_32
  #Canvas_33
  #Canvas_34
  #Canvas_35
  #Canvas_36
  #Canvas_37
  #Canvas_38
  #Canvas_39
  #Canvas_40
  #Canvas_41
  #Canvas_42
  #Canvas_43
  #Canvas_44
  #Canvas_45
  #Canvas_46
  #Canvas_47
  #Canvas_48
  #Canvas_49
  #Canvas_50
  #Canvas_51
  #Canvas_52
  #Canvas_53
  #Canvas_54
  #Canvas_55
EndEnumeration

Enumeration Police
  #Police
EndEnumeration

Global.i Police = LoadFont(#Police, "Arial", 25, #PB_Font_Bold)

Declare GestionCanvas(Id, Chaine.s)

Procedure Ouvrir_Fenetre_principale()
  If OpenWindow(#Fenetre_principale, 450, 200, 847, 378, "Ma Fenêtre", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    CanvasGadget(#Canvas_0,   10,  15, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_1,   85,  15, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_2,  160,  15, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_3,  235,  15, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_4,  310,  15, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_5,  385,  15, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_6,  460,  15, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_7,  535,  15, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_8,  610,  15, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_9,  685,  15, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_10, 760,  15, 70, 65, #PB_Canvas_Border)
    
    CanvasGadget(#Canvas_11,  10,  85, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_12,  85,  85, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_13, 160,  85, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_14, 235,  85, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_15, 310,  85, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_16, 385,  85, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_17, 460,  85, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_18, 535,  85, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_19, 610,  85, 70, 65, #PB_Canvas_Border)    
    CanvasGadget(#Canvas_20, 685,  85, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_21, 760,  85, 70, 65, #PB_Canvas_Border)
    
    CanvasGadget(#Canvas_22,  10, 155, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_23,  85, 155, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_24, 160, 155, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_25, 235, 155, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_26, 310, 155, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_27, 385, 155, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_28, 460, 155, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_29, 535, 155, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_30, 610, 155, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_31, 685, 155, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_32, 760, 155, 70, 65, #PB_Canvas_Border)
    
    CanvasGadget(#Canvas_33,  10, 225, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_34,  85, 225, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_35, 160, 225, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_36, 235, 225, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_37, 310, 225, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_38, 385, 225, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_39, 460, 225, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_40, 535, 225, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_41, 610, 225, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_42, 685, 225, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_43, 760, 225, 70, 65, #PB_Canvas_Border)
    
    CanvasGadget(#Canvas_44,  10, 295, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_45,  85, 295, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_46, 160, 295, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_47, 235, 295, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_48, 310, 295, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_49, 385, 295, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_50, 460, 295, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_51, 535, 295, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_52, 610, 295, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_53, 685, 295, 70, 65, #PB_Canvas_Border)
    CanvasGadget(#Canvas_54, 760, 295, 70, 65, #PB_Canvas_Border)
  EndIf
EndProcedure

Ouvrir_Fenetre_principale()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Canvas_0
          GestionCanvas(#Canvas_0, "0")
        Case #Canvas_1
          GestionCanvas(#Canvas_1, "1")
        Case #Canvas_2
          GestionCanvas(#Canvas_2, "2")
        Case #Canvas_3
          GestionCanvas(#Canvas_3, "3")
        Case #Canvas_4
          GestionCanvas(#Canvas_4, "4")
        Case #Canvas_5
          GestionCanvas(#Canvas_5, "5")
        Case #Canvas_6
          GestionCanvas(#Canvas_6, "6")
        Case #Canvas_7
          GestionCanvas(#Canvas_7, "7")
        Case #Canvas_8
          GestionCanvas(#Canvas_8, "8")
        Case #Canvas_9
          GestionCanvas(#Canvas_9, "9")
        Case #Canvas_10
          GestionCanvas(#Canvas_10, "10")
        Case #Canvas_11
          GestionCanvas(#Canvas_11, "11")
        Case #Canvas_12
          GestionCanvas(#Canvas_12, "12")
        Case #Canvas_13
          GestionCanvas(#Canvas_13, "13")
        Case #Canvas_14
          GestionCanvas(#Canvas_14, "14")
        Case #Canvas_15
          GestionCanvas(#Canvas_15, "15")
        Case #Canvas_16
          GestionCanvas(#Canvas_16, "16")
        Case #Canvas_17
          GestionCanvas(#Canvas_17, "17")
        Case #Canvas_18
          GestionCanvas(#Canvas_18, "18")
        Case #Canvas_19
          GestionCanvas(#Canvas_19, "19")
        Case #Canvas_20
          GestionCanvas(#Canvas_20, "20")
        Case #Canvas_21
          GestionCanvas(#Canvas_21, "21")
        Case #Canvas_22
          GestionCanvas(#Canvas_22, "22")
        Case #Canvas_23
          GestionCanvas(#Canvas_23, "23")
        Case #Canvas_24
          GestionCanvas(#Canvas_24, "24")
        Case #Canvas_25
          GestionCanvas(#Canvas_25, "25")
        Case #Canvas_26
          GestionCanvas(#Canvas_26, "26")
        Case #Canvas_27
          GestionCanvas(#Canvas_27, "27")
        Case #Canvas_28
          GestionCanvas(#Canvas_28, "28")
        Case #Canvas_29
          GestionCanvas(#Canvas_29, "29")
        Case #Canvas_30
          GestionCanvas(#Canvas_30, "30")
        Case #Canvas_31
          GestionCanvas(#Canvas_31, "31")
        Case #Canvas_32
          GestionCanvas(#Canvas_32, "32")
        Case #Canvas_33
          GestionCanvas(#Canvas_33, "33")
        Case #Canvas_34
          GestionCanvas(#Canvas_34, "34")
        Case #Canvas_35
          GestionCanvas(#Canvas_35, "35")
        Case #Canvas_36
          GestionCanvas(#Canvas_36, "36")
        Case #Canvas_37
          GestionCanvas(#Canvas_37, "37")
        Case #Canvas_38
          GestionCanvas(#Canvas_38, "38")
        Case #Canvas_39
          GestionCanvas(#Canvas_39, "39")
        Case #Canvas_40
          GestionCanvas(#Canvas_40, "40")
        Case #Canvas_41
          GestionCanvas(#Canvas_41, "41")
        Case #Canvas_42
          GestionCanvas(#Canvas_42, "42")
        Case #Canvas_43
          GestionCanvas(#Canvas_43, "43")
        Case #Canvas_44
          GestionCanvas(#Canvas_44, "44")
        Case #Canvas_45
          GestionCanvas(#Canvas_45, "45")
        Case #Canvas_46
          GestionCanvas(#Canvas_46, "46")
        Case #Canvas_47
          GestionCanvas(#Canvas_47, "47")
        Case #Canvas_48
          GestionCanvas(#Canvas_48, "48")
        Case #Canvas_49
          GestionCanvas(#Canvas_49, "49")
        Case #Canvas_50
          GestionCanvas(#Canvas_50, "50")
        Case #Canvas_51
          GestionCanvas(#Canvas_51, "51")
        Case #Canvas_52
          GestionCanvas(#Canvas_52, "52")
        Case #Canvas_53
          GestionCanvas(#Canvas_53, "53")
        Case #Canvas_54
          GestionCanvas(#Canvas_54, "54")
        Case #Canvas_55
          GestionCanvas(#Canvas_55, "55")
      EndSelect
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          CloseWindow(#Fenetre_principale)
          Break
      EndSelect
  EndSelect
ForEver

Procedure GestionCanvas(Id, Chaine.s)
  CouleurFond = $FFFFFF
  CouleurTexte = 0
  StartDrawing(CanvasOutput(Id))
  DrawingFont(Police)
  DrawText(20,10, Chaine, CouleurTexte, CouleurFond)
  StopDrawing()
  If #PB_EventType_LeftClick
    StartDrawing(CanvasOutput(Id))
    DrawText(30,30, "  ", CouleurFond, CouleurFond)
    StopDrawing()
  EndIf  
EndProcedure
Je vous remercie de votre aide précieuse.
Dernière modification par Micoute le lun. 16/sept./2013 13:07, modifié 1 fois.
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: comment effacer un DrawText sur un CanvasGadget

Message par Ar-S »

Salut Micoute.
sans te filer de correction, on voit déjà que tu appelles 2 startdrawing(canvasoutput) dans ta procédure.
Multiplions ça par ton nombre de Canvas et on voit que les appelles sont très très nombreux ce qui va rendre ton code très lourd.
donc en premier lieu, mets un startdrawing en debut de boucle et ton stopdrawing à la fin.

Code : Tout sélectionner

  StartDrawing(CanvasOutput(Id))
		      
     Select EventGadget()
		Case #Canvas_0
                GestionCanvas(#Canvas_0, "55")
          ;      (....)
		Case #Canvas_55
		GestionCanvas(#Canvas_55, "55")
	EndSelect			

StopDrawing()
Ensuite, n'oublie pas que le canvas est un dessin, donc tu ne remplaces pas un texte par un autre, si tu veux effacer, surveilles ton clic gauche mais au lieu d'ecrire du texte, dessine une box() couleur d'arrière plan.
~~~~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
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: comment effacer un DrawText sur un CanvasGadget

Message par Ar-S »

Allez version Light, regarde les event()

Code : Tout sélectionner

Enumeration
	#Fenetre_principale
EndEnumeration
Enumeration 0
	#Canvas_0
	#Canvas_1
EndEnumeration

Enumeration Police
	#Police
EndEnumeration

Global.i Police = LoadFont(#Police, "Arial", 25, #PB_Font_Bold)

Declare GestionCanvas(Id, Chaine.s)

Procedure Ouvrir_Fenetre_principale()
	If OpenWindow(#Fenetre_principale, 450, 200, 847, 378, "Ma Fenêtre", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
				
		CanvasGadget(#Canvas_0,   10,  15, 70, 65, #PB_Canvas_Border)
		CanvasGadget(#Canvas_1,   85,  15, 70, 65, #PB_Canvas_Border)
		
	EndIf
EndProcedure

Ouvrir_Fenetre_principale()

Repeat
	Select WaitWindowEvent()
		Case #PB_Event_Gadget
		
		      StartDrawing(CanvasOutput(Id))
		      
			Select EventGadget()
				Case #Canvas_0
				      id =  #Canvas_0
					GestionCanvas(#Canvas_0, Str(#Canvas_0))
				Case #Canvas_1
				      id = #Canvas_1
					GestionCanvas(#Canvas_1, Str(#Canvas_1))
				
			EndSelect
			
			StopDrawing()
			
			
		Case #PB_Event_CloseWindow
			Select EventWindow()
				Case #Fenetre_principale
					CloseWindow(#Fenetre_principale)
					Break
			EndSelect
	EndSelect
ForEver

Procedure GestionCanvas(Id, Chaine.s)

	CouleurFond = $FFFFFF
	CouleurTexte = 0

      	      Select EventType()
            	      Case #PB_EventType_RightClick 
            		      Box(0,0, GadgetWidth(id), GadgetHeight(id) , CouleurFond)
                              Debug "right"
      	            Case #PB_EventType_LeftClick 
      	                  DrawingFont(Police) 
	                        DrawText(20,10, Chaine, CouleurTexte, CouleurFond) 
	                        Debug "left"
	             EndSelect

EndProcedure

Clic gauche : ecrire
Clic droit : effacer
~~~~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
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: comment effacer un DrawText sur un CanvasGadget

Message par blendman »

salut

Sinon, quand tu répètes des choses, n'oublies pas les boucles for -next, les modulo, etc.. ;)

Code : Tout sélectionner

#Nb_de_canvas = 55

Enumeration
  #Fenetre_principale
EndEnumeration

Enumeration
  #Canvas_0 ; tu auras 55 canvas ou plus, en changeant juste le numéro en dessous du gadget
  #GadgetSuivant = #Nb_de_canvas
EndEnumeration

Enumeration Police
  #Police
EndEnumeration

Global.i Police = LoadFont(#Police, "Arial", 25, #PB_Font_Bold)

Declare GestionCanvas(Id, chaine$, type)

Procedure Ouvrir_Fenetre_principale()
  
  If OpenWindow(#Fenetre_principale, 450, 200, 847, 378, "Ma Fenêtre", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    
    For i= 0 To #Nb_de_canvas
      
      x = (i * 75)%825 ; modulo : le reste de la division
      y = (i * 75)/825
      
      CanvasGadget(#Canvas_0 + i,  10 + x, 15 + y * 70, 70, 65, #PB_Canvas_Border)
      
    Next i
    
  EndIf
  
 EndProcedure
  
Ouvrir_Fenetre_principale()

Repeat
  
  Event       = WaitWindowEvent()
  EventGadget = EventGadget()
  EventType   = EventType()
  
  Select event 
      
    Case #PB_Event_Gadget
      
      chaine$ = Str(EventGadget - #Canvas_0)
      
      If StartDrawing(CanvasOutput(EventGadget ))
        
        GestionCanvas(EventGadget , chaine$, EventType)
        StopDrawing()
        
      EndIf
      
  EndSelect

Until event = #PB_Event_CloseWindow


Procedure GestionCanvas(id, chaine$, type)
  CouleurFond = $FFFFFF
  CouleurTexte = 0
 
  Select type 
    Case #PB_EventType_LeftButtonDown
      Box(0,0, GadgetWidth(id), GadgetHeight(id) , CouleurFond)
      DrawText(30,30, "  ", CouleurFond, CouleurFond)
    Case #PB_EventType_RightButtonDown
      DrawingFont(Police)
      DrawText(20,10, Chaine$, CouleurTexte, CouleurFond)
  EndSelect

EndProcedure

Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: comment effacer un DrawText sur un CanvasGadget

Message par Micoute »

Merci à vous deux pour vos réponses très instructives.
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre