[R] Utilisation d'une fenêtre checkbox
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- someonescripting
- Niveau 3
- Messages : 44
- Enregistré le : mar. 16 juin 2020 03:55
- Status : Hors ligne
[R] Utilisation d'une fenêtre checkbox
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 : (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 !
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 : (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 !
Modifié en dernier par someonescripting le jeu. 25 juin 2020 00:01, modifié 1 fois.
Un bon informaticien, est un informaticien fainéant !
- someonescripting
- Niveau 3
- Messages : 44
- Enregistré le : mar. 16 juin 2020 03:55
- Status : Hors ligne
Re: [..] Utilisation d'une fenêtre checkbox
Bon, après moult essais et recherche, j'ai finalement trouvé cette solution :
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.
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
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 !
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Utilisation d'une fenêtre checkbox
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
ç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

" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- Tlem
- Site Admin
- Messages : 11784
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] Utilisation d'une fenêtre checkbox
Bonsoir.
Sinon avec des onglets ce serait pas mal non plus. ^^
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é".
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é".
- someonescripting
- Niveau 3
- Messages : 44
- Enregistré le : mar. 16 juin 2020 03:55
- Status : Hors ligne
Re: [..] Utilisation d'une fenêtre checkbox
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 :
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 !
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
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 !
- someonescripting
- Niveau 3
- Messages : 44
- Enregistré le : mar. 16 juin 2020 03:55
- Status : Hors ligne
Re: [..] Utilisation d'une fenêtre checkbox
Re,
Bon pour la création de la fenêtre avec les onglets, c'est fait (Merci KODA !!!!)
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 !
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
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 !
- Tlem
- Site Admin
- Messages : 11784
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] Utilisation d'une fenêtre checkbox
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é".
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é".
- someonescripting
- Niveau 3
- Messages : 44
- Enregistré le : mar. 16 juin 2020 03:55
- Status : Hors ligne
Re: [..] Utilisation d'une fenêtre checkbox
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 !
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 !
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [R] Utilisation d'une fenêtre checkbox
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
C'est facile à mettre en oeuvre et offre plein de possibilités
(credits à Taietel du forum US pour cet exemple)

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
#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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- someonescripting
- Niveau 3
- Messages : 44
- Enregistré le : mar. 16 juin 2020 03:55
- Status : Hors ligne
Re: [R] Utilisation d'une fenêtre checkbox
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 !
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 !
- TommyDDR
- Modérateur
- Messages : 2102
- Enregistré le : mar. 22 juil. 2008 21:55
- Localisation : Nantes
- Status : Hors ligne
Re: [R] Utilisation d'une fenêtre checkbox
GUIOnEventMode 

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679