Une calculatrice - Tutoriel

Dans ce tutoriel nous essayerons de vous guider pour créer une calculatrice de base, identique à celle de MS-Windows. Nous utiliserons les fonctions GUI de AutoIt.
Il est considéré que vous êtes déjà familiarisé avec la création et le lancement de scripts AutoIt comme indiqué dans l'     exemple.


Création de l'interface graphique (GUI) - (Design)

Dans cette partie nous commencerons par la création de l'interface graphique (GUI). Il est bon d'avoir une idée de la conception basée sur l'utilité de notre programme.
C'est-à-dire combien et quels types de contrôles nous aurons besoin. Dans notre cas, nous utiliserons le même modèle que la calculatrice de Windows.
Dans la Fig. 1, nous pouvons voir à quoi ressemblera notre calculatrice.

Fig. 1

Pour commencer la création de notre interface, nous devons inclure quelques librairies qui déclare des constantes que nous utiliserons dans notre boîte de dialoque. Ces constantes contiennent des valeurs numériques de styles et des paramètres qui définissent l'apparence de chaque contrôle, ainsi que les valeurs pour les événements et états. (Normalement, "GUIConstantsEx.au3" existe déjà dans le répertoire d'installation de AutoIt). Plus tard, nous verrons comment l'employer, mais pour l'instant nous allons simplement inclure cette librairie en écrivant dans notre script les lignes suivantes:

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


Comme il est dit dans le tutoriel simple, pour commencer la création de notre fenêtre, nous devons définir les paramètres de celle-ci : le titre, la taille et la position, avec GUICreate(). Les paramètres de la fenêtre seront les suivants :
Titre = "Calculator"
Largeur = 260
Hauteur = 230
Donc les lignes de notre code seraient:

GUICreate("Calculator", 260, 230)


Pour stocker l'identifiant(ID) de chaque contrôle
Dans la partie définition, nous mettrons l'assignation des variables pour chaque bouton que nous créons. Lorsque nous faisons cette affectation, la variable stocke l' ID du contrôle qui nous permettra de définir "leur action" pendant l'exécution. See     exemple.

Nommer les Variables
L'attribution d'un nom pour chaque variable et une chose personnelle, mais il est important d'être clair lors de celle-ci, pour une meilleure compréhension de ce qu'elle représente. Comme on le voit dans l'exemple suivant, la syntaxe utilise : $CTRL_btn1 ce qui signifie "POUR le Contrôle GUI - C'est un bouton, Chiffre #1", les paramètres pour l'exemple de ce bouton sont les suivants:
Text ="1", Left=54, Top = 138, Width = 36, Height = 29

$CTRL_btn1 = GUICtrlCreateButton("1", 54, 138, 36, 29)

Comme je l'ai mentionné auparavant, cela permet d'avoir un code plus clair.

Création de chaque contrôle
Comme nous pouvons le voir dans la Fig.1, nous devons créer plusieurs boutons, que nous définirons avec GUICtrlCreateButton. Les boutons que nous définirons seront : les chiffres de 0 à 9, les opérateurs, les boutons mémoire tel que Memory Clear("MC"), Memory Restore ("MR"), etc.
Vous pouvez copier le code ci-dessous et l'ajouter à votre script:

; Boutons des chiffres
Local $CTRL_btn0 = GUICtrlCreateButton("0", 54, 171, 36, 29)
Local $CTRL_btn1 = GUICtrlCreateButton("1", 54, 138, 36, 29)
Local $CTRL_btn2 = GUICtrlCreateButton("2", 93, 138, 36, 29)
Local $CTRL_btn3 = GUICtrlCreateButton("3", 132, 138, 36, 29)
Local $CTRL_btn4 = GUICtrlCreateButton("4", 54, 106, 36, 29)
Local $CTRL_btn5 = GUICtrlCreateButton("5", 93, 106, 36, 29)
Local $CTRL_btn6 = GUICtrlCreateButton("6", 132, 106, 36, 29)
Local $CTRL_btn7 = GUICtrlCreateButton("7", 54, 73, 36, 29)
Local $CTRL_btn8 = GUICtrlCreateButton("8", 93, 73, 36, 29)
Local $CTRL_btn9 = GUICtrlCreateButton("9", 132, 73, 36, 29)
Local $CTRL_btnPeriod = GUICtrlCreateButton(".", 132, 171, 36, 29)

; Boutons Mémoire
Local $CTRL_btnMClear = GUICtrlCreateButton("MC", 8, 73, 36, 29)
Local $CTRL_btnMRestore = GUICtrlCreateButton("MR", 8, 106, 36, 29)
Local $CTRL_btnMStore = GUICtrlCreateButton("MS", 8, 138, 36, 29)
Local $CTRL_btnMAdd = GUICtrlCreateButton("M+", 8, 171, 36, 29)

; Boutons Opérations
Local $CTRL_btnChangeSign = GUICtrlCreateButton("+/-", 93, 171, 36, 29)
Local $CTRL_btnDivision = GUICtrlCreateButton("/", 171, 73, 36, 29)
Local $CTRL_btnMultiplication = GUICtrlCreateButton("*", 171, 106, 36, 29)
Local $CTRL_btnSubtract = GUICtrlCreateButton("-", 171, 138, 36, 29)
Local $CTRL_btnAdd = GUICtrlCreateButton("+", 171, 171, 36, 29)
Local $CTRL_btnAnswer = GUICtrlCreateButton("=", 210, 171, 36, 29)
Local $CTRL_btnInverse = GUICtrlCreateButton("1/x", 210, 138, 36, 29)
Local $CTRL_btnSqrt = GUICtrlCreateButton("Sqrt", 210, 73, 36, 29)
Local $CTRL_btnPercentage = GUICtrlCreateButton("%", 210, 106, 36, 29)
Local $CTRL_btnBackspace = GUICtrlCreateButton("Backspace", 54, 37, 63, 29)
Local $CTRL_btnClearE = GUICtrlCreateButton("CE", 120, 37, 62, 29)
Local $CTRL_btnClear = GUICtrlCreateButton("C", 185, 37, 62, 29)

Local $CTRL_EdtScreen = GUICtrlCreateEdit("0.", 8, 2, 239, 23)
Local $CTRL_LblMemory = GUICtrlCreateLabel("", 12, 39, 27, 26)


Après avoir défini la création de chaque contrôle, il est important d'ajouter la ligne suivante pour montrer votre boite de dialogue, en utilisant GUISetState().

GUISetState()


Boucle des messages
Comme il est expliqué dans le     , the function GUIGetMsg() donne une valeur de sortie d'un évènement de la boite de dialogue, représenté dans ce cas par la variable $msg qui est évaluée chaque fois qu'une boucle Do..Until se répète. Pour cette partie nous ajouterons seulement un événement simple, qui se répète dans un cycle infini jusqu'à ce que l'événement soit la constante $GUI_EVENT_CLOSE (égale à -3) , ce qui fermera la fenêtre et terminera le script. Voici donc la suite du script :

Local $msg
Do
   $msg = GUIGetMsg()

Until $msg = $GUI_EVENT_CLOSE


Application des Styles
Jusque là, nous avons été capable de finir l'ossature de notre boite de dialogue. Vous pouvez déjà exécuter le script et constater qu'il ressemble déjà à une calculatrice. En y regardant de plus près, vous constaterez quelque chose de non désiré dans le design. Le contrôle EDIT qui représente l'afficheur des chiffres ne s'affiche pas correctement, nous devons donc appliquer certains styles d'apparence (voir la Fig. 2). Pour corriger cette apparence, nous utiliserons l'EDITION des styles:

Fig. 2

Pour cette partie, nous avons seulement besoin de modifier deux lignes de notre code.

Première modification: Dans la première modification, nous ajouterons dans la ligne de la variable $CTRL_EdtScreen, une définition pour mettre le contrôle (Edit) en lecture seule ($ES_READONLY) et une autre pour le justifier à droite ($ES_RIGHT), pour assembler ces deux variable nous utiliserons BitOR comme cela est présenté dans la ligne de code ci-dessous. Nous ajouterons aussi $WS_EX_STATICEDGE to the parameter of style étendu (exStyle) pour donner une apparence creuse à la bordure. Pour plus d'informations sur la table des styles pour le contrôle EDIT, cliquez ici. (Pour une explication détaillée de chaque style).

Local $CTRL_EdtScreen = GUICtrlCreateEdit("0.", 8, 2, 239, 23, BitOR($ES_READONLY, $ES_RIGHT), $WS_EX_STATICEDGE)


Deuxième modification: Dans la deuxième modification, nous modifierons la ligne de la variable $CTRL_LblMemory, qui contient un contrôle de type LABEL nous montrant l'état du stockage mémoire) que nous avons vu dans la deuxième partie. Nous allons définir que ce contrôle (Label) sera creux ($SS_SUNKEN) comme cela est présenté dans la ligne de code. Pour la table des références de styles des contrôle LABEL, cliquez ici.

Local $CTRL_LblMemory = GUICtrlCreateLabel("", 12, 39, 27, 26, $SS_SUNKEN)


Après avoir effectué ces modifications, lancez votre script. Vous pouvez voir le changement d'apparence dans la Fig. 3, maintenant notre calculatrice ressemble à la Fig. 1, vue au départ. Vous pouvez aussi regarder     ppour référence.

Fig. 3


En guise d'exercice, vous essayerez de mettre le style $BS_FLAT en paramètre de quelques boutons, et vous les verrez en style plat.