PBToolboxAI v5 ← Site

statusbar — u_pbt_statusbar #

← Référence des composants · Sommaire du guide

Barre d'état à panneaux : texte riche, icônes, largeurs fixes ou automatiques, alignement à gauche ou à droite, panneaux cliquables, mini-barre de progression et états colorés.

▶ Le voir en vrai — Application de démonstration, tuile Statusbar : l'aperçu, le code qui le produit et cette page, côte à côte.


En bref #

Userobjectu_pbt_statusbar
Classe d'itemsn_pbt_statusbar_panel (panneau) · n_pbt_statusbar_menu_item (entrée de liste)
Sert àAfficher en bas de fenêtre l'état de l'application : contexte, avancement, alertes discrètes
Options opt-inib_announce

Démarrage rapide #

// event open de la fenetre
// of_add_panel(cle, texte, icone, alignement, largeur)
// la cle retrouve le panneau plus tard ; largeur 0 = ajustee au texte, -1 = prend la place libre
uo_status.of_add_panel(/*key*/ "state", /*text*/ "Ready",          /*icon_file*/ "", /*align*/ uo_status.ALIGN_START, /*width*/ -1)
uo_status.of_add_panel(/*key*/ "pos",   /*text*/ "Line 12, Col 4", /*icon_file*/ "", /*align*/ uo_status.ALIGN_START, /*width*/ 0)
uo_status.of_add_panel(/*key*/ "clock", /*text*/ "12:00",          /*icon_file*/ "", /*align*/ uo_status.ALIGN_END,   /*width*/ 140)
// Mettre un panneau a jour a tout moment, par son identifiant
uo_status.of_panel(/*key*/ "state").is_text = "Enregistrement en cours..."

Le modèle : des panneaux à clé #

La barre est une suite de panneaux, ajoutés dans l'ordre. Un panneau reçoit un identifiant à la création : c'est par lui qu'on le retrouve ensuite pour changer son texte, son icône ou son état.

L'identifiant est une clé d'adressage, pas un interrupteur d'interactivité :

// Le panneau affiche un nouveau texte
uo_status.of_panel(/*key*/ "state").is_text = "3 enregistrements modifies"

Voir Socle commun · Les items.


Propriétés #

PropriétéTypeDéfautRôle
ib_show_resize_gripbooleanfalseAffiche la poignée de redimensionnement dans le coin de fin de barre ; la tirer redimensionne la fenêtre qui porte la barre — une feuille MDI, pas son cadre — depuis son coin bas-droit (bas-gauche en lecture de droite à gauche). Elle n'est dessinée que lorsque la barre occupe le coin bas de cette fenêtre et que celle-ci se redimensionne : maximisée, sans bord redimensionnable ou barre placée plus haut, elle disparaît et la propriété reste posée
ib_announcebooleanfalsePour les lecteurs d'écran : à true, un texte ou un état qui change sur un panneau affiché est lu (une région vivante polie, qui laisse le lecteur finir sa phrase). Un message de of_flash_panel est toujours lu, quoi que dise cette propriété : un message est fait pour être lu. Désactivé par défaut : une horloge à la seconde parlerait toute la journée
is_helpstring""La MicroHelp d'un cadre PowerBuilder : ce qu'écrivait SetMicroHelp. Affichée PAR-DESSUS le texte du panneau que nomme is_help_panel — son is_text relit toujours son propre texte — ; "" lui rend son texte. Un message de of_flash_panel passe devant tant qu'il dure
is_help_panelstring""Clé du panneau qui affiche is_help — en général le premier, celui de Ready. Vide = aucun panneau d'aide : is_help attend qu'on en nomme un
is_theme_stylestring""Style visuel du composant (constantes THEME_STYLE_*) ; vide = celui de l'application, suivi à chaque changement
is_theme_modestring""Variante claire ou sombre (constantes THEME_MODE_*) ; vide = celle de l'application, suivie à chaque changement
il_theme_accentlong-1Couleur d'accent de ce composant (-1 = l'accent de l'application, ou celui du thème)
is_tooltipstring""Info-bulle simple affichée au survol du composant
is_super_tooltip_titlestring""Titre de l'info-bulle enrichie (prend le pas sur is_tooltip)
is_super_tooltip_textstring""Texte de l'info-bulle enrichie (balisage riche accepté)
is_super_tooltip_imagestring""Image de l'info-bulle enrichie

Méthodes #

MéthodeRôle
of_add_panel (string as_key, string as_text, string as_icon_file, string as_align, integer ai_width)Ajoute un panneau en fin de barre ; une largeur de -1 en fait un ressort qui prend la place libre (ib_spring). Renvoie 0 une fois appliqué, -5 si la clé est déjà prise, contient / ou ` ou commence par __ (une clé vide pose un panneau décoratif), -2` si le composant n'est pas créé
of_add_sep ( )Insère une rupture de groupe à la position courante. Les panneaux se séparent déjà d'un filet fin : celle-ci est plus large, pour que les panneaux d'avant et d'après se lisent comme deux groupes. À appeler entre deux of_add_panel ; elle ouvre le groupe du panneau qui la suit (du côté de celui d'avant quand elle vient en dernier). Un séparateur n'est pas un panneau : il ne compte ni pour of_count / of_keys_at ni dans les positions. Renvoie 0 une fois appliqué, -2 si le composant n'est pas créé
of_insert_panel (string as_key, string as_text, string as_icon_file, string as_align, integer ai_width, integer ai_index)Insère un panneau à une position précise, comptée en panneaux à partir de 1 (0 ou moins = en premier, au-delà du dernier = en fin). Mêmes refus que of_add_panel. Renvoie 0 une fois appliqué, -5 si la clé est déjà prise ou contient / ou `, -2` si le composant n'est pas créé
of_move_panel (string as_key, integer ai_index)Déplace un panneau existant à une autre position, comptée en panneaux à partir de 1. Renvoie 0 une fois appliqué, -5 sur une clé vide ou que la barre n'a jamais reçue, -2 si le composant n'est pas créé
of_remove_panel (string as_key)Supprime un seul panneau, avec sa liste déroulante ; les autres conservent leur état. Renvoie 0 une fois appliqué, -5 sur une clé vide ou que la barre n'a jamais reçue, -2 si le composant n'est pas créé
of_panel (string as_key) → n_pbt_statusbar_panelRend le handle d'un panneau (créé au premier accès). Une clé vide (panneau décoratif), une adresse ou une liste ne désignent rien : leur handle n'écrit nulle part et se relit vide
of_flash_panel (string as_key, string as_text, long al_ms)Affiche un message pendant al_ms millisecondes, puis réaffiche le texte du panneau (al_ms ≤ 0 = 2 secondes). Le message passe PAR-DESSUS le texte : is_text se relit toujours comme le texte du panneau, jamais comme le message. Renvoie 0 une fois appliqué, -5 sur une clé vide, une adresse ou une clé que la barre n'a jamais reçue, -2 si le composant n'est pas créé
of_add_menu_item (string as_keys, string as_label) · (as_keys, as_label, as_image)Ajoute une entrée à la liste déroulante d'un panneau : as_keys a deux niveaux, le panneau puis l'entrée ("enc/utf8"). Dès la première entrée le panneau devient un sélecteur : le clic ouvre la liste, et le choix revient par ue_panel_menu_clicked avec la même adresse. Un libellé vide reprend la clé. Renvoie 0 une fois appliqué, -5 sur une adresse qui n'a pas deux niveaux, un panneau que la barre n'a jamais reçu ou une entrée déjà prise, -2 si le composant n'est pas créé
of_insert_menu_item (string as_keys, string as_label, integer ai_index) · (as_keys, as_label, as_image, ai_index)Insère une entrée à une position précise, comptée en entrées à partir de 1 : un séparateur n'en est pas une. Renvoie 0 une fois appliqué, -5 sur une adresse qui n'a pas deux niveaux, une clé qui commence par __, un panneau que la barre n'a jamais reçu ou une entrée déjà prise, -2 si le composant n'est pas créé
of_add_menu_separator (string as_key)Ligne de séparation dans la liste du panneau as_key. Un séparateur n'a pas d'adresse : seul of_clear_menu le retire, et une liste faite de séparateurs seuls n'est pas une liste (ni chevron ni clic). Renvoie 0 une fois appliqué, -5 sur une clé vide ou un panneau que la barre n'a jamais reçu, -2 si le composant n'est pas créé
of_remove_menu_item (string as_keys)Retire une seule entrée ; la dernière partie, le panneau retrouve le comportement que lui donne ib_clickable. Renvoie 0 une fois appliqué, -5 sur une adresse que la barre n'a jamais reçue, -2 si le composant n'est pas créé
of_move_menu_item (string as_keys, integer ai_index)Déplace une entrée à une autre position dans sa liste, comptée en entrées à partir de 1 : un séparateur n'en est pas une. Renvoie 0 une fois appliqué, -5 sur une adresse que la barre n'a jamais reçue, -2 si le composant n'est pas créé
of_menu_item (string as_keys) → n_pbt_statusbar_menu_itemRend le handle d'une entrée (créé au premier accès), pour la griser, la cocher ou la renommer. Une adresse qui n'a pas deux niveaux ne désigne rien : son handle n'écrit nulle part et se relit vide
of_clear_menu (string as_key)Retire toute la liste déroulante ; le panneau retrouve le comportement que lui donne ib_clickable. Renvoie 0 une fois appliqué, -5 sur une clé vide, une adresse ou un panneau que la barre n'a jamais reçu, -2 si le composant n'est pas créé
of_dock_bottom ( )Place la barre le long du bord BAS de ce qui la porte (une fenêtre, un onglet, un userobject), sur toute sa largeur ; sa hauteur ne change pas. À appeler dans l'événement resize de la fenêtre. Dans un cadre MDI, retaillez mdi_1 à la place qui reste : WorkSpaceHeight() - uo_status.Height. Renvoie 0 une fois placée, -5 si la barre n'est ni sur une fenêtre ni sur un userobject, -2 si le composant n'est pas créé
of_clear ( )Vide la barre : tous les panneaux et tous les séparateurs. Renvoie 0 une fois appliqué, -2 si le composant n'est pas créé
of_reset ( )Vide la barre et remet les propriétés à leur défaut. Renvoie 0 une fois appliqué, -2 si le composant n'est pas créé

Les arguments de of_add_panel #

ArgumentValeursEffet
as_keylibre, ou ""Clé du panneau, par laquelle on le retrouve ensuite. Vide = panneau décoratif, ni adressable ni cliquable
as_texttexteContenu du panneau. Le balisage riche est accepté
as_icon_filechemin d'image, ou ""Icône affichée avant le texte (formes acceptées)
as_alignALIGN_START (défaut) ou ALIGN_ENDCôté vers lequel le panneau est poussé. Valeurs logiques : START = début de lecture (gauche en écriture de gauche à droite). Les alias physiques "left" / "right" restent acceptés
ai_widthpixels, 0 ou -1Largeur fixe. 0 = le panneau s'ajuste à son contenu ; -1 = un ressort qui prend toute la place libre de la barre (ib_spring)

Sur un panneau — n_pbt_statusbar_panel #

MembreTypeDéfautRôle
is_textstring""Texte du panneau, balisage riche accepté
is_imagestring""Icône du panneau, modifiable à tout moment
ib_enabledbooleantruePanneau grisé et non cliquable
ib_visiblebooleantruePanneau masqué, sans être retiré de la barre
ii_progressinteger—Mini-barre de progression dans le panneau, à côté du texte, de 0 à 100 (au-delà de 100 la barre est pleine et se relit 100) ; une valeur négative la fait disparaître. Se relit -1 quand le panneau n'a pas de barre (et 0 pour une barre à 0 %)
is_statestring""État sémantique du panneau, qui colore son texte et marque son bord de début : voir les constantes ci-dessous. Toute autre valeur vaut « aucun état » et se relit vide ; un panneau désactivé est grisé, marque d'état comprise
ib_indeterminatebooleanfalseBarre animée sans valeur, pour un traitement dont la durée est inconnue. Indépendante de ii_progress, qui reste le pourcentage exact
ib_clickablebooleanfalseLe panneau réagit-il au clic. Opt-in : un panneau reste inerte tant qu'on ne le demande pas, tout en gardant sa clé — il est piloté et porte une info-bulle. Un panneau à liste déroulante est cliquable d'office
ib_springbooleanfalseRessort : le panneau prend toute la place libre de la barre, et son texte est le premier à s'élider quand la fenêtre rétrécit — le panneau Ready qui grandit avec la fenêtre. Plusieurs ressorts se partagent la place ; une largeur fixe s'efface devant lui
is_tooltipstring""Infobulle du panneau (balises de texte riche acceptées). Elle s'affiche aussi sur un panneau grisé, pour dire pourquoi. Sans infobulle, un panneau dont le texte est coupé montre son texte entier au survol
is_super_tooltip_titlestring""Titre de l'infobulle riche du panneau (prioritaire sur is_tooltip)
is_super_tooltip_textstring""Texte de l'infobulle riche du panneau (balises acceptées)
is_super_tooltip_imagestring""Image de l'infobulle riche du panneau
il_accentlong-1Accent de ce panneau : le remplissage de sa mini-barre de progression. -1 = l'accent du composant
il_back_colorlong-1Fond de ce panneau au repos. -1 = celui de la barre
il_text_colorlong-1Couleur du texte de ce panneau au repos. Un état (is_state) ou un panneau grisé peint d'abord sa propre couleur : le sens l'emporte sur la couleur. -1 = celle de la barre
il_back_color_hoverlong-1Fond sous le pointeur — seul un panneau cliquable (ib_clickable) répond au pointeur. -1 = celui du thème
il_text_color_hoverlong-1Couleur du texte sous le pointeur, sur un panneau cliquable. -1 = celle du thème

Sur une entrée de liste — n_pbt_statusbar_menu_item #

Obtenue par of_menu_item(/*keys*/ "enc/utf8") : l'adresse a deux niveaux, le panneau puis l'entrée. La liste est un menu natif : une propriété changée pendant qu'il est ouvert se voit à l'ouverture suivante.

MembreTypeDéfautRôle
is_labelstring""Texte de l'entrée
is_imagestring""Image avant le texte, modifiable à tout moment
ib_enabledbooleantrueEntrée grisée : affichée, mais impossible à choisir
ib_checkedbooleanfalseCoche devant l'entrée, pour la valeur en cours
ib_visiblebooleantrueEntrée retirée de la liste sans être supprimée : la remontrer ne demande rien d'autre

Les propriétés que toute poignée d'item hérite — is_tooltip, is_super_tooltip_title, is_super_tooltip_text, is_super_tooltip_image, il_accent, il_back_color, il_text_color, il_back_color_hover, il_text_color_hover — sont sans effet sur une entrée : la liste est un menu natif, qui ne montre ni infobulle ni couleur d'une entrée. Elles sont ignorées et se relisent vides (-1 pour une couleur). Une position dans une liste compte des entrées : un séparateur n'en est pas une, et of_count("enc"), of_keys_at("enc", n), of_has("enc/utf8") parcourent les entrées d'un panneau. Une clé qui commence par __ est réservée au composant.

// The menu of the encoding panel, entry by entry
uo_status.of_add_menu_item(/*keys*/ "enc/utf8", /*label*/ "UTF-8")
uo_status.of_add_menu_item(/*keys*/ "enc/ansi", /*label*/ "ANSI")
uo_status.of_menu_item(/*keys*/ "enc/utf8").ib_checked = true     // the current value
uo_status.of_menu_item(/*keys*/ "enc/ansi").ib_enabled = false    // not available here

Constantes d'état #

ConstanteValeurUsage
STATE_NONE""Aucun état : apparence normale
STATE_INFO"info"Information
STATE_WARNING"warning"Avertissement
STATE_ERROR"error"Erreur
STATE_SUCCESS"success"Succès

Comme pour toute propriété à valeurs prédéfinies, utilisez la constante plutôt que la chaîne :

// The panel takes the colors of a warning
uo_status.of_panel(/*key*/ "state").is_state = n_pbt_statusbar_panel.STATE_WARNING

Événements #

ÉvénementDéclenché quand
ue_panel_clicked (string as_key)Un panneau cliquable (ib_clickable) est cliqué
ue_panel_double_clicked (string as_key)Un panneau cliquable est double-cliqué — le raccourci classique derrière Ligne 12, Col 4 qui ouvre un « Aller à la ligne ». Jamais sur un panneau à liste déroulante : son premier clic a ouvert la liste
ue_panel_rclicked (string as_key, long al_x, long al_y)Un panneau qui a une clé reçoit un clic droit — cliquable ou non (un menu contextuel n'est pas une activation), jamais s'il est désactivé. Un seul événement par clic droit. al_x et al_y sont des pixels écran ; pour un menu PowerBuilder, PopMenu(PointerX(), PointerY()) de votre fenêtre. Au clavier, la touche Menu ou Maj+F10 sur le panneau qui a le focus le lève aussi, au coin bas-gauche du panneau
ue_panel_menu_clicked (string as_keys)Une entrée d'une liste déroulante de panneau est choisie (voir of_add_menu_item). as_keys porte les deux niveaux : le panneau, puis l'entrée — "enc/utf8". Au clavier, Entrée, Espace, Flèche haut ou bas ouvrent la liste. Un panneau retiré, désactivé ou masqué pendant que sa liste est ouverte la ferme, et rien n'est levé
ue_ready ( )Le composant a fini de charger ; tout ce qui a été envoyé avant a été rejoué
ue_runtime_missing ( )Le runtime WebView2 est absent : le composant reste vide
ue_bg_color (long al_color)Le composant a calculé sa couleur de fond de thème ; l'userobject l'a déjà adoptée (backcolor)

Au clavier #

La barre est un seul arrêt de tabulation : seuls les panneaux faits pour être cliqués y entrent, et les flèches les parcourent.

ToucheEffet
FlèchesPassent au panneau interactif précédent / suivant, en bouclant ; les panneaux d'affichage et les panneaux désactivés sont sautés
Début / FinPremier / dernier panneau interactif
Entrée ou EspaceDéclenche le panneau — c'est-à-dire ue_panel_clicked, ou l'ouverture de sa liste déroulante s'il en a une
Haut / BasSur un panneau qui porte une liste déroulante : l'ouvrent, au-dessus du panneau
Touche Menu ou Maj+F10ue_panel_rclicked du panneau qui a le focus, à son coin bas-gauche

Un panneau qui se contente d'afficher n'est pas un contrôle : il n'est ni focalisable ni annoncé comme tel. Un panneau cliquable mais désactivé reste, lui, annoncé comme indisponible plutôt que de passer pour du texte. Une barre de progression annonce sa valeur, et une progression indéterminée n'en annonce aucune — cette absence est le sens du mot. Un panneau cliquable grisé montre toujours son infobulle — celle qui dit pourquoi il est grisé — et un panneau à liste dit si sa liste est ouverte.

Un lecteur d'écran entend les messages de of_flash_panel sans que le focus bouge : c'est le rôle d'une barre d'état (une région vivante polie). Les autres changements — un nouveau texte, un nouvel état — ne sont lus qu'avec ib_announce = true, sans quoi une horloge à la seconde parlerait toute la journée.

Le focus survit à la reconstruction de la barre : un panneau ajouté, retiré, masqué ou grisé la reconstruit, et le focus revient sur le même panneau (sur le suivant quand il ne peut plus le prendre). Un texte, un état ou une progression changent sur place, sans rien reconstruire — une horloge à la seconde ne vole jamais le focus.


Exemples #

Largeurs fixes et largeurs automatiques #

// Largeur 0 : le panneau prend exactement la place de son texte
uo_status.of_add_panel(/*key*/ "", /*text*/ "Panneau ajuste au contenu", /*icon_file*/ "", /*align*/ uo_status.ALIGN_START, /*width*/ 0)

// Largeur fixe en pixels : utile quand le texte change souvent,
// pour que les panneaux voisins ne bougent pas a chaque mise a jour
uo_status.of_add_panel(/*key*/ "pos", /*text*/ "Ligne 1, Col 1", /*icon_file*/ "", /*align*/ uo_status.ALIGN_START, /*width*/ 150)

// Un panneau pousse a l'extremite opposee
uo_status.of_add_panel(/*key*/ "clock", /*text*/ "12:00", /*icon_file*/ "", /*align*/ uo_status.ALIGN_END, /*width*/ 140)

Icônes et panneaux cliquables #

// Une cle rend le panneau adressable ; ib_clickable le rend cliquable
uo_status.of_add_panel(/*key*/ "save", /*text*/ "Enregistre", /*icon_file*/ "mono:img\save.svg", /*align*/ uo_status.ALIGN_START, /*width*/ 0)
uo_status.of_add_sep()   // trait de separation entre deux groupes de panneaux
uo_status.of_add_panel(/*key*/ "conn", /*text*/ "Connecte",   /*icon_file*/ "mono:img\plug.svg", /*align*/ uo_status.ALIGN_START, /*width*/ 0)
uo_status.of_add_panel(/*key*/ "user", /*text*/ "Alex Martin",  /*icon_file*/ "mono:img\user.svg", /*align*/ uo_status.ALIGN_END, /*width*/ 160)

// Seuls ces deux-la repondent au clic (ue_panel_clicked)
uo_status.of_panel(/*key*/ "conn").ib_clickable = true
uo_status.of_panel(/*key*/ "user").ib_clickable = true
// event ue_panel_clicked de uo_status
choose case as_key
    case "conn" ; open(w_connection_settings)
    case "user" ; open(w_profile)
end choose

Texte riche dans un panneau #

Les panneaux acceptent le balisage riche : styles, couleurs et petites images directement dans le texte.

// Un accueil a gauche
uo_status.of_add_panel(/*key*/ "", /*text*/ "Bienvenue [b]dans[/b] [accent]PBToolboxAI[/accent]", &
                       /*icon_file*/ "", /*align*/ uo_status.ALIGN_START, /*width*/ 0)

// L'etat de la connexion a droite
uo_status.of_add_panel(/*key*/ "", /*text*/ "[green]En ligne[/green] [picture=mono:img\plug.svg,14,14]", &
                       /*icon_file*/ "", /*align*/ uo_status.ALIGN_END, /*width*/ 0)
// Variables locales
long ll_changed

// Le texte riche vaut aussi pour les mises a jour
ll_changed = dw_list.ModifiedCount()
uo_status.of_panel(/*key*/ "state").is_text = "[b]" + String(ll_changed) + "[/b] records changed"

Suivre un traitement long #

// Local variables
n_pbt_statusbar_panel lnv_import

// Le panneau d'import, puis son handle pour le suivre
uo_status.of_add_panel(/*key*/ "import", /*text*/ "Import", /*icon_file*/ "", /*align*/ uo_status.ALIGN_START, /*width*/ 220)
lnv_import = uo_status.of_panel(/*key*/ "import")
// Variables locales
long ll_percent

// Dans la boucle de traitement : la mini-barre suit l'avancement
for ll_percent = 0 to 100 step 25
    lnv_import.ii_progress = ll_percent
    lnv_import.is_text     = "Import " + String(ll_percent) + " %"
next
// A la fin : masquer la mini-barre et signaler le resultat
lnv_import.ii_progress = -1                       // valeur negative = barre masquee
lnv_import.is_text     = "Import termine"
lnv_import.is_state    = lnv_import.STATE_SUCCESS

Signaler une alerte discrète #

// Local variables
n_pbt_statusbar_panel lnv_panel

// Le panneau de la connexion
lnv_panel = uo_status.of_panel(/*key*/ "conn")

// Hors ligne : le panneau signale une erreur ; connecte : il redevient normal
if not ib_connected then
    lnv_panel.is_text  = "Hors ligne"
    lnv_panel.is_state = lnv_panel.STATE_ERROR
else
    lnv_panel.is_text  = "Connecte"
    lnv_panel.is_state = lnv_panel.STATE_NONE   // retour a l'apparence normale
end if

Adapter la barre au contexte #

// Masquer un panneau sans le supprimer : il retrouvera sa place plus tard
uo_status.of_panel(/*key*/ "user").ib_visible = ib_user_signed_in

// Le griser quand l'action correspondante n'a pas de sens
uo_status.of_panel(/*key*/ "save").ib_enabled = ib_document_open

// Reorganiser : placer le panneau d'etat en tete (positions comptees a partir de 1)
uo_status.of_move_panel(/*key*/ "state", /*index*/ 1)

// Retirer un panneau devenu inutile
uo_status.of_remove_panel(/*key*/ "import")

La poignée de redimensionnement #

// Tirer la poignee de coin redimensionne la fenetre qui porte la barre (masquee quand elle est maximisee)
uo_status.ib_show_resize_grip = true

Un panneau qui prend la place libre #

Comme le panneau « Prêt » de toute barre d'état Windows : il grandit avec la fenêtre, pousse les panneaux de fin au bout, et c'est son texte qui s'élide le premier quand la place manque.

// Une largeur de -1 : le panneau prend toute la place libre
uo_status.of_add_panel(/*key*/ "state", /*text*/ "Ready", /*icon_file*/ "", /*align*/ uo_status.ALIGN_START, /*width*/ -1)
uo_status.of_add_panel(/*key*/ "clock", /*text*/ "12:00", /*icon_file*/ "", /*align*/ uo_status.ALIGN_END, /*width*/ 140)

// La meme chose sur un panneau qui existe deja
uo_status.of_panel(/*key*/ "state").ib_spring = true

Placer la barre au bas de la fenêtre #

of_dock_bottom la pose le long du bord bas de ce qui la porte, sur toute la largeur : un appel dans l'événement resize suffit. Dans un cadre MDI, les feuilles se partagent ce qui reste au-dessus.

// event resize de la fenetre : la barre suit le bord bas
uo_status.of_dock_bottom()
// event resize d'un cadre MDI : la barre en bas, les feuilles au-dessus
uo_status.of_dock_bottom()
mdi_1.Resize(WorkSpaceWidth(), WorkSpaceHeight() - uo_status.Height)

Reprendre la MicroHelp #

Dans un cadre MDI à MicroHelp, PowerBuilder écrit l'aide de l'élément de menu sous le pointeur, et SetMicroHelp écrit la vôtre. La barre reprend ce rôle : nommez une fois le panneau qui affiche l'aide (is_help_panel), puis écrivez is_help là où vous appeliez SetMicroHelp. L'aide s'affiche par-dessus le texte du panneau, et "" le lui rend.

// Une fois : le panneau qui affiche l'aide (le premier, en general)
uo_status.is_help_panel = "state"

// La ou vous appeliez SetMicroHelp : l'aide passe par-dessus Ready
uo_status.is_help = "Saving the order..."

// "" rend au panneau son propre texte
uo_status.is_help = ""
// event ue_item_hover d'une menubar (uo_menu) : l'aide de l'entree sous le pointeur
uo_status.is_help = this.of_item(/*keys*/ as_keys).is_tooltip
// event getfocus d'un champ (sle_name) : son Tag est son aide
uo_status.is_help = sle_name.Tag

Bonnes pratiques #

Hérité du socle commun #

Ces membres existent sur tous les composants visuels — ils ne sont pas propres à celui-ci. Ils sont détaillés une seule fois, dans les chapitres transverses ; cette table dit seulement où les lire.

MembresRôleDétaillé dans
of_count · of_keys_at · of_hasParcourir ce que le composant contient3.2 Les items
of_resetRemettre le composant à zéro3.6 Remettre un composant à zéro : of_reset()
of_register_shortcut · of_clear_shortcutsRaccourcis clavier du composant3.5 Les raccourcis clavier
of_is_created · of_is_ready · of_get_last_errorS'il est né, s'il est prêt, ce qui a échoué3.7 Diagnostic
of_save_as_png · of_save_as_jpgExporter le rendu en image3.8 Exporter le rendu en image
of_set_redrawGrouper les modifications en un seul repaint3.10 Bonnes pratiques
of_preload_iconsIcônes affichées sans délaiAffichage instantané : of_icon
of_set_translationTraduire un libellé du composant5.2 Adapter un libellé : of_set_translation
of_focus_webviewDonner le focus au composant6.4 Clavier et focus
of_print · of_print_to_pdfImprimer, ou écrire un PDF6.9 Imprimer
of_set_property · of_get_property · of_component_namePiloter une propriété par son nom3.1 Le moteur de propriétés
is_accessible_name · is_accessible_descriptionLe nom et la description que dit un lecteur d'écran3.4 Propriétés et events optionnels

Deux aides ne sont pas héritées : of_icon et of_escape_markup vivent sur n_pbt_utils. Déclarez-en une — n_pbt_utils lnv_utils, rien à créer — et appelez-les dessus.


← Référence des composants · Sommaire du guide