Vous avez souscrit avec succès au site de Roger Champagne
Génial! Ensuite, complétez la commande pour un accès complet au site de Roger Champagne
Bon retour! Vous vous êtes connecté avec succès.
Succès! Votre compte est complètement activé, vous avez maintenant accès à tout le contenu.
Bravo! Vos informations de facturation ont été mises à jour.
La mise à jour des informations de facturation a échoué.

Comment créer une barre d'état avec Xojo

Une classe Xojo qui permet d'incorporer une barre d'état dans une fenêtre d'application Windows.

Roger Champagne
Roger Champagne

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.

barre-e-tat-xojo

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.

Xojo

Roger Champagne

Je vis au Québec et j'ai mené une carrière professionnelle dans le domaine de la logistique tierce partie (en anglais, 3PL). Je me plais également à explorer les technologies d’information.