Interfaces graphiques avec AutoIT3 et KODA
Par Pierre le vendredi, mai 2 2008, 18:07 - articles - Lien permanent
Suite à notre article sur le langage de script AutoIT 3 (lire l'article), cet article a pour but de présenter le programme permettant de créer rapidement des interfaces graphiques avec AutoIT, à la manière du Form Designer du Visual Basic.
Rappel
AutoIT3 (adresse) est un langage de script concurrent du langage KiXtart utilisé notamment pour l'administration de parc Windows. Il présente un langage simple à appréhender, puissant et de nombreux modules ont été créés pour ajouter de nouvelles fonctionnalités. Certaines de ces fonctionnalités feront l'objet d'un article.
Présentation
KODA est un programme additionnel à AutoIT3 pour concevoir ses IHM de manière graphique. Vous pouvez le télécharger à partir du forum d'AutoIT3 : http://www.autoitscript.com/forum/index.php?showtopic=32299&hl=koda. L'interface peut être sauvegardée au format kxf (xml) pour être remodifiée par la suite. Le format de sortie final de KODA est cependant du code AutoIT3 définissant l'interface. A la différence du Visual Basic qui stocke ses frames (interface + code) dans des fichiers séparés intégrés à la compilation, AutoIT3 intègre le code de génération des interfaces directement dans le fichier source « au3 ».
Description de l'interface
L'interface est découpée en différents blocs : En haut, la barre de menus, les boutons d'ouverture/sauvegarde, d'exécution et d'import (nous y reviendrons par la suite) et les contrôles à insérer dans le formulaire. Au milieu à gauche, l'Object TreeView qui montrera l'organisation hiérarchique entre les différents objets. Il s'agit d'un « explorateur » de fenêtre. Au centre, la fenêtre vierge sur laquelle nous travaillons. A droite, la « Form List » qui permet de gérer différentes fenêtres. En bas à gauche, l'« Object Inspector » qui permet de régler les différents paramètres de chaque élément de la fenêtre (nom, contenu textuel, taille...)
Utilisation de l'interface
Pour placer un contrôle sur la fenêtre, il suffit de cliquer sur le contrôle désiré, puis sélectionner une zone sur la fenêtre en faisant un glisser-déposer.
Exemple : Voir ci-dessous, nous venons de placer un bouton sur l'interface.
Si on souhaite le déplacer, il suffit de cliquer dessus pour le sélectionner, puis faire un glisser-déposer jusqu'à sa destination.
L'inspecteur d'objet
L'inspecteur d'objet permet de régler finement l'apparence de vos contrôles (taille, couleur, police...). Il permet également de spécifier le contenu textuel de vos zones de texte (champ caption), ainsi que le nom de votre contrôle (champ name). Dans un souci de clarté de code, nous vous recommandons de définir les noms des contrôles que vous allez utiliser dans votre programme (lire une valeur d'un champ, détecter un clic sur un élément...).

Dans l'exemple suivant, le bouton a été nommé « ButValid » et contient le texte « Continuer ».
Export et intégration dans votre programme AutoIT3.
Les deux boutons à droite du bouton d'enregistrement servent respectivement à afficher le code source AutoIT3 et à prévisualiser l'interface. -Le premier affichera le code source dans une petite fenêtre avec un bouton pour copier le code dans le presse-papier.
Voici un exemple de notre fenêtre pour afficher un contrat de licence et demander l'acceptation de celui-ci :
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 633, 447, 1561, 164)
$ButValid = GUICtrlCreateButton("Continuer", 424, 400, 121, 25, 0)
$Label1 = GUICtrlCreateLabel("Label1", 8, 8, 620, 377)
GUICtrlSetBkColor(-1, 0xFFFFFF)
$Radio1 = GUICtrlCreateRadio("Oui", 272, 392, 121, 25)
$Radio2 = GUICtrlCreateRadio("Non", 272, 416, 121, 25)
$Label2 = GUICtrlCreateLabel("Acceptez-vous les termes du contrat de licence ?", 24, 400, 237, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
-Le deuxième va directement ouvrir l'éditeur Scite avec le code source présent. L'intérêt est de pouvoir tester en grandeur nature ce à quoi l'interface va ressembler à l'exécution. Appuyez simplement sur la touche <F5> pour lancer le programme.
Interagir avec les contrôles dans le code
Détecter un clic :
Le switch GUIGetMsg() permet de savoir quel contrôle envoie un événement. Pour savoir si notre bouton a été pressé, il suffit de rajouter un Case $NomDuControle. La boucle ressemble alors à cela :
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $ButValid MsgBox(0,''Bouton pressé'',''C'est le bouton continuer qui a été pressé'') EndSwitch WEnd
Ce code permettra d'avoir une alerte qui s'affichera lorsque l'utilisateur cliquera sur le bouton « Continuer ».
De manière générale, tout contrôle est cliquable, dans la mesure où l'on peut intercepter l'évènement via cette boucle.
Obtenir les paramètres des contrôles
Nous avons placé deux boutons radio permettant de savoir si l'utilisateur a accepté ou non la licence. Il serait intéressant de savoir quel bouton a été coché pour agir en conséquence. Pour cela, il suffit d'utiliser la fonction GUICtrlRead avec la variable du contrôle en paramètre. Ce qui donne le code suivant :
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $ButValid if GUICtrlRead($Radio1) = 1 Then msgbox(0,"Merci","Vous avez accepté le contrat de licence !") ;Insert installation code here Else msgbox(0,"Erreur","Vous n'avez pas accepté le contrat de licence !") Exit EndIf EndSwitch Wend
Conclusion
AutoIT3 est déjà en soi un outil puissant pour réaliser nombre de tâches d'administration ou autre. Grâce à KODA, la création d'interfaces graphiques devient encore plus simple et augmente le potentiel du langage pour un investissement en temps minimal. Cet article ne couvre qu'une partie des possibilités de KODA et du système d'interface graphique de manière générale, mais il permet au développeur néophyte de connaître les fonctions de base pour commencer à créer une interface graphique pour ses programmes. Pour plus d'informations, le mieux est de consulter la documentation officielle d'AutoIT3, surtout les fonctions commençant par « GUI ». Chaque fonction est commentée et comporte un exemple.

Annexe
Voici le code source de la fenêtre d'acceptation de licence :
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 633, 447, 1561, 164)
$ButValid = GUICtrlCreateButton("Continuer", 424, 400, 121, 25, 0)
$Label1 = GUICtrlCreateLabel("Please Insert License Here", 8, 8, 620, 377)
GUICtrlSetBkColor(-1, 0xFFFFFF)
$Radio1 = GUICtrlCreateRadio("Oui", 272, 392, 121, 25)
$Radio2 = GUICtrlCreateRadio("Non", 272, 416, 121, 25)
$Label2 = GUICtrlCreateLabel("Acceptez-vous les termes du contrat de licence ?", 24, 400, 237, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $ButValid
if GUICtrlRead($Radio1) = 1 Then
msgbox(0,"Merci","Vous avez accepté le contrat de licence !")
;Insert installation code here
Else
msgbox(0,"Erreur","Vous n'avez pas accepté le contrat de licence !")
Exit
EndIf
EndSwitch
WEnd

