Comment créer une barre d'état avec Xojo
Une barre d'état est une fenêtre horizontale au bas d'une fenêtre parent dans laquelle une application Windows affiche différents types d'informations d'état. Par exemple, afin de confirmer une action initiée par l'utilisateur d'une application Windows, il est utile d'afficher dans la barre d'état le résultat de l'action.
Cet article explique comment créer une barre d'état en faisant appel à une classe appelée MessageControl.
La classe MessageControl
La classe MessageControl se définit par les composantes suivantes:
- 3 contrôles: Icon, Message et TaskMessage.
- L'objet Icon (Objet de type Canvas) sert à afficher une îcone reflétant la sévérité du message: normal, avertissement ou danger.
- L'objet Message (Objet de type Label) contient le message d'état.
- L'objet TaskMessage (Objet de type Task) est la boucle principal. Le code exécuté par TaskMessage est placé dans les gestionnaires d'événements Run et UpdateUI.
- 2 méthodes: Init et DoMessage.
- La méthode Init initialise une instance de la classe MessageControl. Par exemple, un appel à Init peut être placé dans le gestionnaire d'évènements Open d'une fenêtre parent.
- La méthode DoMessage initialise les propriétés de l'appel et lance la tâche UpdateUI.
- 3 propriétés: mMessage, mSeverity et mTimer.
Un mot sur les "Threads"
Le noyau d'un système d'exploitation tel que Windows, conserve en permanence le contrôle du temps d'exécution en distribuant cycliquement des tranches de temps ("time-slicing") à chacune des applications. En fait, chaque application peut elle-même fonctionner comme le système d'exploitation en lançant des sous-tâches (en anglais, tasks) internes au processus et par là même reproduire le fonctionnement de la multi-programmation. Ces sous-tâches sont nommées "flux d'exécution" ou Threads. Sous Xojo, les Threads sont créés par les objets Task ou Thread.
Les gestionnaires d'événements Run et UpdateUI
La méthode Run est la boucle principle qui est exécutée lorsqu'un appel est fait à MessageControl.
mTimer = 0
Me.UpdateUI // Appel la mise-à-jour de la barre d'état
Dim t As Integer
t=Ticks
While (Ticks-t)< 480 // On attend 480 * 1 / 60 = 8 secondes
Wend
mTimer = 1
Me.UpdateUI // On réinitilise la barre d'état
La méthode UpdateUI vérifie si un message doit être affiché. Si oui, le message s'affiche précédé d'une îcone reflétant la sévérité du message. La durée de l'affichage est définie dans la boucle d'itération (dans ce cas 8 secondes).
#Pragma Unused args
If Message <> Nil Then
Select Case mTimer
Case 0
Select Case mSeverity
Case "Danger"
Message.TextColor = &cCC3300 // Couleur pourpre
Icon.Backdrop = iconalert
Case "Warning"
Message.TextColor = &cB26B47 // Couleur jaune
Icon.Backdrop = iconcaution
Case Else
Message.TextColor = &C339900 // Couleur vert
Icon.Backdrop = iconok
End Select
Message.Text = mMessage
Case 1
Message.TextColor = &c000000 // Par défaut, couleur noir
Icon.Backdrop = Nil
Message.Text = ""
End Select
End If
Exemples d'appel à la classe MessageControl
Voici des exemples d'appel:
StatusMessageFld.DoMessage ("Transaction complétée avec succès.")
StatusMessageFld.DoMessage ("Une erreur s'est produite.","Danger")
Le code source de la classe MessageControl ainsi qu'une application Windows sont disponibles sur GitHub.