Page 1 sur 1

[R] Effacer $GUI_GR_RECT

Posté : sam. 27 avr. 2019 15:43
par Tespark
Bonjour :D

Je me permets à nouveau de vous solliciter et cela toujours pour mon petit programme.

Je cherche à supprimer les $GUI_GR_RECT d'un graphique quand je lance un calcul.
Je veux faire disparaitre le dernier calcul qui affiche ces carrés.

Le souci est encore une fois avec une Boite de dialogue à onglets, je me retrouve avec l'interface graphique sur chaque onglet si je veux supprimer ces carrés.

Voici un exemple pour montrer comment j'ai codé mon outil, en espérant avoir été claire pour ma demande.

Merci.
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
Global $Graphic1
#Region ### START Koda GUI section ### Form=
Global $Form2 = GUICreate("Boite de dialogue à onglets", 456, 313, 302, 218)
GUISetIcon("D:\005.ico", -1)
Global $PageControl1 = GUICtrlCreateTab(8, 8, 396, 256)
Global $TabSheet1 = GUICtrlCreateTabItem("Onglet 1")
_Grahique()
Global $TabSheet2 = GUICtrlCreateTabItem("Onglet 2")
Global $TabSheet3 = GUICtrlCreateTabItem("Onglet 3")
GUICtrlCreateTabItem("")
Global $Button1 = GUICtrlCreateButton("&Valider", 166, 272, 75, 25)
Global $Button2 = GUICtrlCreateButton("&Annuler", 246, 272, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit

      Case $Button1
         _calcul()

      Case $Button2 ; Boutton pour effacer les points, ici pour l'exmple sur un boutton, sur mon programme dans la fonction calcul pour réinitialiser à chaque calcul
         GUICtrlDelete($Graphic1)
         _Grahique()

   EndSwitch
WEnd

Func _Grahique()
   $Graphic1 = GUICtrlCreateGraphic(128, 72, 161, 161)
   GUICtrlSetBkColor(-1, 0xF0F0F0)
   GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 79, 0)
   GUICtrlSetGraphic(-1, $GUI_GR_LINE, 79, 156)
   GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, 80)
   GUICtrlSetGraphic(-1, $GUI_GR_LINE, 162, 80)
   GUICtrlSetState(-1, $GUI_ONTOP)
EndFunc

Func _calcul() ; bien sur ici pas de vrai calcul pour l'exemple, juste des points
   GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 40, 40, 6, 6)
   GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 110, 40, 6, 6)
   GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 40, 110, 6, 6)
   GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 110, 110, 6, 6)
   GUICtrlSetGraphic($Graphic1, $GUI_GR_REFRESH)
EndFunc
 

Re: [..] Effacer $GUI_GR_RECT

Posté : sam. 27 avr. 2019 17:01
par TommyDDR
Vous ne pouvez pas supprimer les rect comme vous semblez vouloir le faire.
Vous avez tout de même plusieurs choix pour y arriver :
1: Redessiner des RECT mais blanc (ne fonctionnera pas si les RECT sont supperposés à des éléments qui doivent rester visible)
2: Réinitialiser le graphic et redessiner tous les autres éléments seulement.

Re: [..] Effacer $GUI_GR_RECT

Posté : sam. 27 avr. 2019 17:54
par Tespark
Merci pour la réponse. :)

Je supprime le graphique et le crée à nouveau, donc les points sont supprimés, mais le souci est qu'il s'affiche sur tout les onglets, je voudrais qu'il s'affiche uniquement sur le premier onglet, comme quand on exécute le code.

Pour les carrés blancs il faudrait relancer le calcul, mais si je relance un calcul les valeurs changent, donc la position des carrés également et de plus effectivement ils peuvent superposer des lignes et/ou courbes.

Re: [..] Effacer $GUI_GR_RECT

Posté : sam. 27 avr. 2019 19:26
par mdanielm
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>

GUICreate("",200,200)

Global $gr1=GUICtrlCreateGraphic(0,0,100,100)
    GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 10, 10)
    GUICtrlSetGraphic(-1, $GUI_GR_LINE, 100, 100)

Global $gr2=GUICtrlCreateGraphic(50,60, 100,100)
   GUICtrlSetGraphic(-1, $GUI_GR_RECT, 10,10,50,50)

GUISetState(@SW_SHOW)
sleep(2000)
GUICtrlDelete($gr2)

Do
until GUIGetMsg()=$GUI_EVENT_CLOSE

Re: [..] Effacer $GUI_GR_RECT

Posté : sam. 27 avr. 2019 19:55
par Tespark
Bonjour mdanielm :)

comment l'intégrer avec l'exemple donnée en post 1 ?
Je veux réinitialiser à chaque calcul.
Et mes tests par rapport à la solution sont sans succès.
Le time n'est pas l'idéale pour la construction du programme.
Merci :wink:

Re: [..] Effacer $GUI_GR_RECT

Posté : sam. 27 avr. 2019 20:20
par mdanielm
Bonsoir,
La programmation ne consiste pas à intégrer des modules.
L'exemple montre qu'il faut utiliser 2 contrôles graphiques en regroupant ce que vous souhaitez effacer dans le même contrôle.
En une ligne vous effacez le contrôle, quitte à le recréer aussitôt!
Je vous conseille aussi d'étudier en détail l'exemple de la documentation… en FR bien sûr.
Cordialement.

Re: [..] Effacer $GUI_GR_RECT

Posté : sam. 27 avr. 2019 21:08
par Tespark
Merci pour votre réponse mdanielm ,

Ici je ne pense pas qu'il s'agisse de modules.
Je pense plus qu'il s'agit d'une mauvaises compréhension de ma part :cry: :lol: , mais je vous rassures, je travaille le .chm de AutoIt.fr.

Malgré ma compréhension à l'aide AutoIt, je ne parviens pas à faire cette suppression sans que le graphique s'ajoute aux autres onglets.
J'ai surement mal codé cet outil. En tout cas merci pour vos réponses et solution :wink:

Re: [..] Effacer $GUI_GR_RECT

Posté : sam. 27 avr. 2019 23:08
par mdanielm
RE
Il y a 2 problèmes:
-un lié aux TabItem : voir ci dessous la solution
-un lié à l'effacement du dessin: pour éviter de tout redessiner, utiliser 2 contrôles graphiques.


#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
Global $Form2 = GUICreate("Boite de dialogue à onglets", 456, 313, 302, 218)
GUISetIcon("D:\005.ico", -1)
Global $PageControl1 = GUICtrlCreateTab(8, 8, 396, 256)
Global $TabSheet1 = GUICtrlCreateTabItem("Onglet 1")
Global $TabSheet2 = GUICtrlCreateTabItem("Onglet 2")
Global $TabSheet3 = GUICtrlCreateTabItem("Onglet 3")
GUICtrlCreateTabItem("")
Global $Button1 = GUICtrlCreateButton("&Valider", 166, 272, 75, 25)
Global $Button2 = GUICtrlCreateButton("&Annuler", 246, 272, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $Graphic1
_Grahique()

Do
        $nMsg = GUIGetMsg()

      if GUICtrlRead($PageControl1)=0  then
         GUICtrlSetState($Graphic1, $GUI_ONTOP)
         Switch $nMsg
            Case $Button1 ;pour ajouter des points
               _calcul()
            Case $Button2 ; Boutton pour effacer les points, ici pour l'exmple sur un boutton, sur mon programme dans la fonction calcul pour réinitialiser à chaque calcul
               GUICtrlDelete($Graphic1)
               _Grahique()
         EndSwitch
      Else
         GUICtrlSetState($PageControl1, $GUI_ONTOP)
      EndIf

until $nMsg=$GUI_EVENT_CLOSE

;---------------------------------------------------
Func _Grahique() ;btn2
      $Graphic1 = GUICtrlCreateGraphic(128, 72, 161, 161)
        GUICtrlSetBkColor(-1, 0xF0F0F0)
        GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 79, 0)
        GUICtrlSetGraphic(-1, $GUI_GR_LINE, 79, 156)
        GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, 80)
        GUICtrlSetGraphic(-1, $GUI_GR_LINE, 162, 80)
        GUICtrlSetState(-1, $GUI_ONTOP)
      ;GUISetState(@SW_SHOW)
EndFunc

Func _calcul() ; bien sur ici pas de vrai calcul pour l'exemple, juste des points
        GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 40, 40, 6, 6)
        GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 110, 40, 6, 6)
        GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 40, 110, 6, 6)
        GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 110, 110, 6, 6)
        GUICtrlSetGraphic($Graphic1, $GUI_GR_REFRESH)
      GUISetState(@SW_SHOW)
EndFunc
 

Re: [R] Effacer $GUI_GR_RECT

Posté : dim. 28 avr. 2019 10:53
par Tespark
Bonjour mdanielm :)

J'ai réussit à l'intégrer à mon code et ça fonctionne très bien.
Sans votre aide je n'aurais pas réussi à le faire.

Il me reste encore pas mal de chose à faire pour cet outil, mais vous m'avez permis d'obtenir le résultat attendu.
Vraiment un grand merci. :D