[R] Plusieurs graphique sur boite à onglets

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 08:55
Status : Hors ligne

[R] Plusieurs graphique sur boite à onglets

#1

Message par Tespark »

Bonjour :)

Je vous sollicite à nouveau pour mon petit programme.
J'ai bien avancé suite à ce sujet , mais je me retrouve face à un souci que je n'arrive pas à comprendre. Je voudrais ajouter un graphique sur un nouvel onglet.
Actuellement j'ai le graphique comme l'exemple du lien ci-dessus mais je voudrais rajouter un deuxième graphique, mais ça fait plus sapin de noêl que autre chose :roll:

Alors peut-être que la boucle n'est pas la bonne mais mes différents tests ne donnent rien.

Si vous avez une idée je suis preneur.
Merci
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
Global $Graphic1, $Graphic2
#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 $Button1 = GUICtrlCreateButton("Valider", 166, 272, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 246, 272, 75, 25)

Global $TabSheet2 = GUICtrlCreateTabItem("Onglet 2")
Global $btTestOnglet2 = GUICtrlCreateButton("Exit", 166, 222, 75, 25)

Global $TabSheet3 = GUICtrlCreateTabItem("Onglet 3")
Global $bt1Onglet3 = GUICtrlCreateButton("Calcul", 166, 222, 75, 25)
Global $bt2Onglet3 = GUICtrlCreateButton("Valider", 240, 222, 75, 25)
;~ Global $Graphic2 = GUICtrlCreateGraphic(112, 32, 225, 161)
;~ GUICtrlSetGraphic(-1, $GUI_GR_PIE, 63, 68, 55, 45, 315)
;~ GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 45, 26, 21, 18)
;~ GUICtrlSetState(-1, $GUI_ONTOP)
_Grahique2()
GUICtrlCreateTabItem("")

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

_Grahique()

Do
   $nMsg = GUIGetMsg()

   If GUICtrlRead($PageControl1) = 0 Then
      GUICtrlSetState($Graphic1, $GUI_ONTOP)
      Switch $nMsg
         Case $Button1 ;pour ajouter des points
            _calcul()
         Case $Button2
            GUICtrlDelete($Graphic1)
            _Grahique()
      EndSwitch
   Else
      GUICtrlSetState($PageControl1, $GUI_ONTOP)
   EndIf


   Switch $nMsg
      Case $btTestOnglet2
         MsgBox(0, "TEST", "OK Onglet 2")
   EndSwitch


;~    GUICtrlSetState($Graphic1, $GUI_HIDE)
   GUICtrlSetState($Graphic2, $GUI_SHOW)
   GUICtrlSetState($Graphic2, $TabSheet3)
;~       GUICtrlSetState(-1, $GUI_ONTOP)

   Switch $nMsg
      Case $bt1Onglet3
         _calcul2()
      Case $bt2Onglet3
         GUICtrlSetState($TabSheet3, $GUI_ENABLE)
         MsgBox(0, "TEST", "OK Onglet 3")
         GUICtrlDelete($Graphic2)
         _Grahique2()
   EndSwitch


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, 160)
   GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, 80)
   GUICtrlSetGraphic(-1, $GUI_GR_LINE, 160, 80)
   GUICtrlSetState(-1, $GUI_ONTOP)
   ;GUISetState(@SW_SHOW)
EndFunc  

Func _Grahique2() ;btn2
   Global $Graphic2 = GUICtrlCreateGraphic(112, 32, 225, 161)
   GUICtrlSetGraphic(-1, $GUI_GR_PIE, 63, 68, 55, 45, 315)
   GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 45, 26, 21, 18)
   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)
   GUISetState(@SW_SHOW)
EndFunc  

Func _calcul2() ; bien sur ici pas de vrai calcul pour l'exemple, juste des points
   GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 20, 20, 6, 6)
   GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 80, 20, 6, 6)
   GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 20, 80, 6, 6)
   GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 80, 80, 6, 6)
   GUICtrlSetGraphic($Graphic1, $GUI_GR_REFRESH)
   GUISetState(@SW_SHOW)
EndFunc  
Modifié en dernier par Tespark le sam. 04 mai 2019 21:11, modifié 1 fois.
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: [..] Plusieurs graphique sur boite à onglets

#2

Message par mdanielm »

Bonsoir
Veuillez préciser votre projet pour qu'on ait une vue globale du problème.
Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 08:55
Status : Hors ligne

Re: [..] Plusieurs graphique sur boite à onglets

#3

Message par Tespark »

Bonsoir mdanielm,

merci pour votre réponse.
Je suis désolé d'être imprécis.

Mon projet est de créer un outil qui permet plusieurs calculs. Cela fonctionnent.
Le but étant d'afficher des points, carrés sur des graphiques et cela dans le résultat du calcul des données et pour finir de les effacer suite à un nouveau calcul.
Et cela fonctionne également suite à votre intervention.

Mais pour le projet graphique, malheureusement ça ne fonctionne pas.
L'outil à 6 onglets et travaille pour 4 sans graphique, seulement 2 sont concernés.
Pour le premier graphique, pas de souci (your intervention).
Par contre si je veux travailler un nouveau graphique et cela sur un onglet différent, je ne parviens pas au résultat.

Ici un exemple, le principe est identique.
#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", 407, 272, 926, 289)
GUISetIcon("D:\005.ico", -1)
Global $PageControl1 = GUICtrlCreateTab(8, 8, 396, 256)

Global $TabSheet1 = GUICtrlCreateTabItem("Onglet 1")
Global $Graphic1 = GUICtrlCreateGraphic(80, 80, 265, 145)
GUICtrlSetBkColor(-1, 0xF0F0F0)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 21, 15, 159, 101)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 56, 21, 90, 90)
GUICtrlSetState(-1, $GUI_ONTOP)
Global $Button1 = GUICtrlCreateButton("Calcul", 16, 40, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
Global $Button2 = GUICtrlCreateButton("Effacer", 112, 40, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")

Global $TabSheet2 = GUICtrlCreateTabItem("Onglet 2")
Global $Graphic2 = GUICtrlCreateGraphic(120, 48, 273, 177)
GUICtrlSetBkColor(-1, 0xF0F0F0)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, 79, 74, 57, 45, 315)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 55, 32, 22, 24)
GUICtrlSetState(-1, $GUI_ONTOP)
Global $Button3 = GUICtrlCreateButton("Calcul", 24, 56, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
Global $Button4 = GUICtrlCreateButton("Effacer", 24, 96, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")

Global $TabSheet3 = GUICtrlCreateTabItem("Onglet 3")
; Autres instructions sans graphiques ajoutés
Global $Button5 = GUICtrlCreateButton("Calcul", 16, 80, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
Global $Button6 = GUICtrlCreateButton("Effacer", 16, 120, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

      Case $Button2
         GUICtrlDelete($Graphic1)
         $Graphic1 = GUICtrlCreateGraphic(80, 80, 265, 145)
         GUICtrlSetBkColor(-1, 0xF0F0F0)
         GUICtrlSetGraphic(-1, $GUI_GR_RECT, 21, 15, 159, 101)
         GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 56, 21, 90, 90)
         GUICtrlSetState(-1, $GUI_ONTOP)

      Case $Button3
         _calcul2()

      Case $Button4
         $Graphic2 = GUICtrlCreateGraphic(120, 48, 273, 177)
         GUICtrlSetBkColor(-1, 0xF0F0F0)
         GUICtrlSetGraphic(-1, $GUI_GR_PIE, 79, 74, 57, 45, 315)
         GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 55, 32, 22, 24)
         GUICtrlSetState(-1, $GUI_ONTOP)

      Case $Button5
         MsgBox(0, "test", "Good") ; les autres fonctions; Par exemple
   EndSwitch
WEnd

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   ;==>_calcul

Func _calcul2()
   GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 20, 20, 6, 6)
   GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 80, 20, 6, 6)
   GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 20, 80, 6, 6)
   GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 80, 80, 6, 6)
   GUICtrlSetGraphic($Graphic1, $GUI_GR_REFRESH)
   GUISetState(@SW_SHOW)
EndFunc   ;==>_calcul2
 
Premier onglet fonctionne : Ajout et suppression pour nouveau calcul
Deuxième onglet pose souci : Ajout suppression = graphiques se superposent ou absent
Troisième onglet fonctionne, mais graphique absent et superposé.

Je ne comprends pas comment afficher des graphiques différents sur une boite de dialogue à onglets.
En tous cas merci mdanielm :wink:
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Plusieurs graphique sur boite à onglets

#4

Message par walkson »

Bonjour,
Le problème est GUICtrlDelete($Graphic1)
Quand vous recréez le graphic, il n'est plus rattaché à un tab et le programme part en vrille !
3 solutions à mon avis, soit détruire le tab et le refaire, soit recréer un graphic sur le tab, soit le coup de pinceau :mrgreen:
Comme je trouve les 2 premières solutions un peu lourdes, je choisis la troisième, c'est à dire de créer un rectangle gris sur toute la surface pour cacher les formes en dessous et de réécrire au dessus. C'est peut être pas très propre mais c'est simple...

Code : Tout sélectionner

#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", 407, 272, 926, 289)
GUISetIcon("D:\005.ico", -1)
Global $PageControl1 = GUICtrlCreateTab(8, 8, 396, 256)

Global $TabSheet1 = GUICtrlCreateTabItem("Onglet 1")
Global $Graphic1 = GUICtrlCreateGraphic(80, 80, 265, 145)
GUICtrlSetBkColor(-1, 0xF0F0F0)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 21, 15, 159, 101)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 56, 21, 90, 90)
GUICtrlSetState(-1, $GUI_ONTOP)
Global $Button1 = GUICtrlCreateButton("Calcul", 16, 40, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
Global $Button2 = GUICtrlCreateButton("Effacer", 112, 40, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")

Global $TabSheet2 = GUICtrlCreateTabItem("Onglet 2")
Global $Graphic2 = GUICtrlCreateGraphic(120, 48, 273, 177)
GUICtrlSetBkColor(-1, 0xF0F0F0)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, 79, 74, 57, 45, 315)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 55, 32, 22, 24)
GUICtrlSetState(-1, $GUI_ONTOP)
Global $Button3 = GUICtrlCreateButton("Calcul", 24, 56, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
Global $Button4 = GUICtrlCreateButton("Effacer", 24, 96, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")

Global $TabSheet3 = GUICtrlCreateTabItem("Onglet 3")
; Autres instructions sans graphiques ajoutés
Global $Button5 = GUICtrlCreateButton("Calcul", 16, 80, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
Global $Button6 = GUICtrlCreateButton("Effacer", 16, 120, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

                Case $Button2

                        GUICtrlSetGraphic($Graphic1,$GUI_GR_COLOR, 0xF0F0F0,0xF0F0F0);gris sur toute la surface et le trait
						GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 0, 0, 265, 145)
						GUICtrlSetGraphic($Graphic1, $GUI_GR_REFRESH)
						GUICtrlSetGraphic($Graphic1,$GUI_GR_COLOR, 0x000000);trait en noir
                        GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 21, 15, 159, 101)
                        GUICtrlSetGraphic($Graphic1, $GUI_GR_ELLIPSE, 56, 21, 90, 90)
						GUICtrlSetGraphic($Graphic1, $GUI_GR_REFRESH)
                        GUICtrlSetState($Graphic1, $GUI_ONTOP)

                Case $Button3
                        _calcul2()

			Case $Button4
                        GUICtrlSetGraphic($Graphic2,$GUI_GR_COLOR, 0xF0F0F0,0xF0F0F0)
						GUICtrlSetGraphic($Graphic2, $GUI_GR_RECT, 0, 0, 265, 145)
						GUICtrlSetGraphic($Graphic2, $GUI_GR_REFRESH)
						GUICtrlSetGraphic($Graphic2,$GUI_GR_COLOR, 0x000000)
                        GUICtrlSetBkColor($Graphic2, 0xF0F0F0)
                        GUICtrlSetGraphic($Graphic2, $GUI_GR_PIE, 79, 74, 57, 45, 315)
                        GUICtrlSetGraphic($Graphic2, $GUI_GR_ELLIPSE, 55, 32, 22, 24)
						GUICtrlSetGraphic($Graphic2, $GUI_GR_REFRESH)
                        GUICtrlSetState($Graphic2, $GUI_ONTOP)

                Case $Button5
                        MsgBox(0, "test", "Good") ; les autres fonctions; Par exemple
        EndSwitch
WEnd

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   ;==>_calcul

Func _calcul2()
        GUICtrlSetGraphic($Graphic2, $GUI_GR_RECT, 20, 20, 6, 6)
        GUICtrlSetGraphic($Graphic2, $GUI_GR_RECT, 80, 20, 6, 6)
        GUICtrlSetGraphic($Graphic2, $GUI_GR_RECT, 20, 80, 6, 6)
        GUICtrlSetGraphic($Graphic2, $GUI_GR_RECT, 80, 80, 6, 6)
        GUICtrlSetGraphic($Graphic2, $GUI_GR_REFRESH)
        GUISetState(@SW_SHOW)
EndFunc   ;==>_calcul2
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Plusieurs graphique sur boite à onglets

#5

Message par jchd »

Ca fonctionne, mais à ne pas réitérer trop lourdement !
Car tout ce qui a été dessiné sera dessiné à nouveau à chaque raffraîchissement de la fenêtre. Si le coup de "tout mettre sous le tapis gris" est empilé 10000 fois, ça va faire des paquets de bribes graphiques en mémoire que Windows devra redessiner si la fenêtre est déplacée, retaillée, restaurée, redécouverte, etc.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Plusieurs graphique sur boite à onglets

#6

Message par walkson »

Après quelques recherches, la deuxième solution n'est pas si compliquée (recréer un graphic sur le tab) et surement plus propre
Une autre solution qui devrait plaire un peu plus à Jchd :mrgreen:
#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", 407, 272, 926, 289)
GUISetIcon("D:\005.ico", -1)
Global $PageControl1 = GUICtrlCreateTab(8, 8, 396, 256)

Global $TabSheet1 = GUICtrlCreateTabItem("Onglet 1")
Global $Graphic1 = GUICtrlCreateGraphic(80, 80, 265, 145)
GUICtrlSetBkColor(-1, 0xF0F0F0)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 21, 15, 159, 101)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 56, 21, 90, 90)
GUICtrlSetState(-1, $GUI_ONTOP)
Global $Button1 = GUICtrlCreateButton("Calcul", 16, 40, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
Global $Button2 = GUICtrlCreateButton("Effacer", 112, 40, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")

Global $TabSheet2 = GUICtrlCreateTabItem("Onglet 2")
Global $Graphic2 = GUICtrlCreateGraphic(120, 48, 273, 177)
GUICtrlSetBkColor(-1, 0xF0F0F0)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, 79, 74, 57, 45, 315)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 55, 32, 22, 24)
GUICtrlSetState(-1, $GUI_ONTOP)
Global $Button3 = GUICtrlCreateButton("Calcul", 24, 56, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
Global $Button4 = GUICtrlCreateButton("Effacer", 24, 96, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")

Global $TabSheet3 = GUICtrlCreateTabItem("Onglet 3")
; Autres instructions sans graphiques ajoutés
Global $Button5 = GUICtrlCreateButton("Calcul", 16, 80, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
Global $Button6 = GUICtrlCreateButton("Effacer", 16, 120, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

                Case $Button2
                        GUICtrlDelete($Graphic1)
                  GUISwitch($Form2, $TabSheet1)
                        $Graphic1 = GUICtrlCreateGraphic(80, 80, 265, 145)
                        GUICtrlSetBkColor(-1, 0xF0F0F0)
                        GUICtrlSetGraphic(-1, $GUI_GR_RECT, 21, 15, 159, 101)
                        GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 56, 21, 90, 90)
                        GUICtrlSetState(-1, $GUI_ONTOP)
                  GUICtrlCreateTabItem("")

                Case $Button3
                        _calcul2()

                Case $Button4
                        GUICtrlDelete($Graphic2)
                  GUISwitch($Form2, $TabSheet2)
                  $Graphic2 = GUICtrlCreateGraphic(120, 48, 273, 177)
                        GUICtrlSetBkColor(-1, 0xF0F0F0)
                        GUICtrlSetGraphic(-1, $GUI_GR_PIE, 79, 74, 57, 45, 315)
                        GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 55, 32, 22, 24)
                        GUICtrlSetState(-1, $GUI_ONTOP)
                  GUICtrlCreateTabItem("")

                Case $Button5
                        MsgBox(0, "test", "Good") ; les autres fonctions; Par exemple
        EndSwitch
WEnd

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   ;==>_calcul

Func _calcul2()
        GUICtrlSetGraphic($Graphic2, $GUI_GR_RECT, 20, 20, 6, 6)
        GUICtrlSetGraphic($Graphic2, $GUI_GR_RECT, 80, 20, 6, 6)
        GUICtrlSetGraphic($Graphic2, $GUI_GR_RECT, 20, 80, 6, 6)
        GUICtrlSetGraphic($Graphic2, $GUI_GR_RECT, 80, 80, 6, 6)
        GUICtrlSetGraphic($Graphic2, $GUI_GR_REFRESH)
        GUISetState(@SW_SHOW)
EndFunc   ;==>_calcul2
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Plusieurs graphique sur boite à onglets

#7

Message par jchd »

Bah, je disais ça pour éviter qu'on nous dise "J'ai utilisé mon prog pour faire des tas de calculs, mais je m'aperçois qu'il me bouffe maintenant 7 Go de RAM et qu'il rame à mort".
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 08:55
Status : Hors ligne

Re: [..] Plusieurs graphique sur boite à onglets

#8

Message par Tespark »

Hello

Merci walkson :wink:

Ça fonctionne nickel avec la première solution.
J'ai travaillé sur celle-ci avant de voir vos posts.

Et le résultat est au rendez-vous.
Franchement merci, je suis content d'aboutir sur ce travail.

jchd

J'ai testé environ une centaine d’interrogation sur le programme et mon PC ne molli pas.
A mon avis les utilisateurs du programme vont l'utiliser 2 voir 3 fois à suivre et pour le acharnés un dizaine de fois.
Merci en tous cas :)

Je vais me pencher sur cette deuxième solution et si j'arrive à l'adapter à mon programme je passe le sujet en résolu.
Et si je galère je le passe tout de même en résolu car ça fonctionne comme ça.

Je travaille sur la deuxième solution et fait un retour.

Merci vraiment à tous les deux. :wink:
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Plusieurs graphique sur boite à onglets

#9

Message par walkson »

Si je me réfère au code au début du post, un "toilettage" me parait indispensable !
parce que quand je lis:
Do
        $nMsg = GUIGetMsg()

        If GUICtrlRead($PageControl1) = 0 Then
                GUICtrlSetState($Graphic1, $GUI_ONTOP)
                Switch $nMsg
                        Case $Button1 ;pour ajouter des points
                                _calcul()
                        Case $Button2
                                GUICtrlDelete($Graphic1)
                                _Grahique()
                EndSwitch
        Else
                GUICtrlSetState($PageControl1, $GUI_ONTOP)
        EndIf


        Switch $nMsg
                Case $btTestOnglet2
                        MsgBox(0, "TEST", "OK Onglet 2")
        EndSwitch


;~      GUICtrlSetState($Graphic1, $GUI_HIDE)
        GUICtrlSetState($Graphic2, $GUI_SHOW)
        GUICtrlSetState($Graphic2, $TabSheet3)
;~              GUICtrlSetState(-1, $GUI_ONTOP)

        Switch $nMsg
                Case $bt1Onglet3
                        _calcul2()
                Case $bt2Onglet3
                        GUICtrlSetState($TabSheet3, $GUI_ENABLE)
                        MsgBox(0, "TEST", "OK Onglet 3")
                        GUICtrlDelete($Graphic2)
                        _Grahique2()
        EndSwitch


Until $nMsg = $GUI_EVENT_CLOSE
J'ai les poils qui se dressent :shock:
Switch $nMsg à la suite ?? :shock:
Jchd a raison, un bon code est un code qui ne consomme peu de RAM et je rajouterais " et qu'il soit au plus court"
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 08:55
Status : Hors ligne

Re: [..] Plusieurs graphique sur boite à onglets

#10

Message par Tespark »

Toilettage, ben pourquoi pas :D

Je suis novice, est essaye de faire un programme, vos solutions me permettent d'avancer et merci pour ça.
Mais je suis loin de vos logiques sur la façon de construire le code, et merci, car vos remarques et exemples me permettent d'avancer.
Je réfléchi, mais je n'ai surement pas votre expérience.

J'ai tester la deuxième solution, mais il me manque quelque chose.
Ca beug, mais je travaille demain sur le sujet.

Merci à vous :bisou:
Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 08:55
Status : Hors ligne

Re: [R] Plusieurs graphique sur boite à onglets

#11

Message par Tespark »

Bonsoir walkson, jchd

Deuxième solution intégré au programme.
Vraiment merci car très content du résultat.

Me permettez-vous de vous solliciter à nouveau.

Je reviens sur le toilettage et surement ma mauvaise compréhension.
Les déclarations Switch peuvent être imbriquées AutoIt.chm

Surement une incompréhension de ma part, mais je voudrais comprendre pourquoi vous avez les poils qui se dressent.
Une belle erreur de ma part :shock: Merci pour cette remarque constructive, mais voulez-vous m'expliquer cette aide de AutoIt que je semble ne pas avoir compris.
J'aurais du faire plutôt comme ceci ?
Do
   $nMsg = GUIGetMsg()

   Switch $nMsg
      Case $Button1
         _calcul()

      Case $Button2
         GUICtrlDelete($Graphic1)
         _Grahique()

      Case $btTestOnglet2
         MsgBox(0, "TEST", "OK Onglet 2")
         GUICtrlSetState($Graphic2, $GUI_SHOW)
         GUICtrlSetState($Graphic2, $TabSheet3)

      Case $bt1Onglet3
         _calcul2()

      Case $bt2Onglet3
         GUICtrlSetState($TabSheet3, $GUI_ENABLE)
         MsgBox(0, "TEST", "OK Onglet 3")
         GUICtrlDelete($Graphic2)
         _Grahique2()

   EndSwitch
Until $nMsg = $GUI_EVENT_CLOSE
Mais les graphiques se mélangent avec les onglets.
L'exemple du post 1 de ce sujet, était l'exemple sur la façon d'essayer de gérer les différents graphiques et cela que au niveau affichage.
Mais vous allez surement me dire que je colle des Switch dans une boucle. Mais c'était pour moi la manière d'avancer. Il semble que je ne comprends pas le faite d'imbriquer des Switch.
Bien évidemment merci encore une fois, vos exemples m'ont permis d'avancer.
:)
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: [R] Plusieurs graphique sur boite à onglets

#12

Message par mdanielm »

MA SOLUTION:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>

Global $hGui = GUICreate("Contrôle à onglets", 440, 300, 302, 200)

Global $Tab = GUICtrlCreateTab(8, 8, 396, 256)
Global $tab0 = GUICtrlCreateTabItem("Onglet 0")
Global $tab1 = GUICtrlCreateTabItem("Onglet 1")
Global $tab2 = GUICtrlCreateTabItem("Onglet 2")
GUICtrlCreateTabItem("") ; très important

Global $btn1 = GUICtrlCreateButton("&Calcul", 146, 270, 75, 25)
Global $btn2 = GUICtrlCreateButton("&Annuler", 246, 270, 75, 25)


Global $gr1 = GUICtrlCreateGraphic(128, 72, 161, 161)
Global $gr1a=GUICtrlCreateGraphic(128, 72, 161, 161)
Graph1()
Calcul1()
GUICtrlSetState($gr1, $GUI_ONTOP)
GUICtrlSetState($gr1a, $GUI_HIDE)

Global $gr2 = GUICtrlCreateGraphic(128, 72, 161, 161)
Global $gr2a= GUICtrlCreateGraphic(128, 72, 161, 161)
Graph2()
Calcul2()
GUICtrlSetState($gr2, $GUI_HIDE)
GUICtrlSetState($gr2a, $GUI_HIDE)

GUISetState(@SW_SHOW)

Global $onglet=0

Do
   $nMsg = GUIGetMsg()

   Switch $nMsg
      case $tab
         $onglet = GUICtrlRead($tab)
         Switch $onglet
            case 0
               GUICtrlSetState($gr2, $GUI_HIDE)
               GUICtrlSetState($gr2a, $GUI_HIDE)
               GUICtrlSetState($gr1, $GUI_SHOW)
               GUICtrlSetState($gr1, $GUI_ONTOP)

            case 1

               GUICtrlSetState($gr1, $GUI_HIDE)
               GUICtrlSetState($gr1a, $GUI_HIDE)
               GUICtrlSetState($gr2, $GUI_SHOW)
               GUICtrlSetState($gr2, $GUI_ONTOP)

            case 2
               GUICtrlSetState($gr1, $GUI_HIDE)
               GUICtrlSetState($gr1a, $GUI_HIDE)
               GUICtrlSetState($gr2, $GUI_HIDE)
               GUICtrlSetState($gr2a, $GUI_HIDE)

         EndSwitch

      Case $btn1
         if $onglet = 0 then
            GUICtrlSetState($gr1a, $GUI_SHOW)
         elseif $onglet = 1 then
            GUICtrlSetState($gr2a, $GUI_SHOW)
         EndIf

      Case $btn2
         If $onglet = 0 Then
            GUICtrlSetState($gr1a, $GUI_HIDE)
         ElseIf $onglet = 1 Then
            GUICtrlSetState($gr2a, $GUI_HIDE)
         EndIf

   EndSwitch

Until $nMsg = $GUI_EVENT_CLOSE

;---------------------------------------------------
Func Graph1()
        GUICtrlSetBkColor($gr1, 0xF0F0F0)
        GUICtrlSetGraphic($gr1, $GUI_GR_MOVE, 79, 0)
        GUICtrlSetGraphic($gr1, $GUI_GR_LINE, 79, 160)
        GUICtrlSetGraphic($gr1, $GUI_GR_MOVE, 0, 80)
        GUICtrlSetGraphic($gr1, $GUI_GR_LINE, 160, 80)
EndFunc
Func Calcul1()
   GUICtrlSetGraphic($gr1a, $GUI_GR_RECT, 40, 40, 6, 6)
        GUICtrlSetGraphic($gr1a, $GUI_GR_RECT, 110, 40, 6, 6)
        GUICtrlSetGraphic($gr1a, $GUI_GR_RECT, 40, 110, 6, 6)
        GUICtrlSetGraphic($gr1a, $GUI_GR_RECT, 110, 110, 6, 6)
EndFunc

Func Graph2()
        GUICtrlSetGraphic($gr2, $GUI_GR_PIE, 63, 68, 55, 45, 315)
        GUICtrlSetGraphic($gr2, $GUI_GR_ELLIPSE, 45, 26, 21, 18)
EndFunc
Func Calcul2()
        GUICtrlSetGraphic($gr2a, $GUI_GR_RECT, 20, 20, 6, 6)
        GUICtrlSetGraphic($gr2a, $GUI_GR_RECT, 80, 20, 6, 6)
        GUICtrlSetGraphic($gr2a, $GUI_GR_RECT, 20, 80, 6, 6)
        GUICtrlSetGraphic($gr2a, $GUI_GR_RECT, 80, 80, 6, 6)
EndFunc
 
Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 08:55
Status : Hors ligne

Re: [R] Plusieurs graphique sur boite à onglets

#13

Message par Tespark »

Bonjour mdanielm,

Merci pour cette exemple.
Je ne comprends plus par rapport à la remarque de Walkson.
Ici les Switch sont imbriqués, mais il pourrait en avoir d'autres ?

Exemple, si je fais comme ça, c'est également incorrect ?
Je ne parle ici que de l'imbrication des Switch.
Est-ce le fait de mettre Switch $nMsg avant case (exemple post1) qui est une erreur ?
Comme je l'avais fait, je demandais de scruter pour les onglets mais $nMsg traite la GUI entièrement, est-ce cela mon erreur de construction ?
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>

Global $hGui = GUICreate("Contrôle à onglets", 440, 300, 302, 200)

Global $Tab = GUICtrlCreateTab(8, 8, 396, 256)
Global $tab0 = GUICtrlCreateTabItem("Onglet 0")
Global $tab1 = GUICtrlCreateTabItem("Onglet 1")
Global $tab2 = GUICtrlCreateTabItem("Onglet 2")
Global $btn3 = GUICtrlCreateButton("Résultat", 20, 85, 75, 25)
Global $inpClass = GUICtrlCreateInput("", 20, 35, 100, 22)
Global $inpClass2 = GUICtrlCreateInput("", 20, 60, 100, 22)
GUICtrlCreateTabItem("") ; très important

Global $btn1 = GUICtrlCreateButton("&Calcul", 146, 270, 75, 25)
Global $btn2 = GUICtrlCreateButton("&Annuler", 246, 270, 75, 25)


Global $gr1 = GUICtrlCreateGraphic(128, 72, 161, 161)
Global $gr1a = GUICtrlCreateGraphic(128, 72, 161, 161)
Graph1()
Calcul1()
GUICtrlSetState($gr1, $GUI_ONTOP)
GUICtrlSetState($gr1a, $GUI_HIDE)

Global $gr2 = GUICtrlCreateGraphic(128, 72, 161, 161)
Global $gr2a = GUICtrlCreateGraphic(128, 72, 161, 161)
Graph2()
Calcul2()
GUICtrlSetState($gr2, $GUI_HIDE)
GUICtrlSetState($gr2a, $GUI_HIDE)

GUISetState(@SW_SHOW)

Global $onglet = 0

Do
   $nMsg = GUIGetMsg()

   Switch $nMsg
      Case $Tab
         $onglet = GUICtrlRead($Tab)
         Switch $onglet
            Case 0
               GUICtrlSetState($gr2, $GUI_HIDE)
               GUICtrlSetState($gr2a, $GUI_HIDE)
               GUICtrlSetState($gr1, $GUI_SHOW)
               GUICtrlSetState($gr1, $GUI_ONTOP)

            Case 1

               GUICtrlSetState($gr1, $GUI_HIDE)
               GUICtrlSetState($gr1a, $GUI_HIDE)
               GUICtrlSetState($gr2, $GUI_SHOW)
               GUICtrlSetState($gr2, $GUI_ONTOP)

            Case 2
               GUICtrlSetState($gr1, $GUI_HIDE)
               GUICtrlSetState($gr1a, $GUI_HIDE)
               GUICtrlSetState($gr2, $GUI_HIDE)
               GUICtrlSetState($gr2a, $GUI_HIDE)

         EndSwitch

      Case $btn1
         If $onglet = 0 Then
            GUICtrlSetState($gr1a, $GUI_SHOW)
         ElseIf $onglet = 1 Then
            GUICtrlSetState($gr2a, $GUI_SHOW)
         EndIf

      Case $btn2
         If $onglet = 0 Then
            GUICtrlSetState($gr1a, $GUI_HIDE)
         ElseIf $onglet = 1 Then
            GUICtrlSetState($gr2a, $GUI_HIDE)
         EndIf

      Case $btn3
         Local $rRead = GUICtrlRead($inpClass)
         Switch $rRead
            Case 0.01 To 14.99999999999999
               MsgBox(0, "", "0")
            Case 15 To 24.99999999999999
               MsgBox(0, "", "1")
            Case 25 To 39.99999999999999
               MsgBox(0, "", "2")
            Case 40 To 54.99999999999999
               MsgBox(0, "", "3")
            Case 55 To 69.99999999999999
               MsgBox(0, "", "4")
            Case 70 To 9999
               MsgBox(0, "", "5")
         EndSwitch

         Local $rRead2 = GUICtrlRead($inpClass2)
         Switch $rRead2
            Case 0.01 To 14.99999999999999
               MsgBox(0, "", "0")
            Case 15 To 24.99999999999999
               MsgBox(0, "", "1")
            Case 25 To 39.99999999999999
               MsgBox(0, "", "2")
            Case 40 To 54.99999999999999
               MsgBox(0, "", "3")
            Case 55 To 69.99999999999999
               MsgBox(0, "", "4")
            Case 70 To 9999
               MsgBox(0, "", "5")
         EndSwitch

   EndSwitch

Until $nMsg = $GUI_EVENT_CLOSE

;---------------------------------------------------
Func Graph1()
   GUICtrlSetBkColor($gr1, 0xF0F0F0)
   GUICtrlSetGraphic($gr1, $GUI_GR_MOVE, 79, 0)
   GUICtrlSetGraphic($gr1, $GUI_GR_LINE, 79, 160)
   GUICtrlSetGraphic($gr1, $GUI_GR_MOVE, 0, 80)
   GUICtrlSetGraphic($gr1, $GUI_GR_LINE, 160, 80)
EndFunc
Func Calcul1()
   GUICtrlSetGraphic($gr1a, $GUI_GR_RECT, 40, 40, 6, 6)
   GUICtrlSetGraphic($gr1a, $GUI_GR_RECT, 110, 40, 6, 6)
   GUICtrlSetGraphic($gr1a, $GUI_GR_RECT, 40, 110, 6, 6)
   GUICtrlSetGraphic($gr1a, $GUI_GR_RECT, 110, 110, 6, 6)
EndFunc

Func Graph2()
   GUICtrlSetGraphic($gr2, $GUI_GR_PIE, 63, 68, 55, 45, 315)
   GUICtrlSetGraphic($gr2, $GUI_GR_ELLIPSE, 45, 26, 21, 18)
EndFunc
Func Calcul2()
   GUICtrlSetGraphic($gr2a, $GUI_GR_RECT, 20, 20, 6, 6)
   GUICtrlSetGraphic($gr2a, $GUI_GR_RECT, 80, 20, 6, 6)
   GUICtrlSetGraphic($gr2a, $GUI_GR_RECT, 20, 80, 6, 6)
   GUICtrlSetGraphic($gr2a, $GUI_GR_RECT, 80, 80, 6, 6)
EndFunc
Merci.
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: [R] Plusieurs graphique sur boite à onglets

#14

Message par mdanielm »

Bonjour
Ma façon de faire est la bonne et la seule qui est logique. Pourquoi supprimer des contrôles Graphic pour les recréer tels quels? C'est absurde.
Je les crée une fois pour toutes avant la pompe à message (Do..Until) et je jongle avec coucou/caché.

Les Switch/Case sont des If/then/else et on peut les imbriquer autant qu'on veut. On peut même sans passer et n'utiliser que des If.
Ce qu'a voulu dire Walkson, je pense, c'est qu'il ne faut surtout pas utiliser deux fois la fonction GuiGetMsg dans la boucle do/until car au deuxième appel c'est le message suivant de la file des messages qui serait retourné avant que le premier ait été entièrement traité (fin de boucle Do).

Ce qu'il faut retenir de ce problème, c'est que les contrôles d'une gui sont tous indépendants les uns des autres et qu'il ne sert à rien de déclarer un contrôle Graphic juste après un TabItem en pensant qu'il sera lié au TabItem. C'est faux!
Bien sûr, exception, les TabItem sont liés au Tab!

Cordialement
Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 08:55
Status : Hors ligne

Re: [R] Plusieurs graphique sur boite à onglets

#15

Message par Tespark »

mdanielm,

merci pour vos explications et d'ailleurs un grand merci à tous.
Par contre je rencontre un souci avec votre solution.

Si je lance le calcul de l'onglet 1 par exemple et que je passe sur l'onglet deux pour visionner ou lancer un nouveau calcul, le premier calcul de l'onglet 1 disparait si je reviens dessus.
Je vais travailler sur cette nouvelle solution.

merci à vous.
Répondre