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.

rchampagneca/messagecontrol
Une classe Xojo qui permet d’incorporer une barre d’état dans une fenêtre d’application Windows. - rchampagneca/messagecontrol
Dépôt source sur GitHub