[R] Utilisation d'une fenêtre checkbox

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
someonescripting
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mar. 16 juin 2020 03:55
Status : Hors ligne

[R] Utilisation d'une fenêtre checkbox

#1

Message par someonescripting »

Bonjour,

Toujours de le cadre de mon petit script de paramétrage de Windows après une réinstall, j'ai besoin de votre aide ...
J'ai actuellement une version qui utilise des MsgBox pour faire le taf, mais je ne trouve pas cela très esthétique, bien que fonctionnel (56 fenêtres consécutives ... ).
(viewtopic.php?f=6&t=15422)

Je cherche donc à refaire celui ci en utilisant des fenêtres CheckBox, je suis bien tombé sur cet exemple : https://www.autoitscript.fr/autoit3/doc ... eckbox.htm mais je n'arrive pas à le modifier pour mon compte ... (je sais je suis pas très doué, je débute vraiment tout juste ...).

En effet, dans l'exemple précédent, c'est lorsque l'ont coche ou décoche la checkbox que ce qui est voulu est appliqué.
Or, ce que je souhaiterais faire, ce serait un programme en 4 étapes (pour ne pas avoir des fenêtres trop grande car beaucoup d'actions à menés).
On lance le programme, et la fenêtre 1/4 s'ouvrirait, on coche ce que l'on désire appliquer et ce serait seulement lorsque on cliquerait sur le bouton "Suivant" que les actions seraient mener (sauf évidemment si rien n'est coché), puis après, la fenêtre 2/4 s'ouvrirait, etc.

Cela devrait ressembler à ça :
exemple.jpg
(Dans le code actuel de ce screenshot (ou je n'ai simplement modifié que ce qui m’intéresse depuis l'exemple), les actions sont menés dés que la case est coché ou annulé si décoché, et le bouton "Suivant" ne fait que fermer la fenêtre.)

Je pense qu'il y a moyen de simplifier tout ça, mais je n'arrive pas à y voir clair.

Pour résumé mes compétences actuelles :
Créer et nommer la fenêtre --> OK
Créer et nommer les checkbox --> OK
Associer des actions aux checkbox --> OK
Les faire appliquer uniquement lorsque l'on clique sur "Suivant --> NOK

Au passage, j'aimerais savoir si il est possible de faire afficher une petite bulle d'info à coté de la souris lorsque celle ci est par dessus une checkbox, et si il était possible de mettre du texte avant ou après les checkbox ?

En espérant avoir été assez clair, et d'avance merci beaucoup pour votre aide précieuse !
checkbox.au3
(2.13 Kio) Téléchargé 7 fois
checkbox.au3
(2.13 Kio) Téléchargé 7 fois
Modifié en dernier par someonescripting le jeu. 25 juin 2020 00:01, modifié 1 fois.
Un bon informaticien, est un informaticien fainéant !

Avatar du membre
someonescripting
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mar. 16 juin 2020 03:55
Status : Hors ligne

Re: [..] Utilisation d'une fenêtre checkbox

#2

Message par someonescripting »

Bon, après moult essais et recherche, j'ai finalement trouvé cette solution :

Code : Tout sélectionner

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

_PARAMETRAGE()

Func _PARAMETRAGE()
	;Crée une GUI.
	$Form1 = GUICreate("POW10 1/4", 390, 121, 192, 124)
	;Crée le bouton "Suivant".
	$BSuivant = GUICtrlCreateButton("Suivant", 304, 88, 75, 25)
	;Crée les CheckBox
	$CBTheme = GUICtrlCreateCheckbox("Theme sombre", 8, 40, 377, 17)
	;Crée le texte de la fenêtre.
	$Label1 = GUICtrlCreateLabel("Paramétrage de Windows 10", 8, 8, 141, 17)
	;Affiche la GUI.
	GUISetState(@SW_SHOW, $Form1)
	;Boucle d'utilisation de la GUI
	While 1
		$EcouteGUI = GUIGetMsg()
		If $EcouteGUI = $BSuivant Then
			If _IsChecked($CBTheme) Then
				RegWrite ("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", "AppsUseLightTheme", "REG_DWORD", 0x00000000)
				RegWrite ("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", "SystemUsesLightTheme", "REG_DWORD", 0x00000000)
			EndIf
			; Supprime l'interface graphique précédente et tous ses contrôles.
			GUIDelete($Form1)
			Call ("_OPTIMISATION")
		EndIf
	WEnd
EndFunc ;_PARAMETRAGE

Func _OPTIMISATION()
	;Crée une GUI.
	$Form2 = GUICreate("POW10 2/4", 390, 121, 192, 124)
	;Crée le bouton "Suivant".
	$BSuivant = GUICtrlCreateButton("Suivant", 304, 88, 75, 25)
	;Crée les CheckBox
	$CBTCP = GUICtrlCreateCheckbox("TCP", 8, 40, 377, 17)
	;Crée le texte de la fenêtre.
	$Label1 = GUICtrlCreateLabel("Optimisation de Windows 10", 8, 8, 141, 17)
	;Affiche la GUI.
	GUISetState(@SW_SHOW, $Form2)
	;Boucle d'utilisation de la GUI
	While 1
		$EcouteGUI = GUIGetMsg()
		If $EcouteGUI = $BSuivant Then
			If _IsChecked($CBTCP) Then
				ShellExecuteWait ("Powershell.exe", "netsh interface tcp set global autotuninglevel=disabled")
			EndIf
			; Supprime l'interface graphique précédente et tous ses contrôles.
			GUIDelete($Form2)
			Exit
		EndIf
	WEnd
EndFunc ;_OPTIMISATION

Func _IsChecked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc ;_IsChecked
Les actions souhaités sont bien appliqués au moment ou j’appuie sur "Suivant", mais la seule solution que j'ai trouvé pour sortir de la boucle et continuer vers la deuxième fenêtre est d'utiliser la fonction "call" et de supprimer la première GUI (ce qui en vérité ne sort pas de la boucle mais appelle la fonction suivante dedans).
Pensez vous que l'on puisse faire plus propre ou cela vous parait il tout à fait acceptable ?

Merci.
Un bon informaticien, est un informaticien fainéant !

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5993
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Utilisation d'une fenêtre checkbox

#3

Message par mikell »

Une méthode plus sympa (et plus commode) serait de créer toutes tes gui dès le départ en les gardant cachées (@SW_HIDE) , pour ensuite les montrer/cacher au fur et à mesure du déroulement du programme
ça permettrait de faire un programme moins "agressif", en mettant par exemple un bouton "précédent" à côté du "suivant" (pour permettre à l'utilsateur de changer d'avis), et de n'exécuter l'ensemble des instructions qu'à la toute fin avec un bouton "appliquer"
Ce bouton de validation pourrait être dans une dernière gui, qui contiendrait aussi des options de sauvegarde/enregistrement des modifications effectuées

Mais bon je dis ça, je dis rien :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11551
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Utilisation d'une fenêtre checkbox

#4

Message par Tlem »

Bonsoir.
Sinon avec des onglets ce serait pas mal non plus. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".

Avatar du membre
someonescripting
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mar. 16 juin 2020 03:55
Status : Hors ligne

Re: [..] Utilisation d'une fenêtre checkbox

#5

Message par someonescripting »

Bonsoir mikell et merci de ta réponse,

Je m’apprêtais à poster en disant que j'avais trouvé une autre solution via le "exitloop".
Il est vrai que ce que tu me dit me parais fort sympathique, mais je ne maitrise absolument pas la création d'interface graphique.
J'en était la :

Code : Tout sélectionner

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

_PARAMETRAGE()
_OPTIMISATION()

Func _PARAMETRAGE()
	;Crée une GUI.
	$Form1 = GUICreate("POW10 1/4", 390, 121, 192, 124)
	;Crée le bouton "Suivant".
	$BSuivant = GUICtrlCreateButton("Suivant", 304, 88, 75, 25)
	;Crée les CheckBox
	$CBTheme = GUICtrlCreateCheckbox("Theme sombre", 8, 40, 377, 17)
	;Crée le texte de la fenêtre.
	$Label1 = GUICtrlCreateLabel("Paramétrage de Windows 10", 8, 8, 141, 17)
	;Affiche la GUI.
	GUISetState(@SW_SHOW, $Form1)
	;Boucle d'utilisation de la GUI
	While 1
		$EcouteGUI = GUIGetMsg()
		If $EcouteGUI = $BSuivant Then
			If _IsChecked($CBTheme) Then
				RegWrite ("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", "AppsUseLightTheme", "REG_DWORD", 0x00000000)
				RegWrite ("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", "SystemUsesLightTheme", "REG_DWORD", 0x00000000)
			EndIf
			; Supprime l'interface graphique précédente et tous ses contrôles.
			GUIDelete($Form1)
			ExitLoop
		EndIf
	WEnd
EndFunc ;_PARAMETRAGE

Func _OPTIMISATION()
	;Crée une GUI.
	$Form2 = GUICreate("POW10 2/4", 390, 121, 192, 124)
	;Crée le bouton "Suivant".
	$BSuivant = GUICtrlCreateButton("Suivant", 304, 88, 75, 25)
	;Crée les CheckBox
	$CBTCP = GUICtrlCreateCheckbox("TCP", 8, 40, 377, 17)
	;Crée le texte de la fenêtre.
	$Label1 = GUICtrlCreateLabel("Optimisation de Windows 10", 8, 8, 141, 17)
	;Affiche la GUI.
	GUISetState(@SW_SHOW, $Form2)
	;Boucle d'utilisation de la GUI
	While 1
		$EcouteGUI = GUIGetMsg()
		If $EcouteGUI = $BSuivant Then
			If _IsChecked($CBTCP) Then
				ShellExecuteWait ("Powershell.exe", "netsh interface tcp set global autotuninglevel=disabled")
			EndIf
			; Supprime l'interface graphique précédente et tous ses contrôles.
			GUIDelete($Form2)
			ExitLoop
		EndIf
	WEnd
EndFunc ;_OPTIMISATION

Func _IsChecked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc ;_IsChecked
Ce qui pour le moment répond tout à fait à mes attentes.

Maintenant dans le cadre de ce que tu me dit pour résumé, au début du programme je crée toute mes GUI mais je ne les affiches pas, je fait afficher la première fenêtre, en cliquant sur suivant je cache la première GUI et affiche la seconde (il va y en avoir 4 au total, la pour m'entrainer je restais sur 2 avec seulement 2 checkbox pour tout comprendre ), et sur la deuxieme il y aurais un bouton "précédent" qui me permettrait de revenir en arrière et un bouton "appliquer" qui appliquerais tout les paramètres cochés ? Ais-je bien résumé ?

Maintenant les questions que je me pose, c'est comment le bouton "appliquer" pourrais aller récupéré tout ce qui a été coché dans les précédentes fenêtres ? Ais-je beaucoup de choses a changer dans mon code actuel pour mettre en application tes conseils ?
L'étape final serait une barre de progression pendant le processus d'application, mais la on y est pas encore.

@Tlem, encore mieux les onglets je trouve ! Je pense que cela sera peut être même plus simple à appliquer ?

Merci !
Un bon informaticien, est un informaticien fainéant !

Avatar du membre
someonescripting
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mar. 16 juin 2020 03:55
Status : Hors ligne

Re: [..] Utilisation d'une fenêtre checkbox  

#6

Message par someonescripting »

Re,

Bon pour la création de la fenêtre avec les onglets, c'est fait (Merci KODA !!!!)

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 577, 408, 192, 119)
Global $Tab1 = GUICtrlCreateTab(6, 64, 558, 271)
Global $TabSheet1 = GUICtrlCreateTabItem("Paramétrage")
Global $Checkbox1 = GUICtrlCreateCheckbox("Thème sombre", 16, 96, 97, 17)
Global $Checkbox2 = GUICtrlCreateCheckbox("Confirmation de suppression", 16, 120, 153, 17)
Global $TabSheet2 = GUICtrlCreateTabItem("Optimisation")
Global $Checkbox3 = GUICtrlCreateCheckbox("TCP", 16, 96, 97, 17)
Global $TabSheet3 = GUICtrlCreateTabItem("Désinstallation des App")
Global $TabSheet4 = GUICtrlCreateTabItem("Désactivation des services")
GUICtrlCreateTabItem("")
Global $Button1 = GUICtrlCreateButton("Appliquer", 416, 376, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 496, 376, 75, 25)
Global $Label1 = GUICtrlCreateLabel("Bienvenue dans le programme de paramétrage et d'optimisation de Windows 10.", 8, 8, 382, 17)
Global $Label2 = GUICtrlCreateLabel("Cocher les cases de ce que vous voulez modifier et appuyer sur ""Appliquer"".", 8, 24, 365, 17)
Global $Label3 = GUICtrlCreateLabel("(Penez à verifier tous les onglets.)", 8, 40, 162, 17)
Global $Progress1 = GUICtrlCreateProgress(6, 344, 558, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

 EndSwitch
WEnd
Ne me reste plus qu'à mettre les paramètres qui vont bien pour les checkbox et les boutons.
Le top serait que lorsque l'on clique sur appliquer, on voit la barre de progression défiler (même de façon infini un peu comme Windows) et qu'une fois que tout est appliqué, ferme le programme.

Merci pour l'aide et les idées !
Un bon informaticien, est un informaticien fainéant !

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11551
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Utilisation d'une fenêtre checkbox

#7

Message par Tlem »

Pour la barre de progression, il y a des exemples sur le forum. Dans un de mes messages vous trouverez votre bonheur. :)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".

Avatar du membre
someonescripting
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mar. 16 juin 2020 03:55
Status : Hors ligne

Re: [..] Utilisation d'une fenêtre checkbox

#8

Message par someonescripting »

Re,
Oui j'ai commencer à jeter un petit coup d'oeil, vendredi j'ai ma journée, je vais pouvoir m'y consacrer.
Je vais mettre le post en résolu.

Merci encore pour vos idées !
Un bon informaticien, est un informaticien fainéant !

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5993
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Utilisation d'une fenêtre checkbox

#9

Message par mikell »

En fait la version ultime de ce à quoi je pensais se rapproche assez du concept des onglets, quoique nettement plus esthétique à mon humble avis :mrgreen:
C'est facile à mettre en oeuvre et offre plein de possibilités
(credits à Taietel du forum US pour cet exemple)

#include <GuiConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>

Global $iW = 600, $iH = 400, $iT = 52, $iB = 52, $iLeftWidth = 150, $iGap = 10, $hMainGUI

_MainGui()

Func _MainGui()
Local $hFooter, $nMsg, $aPos
Local $iLinks = 5
Local $sMainGuiTitle = "Sample Title"
Local $sHeader = "Sample GUI"
Local $sFooter = "2012 © AutoIt"
Local $aLink[$iLinks], $aPanel[$iLinks]
$aLink[0] = $iLinks - 1
$aPanel[0] = $iLinks - 1
$hMainGUI = GUICreate($sMainGuiTitle, $iW, $iH, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_TABSTOP))
GUISetIcon("shell32.dll", -58, $hMainGUI)

GUICtrlCreateLabel($sHeader, 48, 8, $iW - 56, 32, $SS_CENTERIMAGE)
GUICtrlSetFont(-1, 14, 800, 0, "Arial", 5)
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)

GUICtrlCreateIcon("shell32.dll", -131, 8, 8, 32, 32)
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
GUICtrlCreateLabel("", 0, $iT, $iW, 2, $SS_SUNKEN);separator
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT)
GUICtrlCreateLabel("", $iLeftWidth, $iT + 2, 2, $iH - $iT - $iB - 2, $SS_SUNKEN);separator
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKBOTTOM + $GUI_DOCKWIDTH)
GUICtrlCreateLabel("", 0, $iH - $iB, $iW, 2, $SS_SUNKEN);separator
GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT)

$hFooter = GUICtrlCreateLabel($sFooter, 10, $iH - 34, $iW - 20, 17, BitOR($SS_LEFT, $SS_CENTERIMAGE))
GUICtrlSetTip(-1, "AutoIt Forum", "Click to open...")
GUICtrlSetCursor(-1, 0)
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT)

;add links to the left side
$aLink[1] = _AddNewLink("Link 1")
$aLink[2] = _AddNewLink("Link 2", -167)
$aLink[3] = _AddNewLink("Link 3", -222)
$aLink[4] = _AddNewLink("Link 4", -22)
;and the corresponding GUI's
$aPanel[1] = _AddNewPanel("Title for the panel 1")
$aPanel[2] = _AddNewPanel("Title for the panel 2")
$aPanel[3] = _AddNewPanel("Title for the panel 3")
$aPanel[4] = _AddNewPanel("Title for the panel 4")

;add some controls to the panels
_AddControlsToPanel($aPanel[1])
GUICtrlCreateEdit("", 10, 37, $iW - $iLeftWidth + 2 - 20 - 5, $iH - $iT - $iB - 40, BitOR($ES_AUTOVSCROLL, $ES_NOHIDESEL, $ES_WANTRETURN, $WS_VSCROLL), $WS_EX_STATICEDGE)
Local $sTestTxt = ""
For $i = 1 To 10
$sTestTxt &= @TAB & "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum felis lectus, pharetra vel laoreet nec, pulvinar nec justo. Donec malesuada, nunc eu faucibus sodales, diam sem tempor neque, id condimentum turpis nunc vel lacus. Nulla a nulla libero, eget eleifend dolor. Vivamus volutpat tincidunt ultricies. Vestibulum eu libero nisi, quis tincidunt nisi. Proin tincidunt, ipsum ullamcorper posuere venenatis, libero nulla venenatis enim, ultrices tincidunt ipsum arcu nec turpis. In at erat sed ipsum gravida mattis in at felis. Vivamus diam purus, dictum ut luctus vitae, sollicitudin ut velit. Maecenas velit mauris, fringilla ut condimentum bibendum, aliquam a neque. Nulla metus eros, commodo id dictum in, interdum sed ipsum. Vivamus feugiat, mi at auctor fringilla, libero lectus vulputate tortor, eu sollicitudin nulla lacus at neque." & @CRLF
Next
GUICtrlSetData(-1, $sTestTxt)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)

_AddControlsToPanel($aPanel[2])
GUICtrlCreateLabel("Label1", 8, 38, 36, 17)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
Local $hInput1 = GUICtrlCreateInput("Input1", 56, 35, 121, 21)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
Local $hButton1 = GUICtrlCreateButton("Button1", 200, 33, 75, 25)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)

_AddControlsToPanel($aPanel[3])
GUICtrlCreateList("", 8, 37, 121, 93, -1, 0)
GUICtrlSetData(-1, "dfgdfg|ertert|kljlkj|poipoi|qweqwe")
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)

_AddControlsToPanel($aPanel[4])
GUICtrlCreateGroup("Group1", 8, 35, 129, 90)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
Local $aChkBox[4]
For $i = 1 To 3
$aChkBox[$i] = GUICtrlCreateRadio("Some radio " & $i, 16, 56 + ($i - 1) * 20, 113, 17)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
Next
GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlCreateGroup("", -99, -99, 1, 1)

;set default to Panel1
GUISwitch($aPanel[1])
;show the main GUI
GUISetState(@SW_SHOW, $hMainGUI)

While 1
   Sleep(10)
   $nMsg = GUIGetMsg(1)
   Switch $nMsg[1]
      Case $hMainGUI
         Switch $nMsg[0]
            Case $GUI_EVENT_CLOSE
               Exit
            Case $GUI_EVENT_MINIMIZE, $GUI_EVENT_MAXIMIZE, $GUI_EVENT_RESTORE
               $aPos = WinGetPos($hMainGUI)
               $iW = $aPos[2]
               $iH = $aPos[3]
               For $i = 0 To $aPanel[0]
                  WinMove($aPanel[$i], "", $iLeftWidth + 2, $iT, $iW - $iLeftWidth + 2, $iH - $iT - $iB - 20)
               Next
            Case $aLink[1], $aLink[2], $aLink[3], $aLink[4]
               For $i = 1 To $aLink[0]
                  If $nMsg[0] = $aLink[$i] Then
                     GUISetState(@SW_SHOW, $aPanel[$i])
                  Else
                     GUISetState(@SW_HIDE, $aPanel[$i])
                  EndIf
               Next
            Case $hFooter
               ShellExecute("http://www.autoitscript.com/forum/topic/146952-gui-design-concepts/")
         EndSwitch
      Case $aPanel[2]
         Switch $nMsg[0]
            Case $hButton1
               MsgBox(32, "Test", "You have " & GUICtrlRead($hInput1) & "?")
         EndSwitch
      Case $aPanel[4]
         Switch $nMsg[0]
            Case $aChkBox[1], $aChkBox[2], $aChkBox[3]
               For $i = 1 To 3
                  If GUICtrlRead($aChkBox[$i]) = $GUI_CHECKED Then MsgBox(64, "Test", "You checked nr. " & $i & "!")
               Next
      EndSwitch
   EndSwitch
WEnd
EndFunc ;==>_MainGui


Func _AddNewLink($sTxt, $iIcon = -44)
   Local $hLink = GUICtrlCreateLabel($sTxt, 36, $iT + $iGap, $iLeftWidth - 46, 17)
   GUICtrlSetCursor(-1, 0)
   GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
   GUICtrlCreateIcon("shell32.dll", $iIcon, 10, $iT + $iGap, 16, 16)
   GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
   $iGap += 22
   Return $hLink
EndFunc ;==>_AddNewLink


Func _AddNewPanel($sTxt)
   Local $gui = GUICreate("", $iW - $iLeftWidth + 2, $iH - $iT - $iB, $iLeftWidth + 2, $iT, $WS_CHILD + $WS_VISIBLE, -1, $hMainGUI)
   GUICtrlCreateLabel($sTxt, 10, 10, $iW - $iLeftWidth - 20, 17, $SS_CENTERIMAGE)
   GUICtrlSetFont(-1, 9, 800, 4, "Arial", 5)
   GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
   Return $gui
EndFunc ;==>_AddNewPanel

Func _AddControlsToPanel($hPanel)
   GUISwitch($hPanel)
EndFunc ;==>_AddControlsToPanel
 
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Avatar du membre
someonescripting
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mar. 16 juin 2020 03:55
Status : Hors ligne

Re: [R] Utilisation d'une fenêtre checkbox

#10

Message par someonescripting »

Bonjour.

Merci mikell pour cet exemple, il est vrai que cela est fort esthétique, vraiment très propre quoi qu'un peu plus complexe.
Je regarderais demain si je peux modifier ça pour mon compte.

En tout cas merci encore !
Un bon informaticien, est un informaticien fainéant !

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1869
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [R] Utilisation d'une fenêtre checkbox

#11

Message par TommyDDR »

GUIOnEventMode :(
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Répondre