# button — `u_pbt_button` #

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

> Bouton thémé : texte et icône, styles, badge de compteur, raccourci clavier, boutons par défaut et d'annulation.

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

## En bref #

Userobject | `u_pbt_button`
Classe d'items | — (composant sans items)
Sert à | Remplacer un `commandbutton` par un bouton moderne, thémé, avec icône et badge
Options opt-in | `ib_track_mouse`

## Démarrage rapide #

    // event open de la fenetre
    uo_bouton.is_text  = "&Enregistrer"          // & = lettre soulignee (mnemonique)
    uo_bouton.is_style = uo_bouton.STYLE_PRIMARY // bouton d'action principale
    uo_bouton.is_image = "mono:img\save.svg"     // icone recoloree par le theme
    uo_bouton.is_shortcut = "Ctrl+S"             // raccourci affiche et actif
    uo_bouton.is_tooltip = "Enregistre le dossier en cours"

    // event ue_clicked de uo_bouton
    of_enregistrer()

## Constantes #

Constante | Valeur | Pour
--- | --- | ---
`STYLE_STANDARD` · `STYLE_PRIMARY` · `STYLE_FLAT` | `"standard"` `"primary"` `"flat"` | `is_style`

## Propriétés #

Propriété | Type | Défaut | Rôle
--- | --- | --- | ---
`is_text` | string | `""` | Libellé. Accepte le balisage riche et le mnémonique `&` (`&Enregistrer` souligne le E) ; `&&` affiche une esperluette littérale
`is_image` | string | `""` | Icône affichée avant le libellé (formes acceptées : chemin, `mono:`, `tint:`, ressource de DLL)
`ii_image_size` | integer | `0` | Taille de l'icône en pixels (`0` = taille naturelle du composant)
`is_style` | string | `"standard"` | Apparence : `STYLE_STANDARD`, `STYLE_PRIMARY` (fond d'accent, action principale), `STYLE_FLAT` (sans bordure)
`ib_enabled` | boolean | `true` | Bouton actif ou grisé
`ib_default` | boolean | `false` | Bouton par défaut : la touche Entrée le déclenche ; un liseré d'accent le signale
`ib_cancel` | boolean | `false` | Bouton d'annulation : la touche Échap le déclenche
`is_shortcut` | string | `""` | Raccourci clavier (`"Ctrl+S"`, `"F5"`, `"Ctrl+Shift+N"`), affiché dans l'info-bulle et actif quand le bouton a le focus
`ii_badge` | integer | `0` | Pastille de compteur en angle supérieur droit (`0` = aucune)
`il_badge_color` | long | `0` | Fond de la pastille, en RGB PowerBuilder (`0` = la couleur qui vient du thème). La couleur du texte est choisie automatiquement pour que le compteur reste lisible
`ii_badge_size` | integer | `0` | Hauteur de la pastille en pixels (`0` = la taille qui vient du thème). La taille de la police suit toute seule : le compteur reste centré quelle que soit la dimension
`ib_track_mouse` | boolean | `false` | Opt-in : active `ue_mouse_enter` / `ue_mouse_leave`
`is_theme_style` | string | `fluent` | Style visuel du composant (constantes `THEME_STYLE_*`)
`is_theme_mode` | string | `light` | Variante claire ou sombre (constantes `THEME_MODE_*`)
`il_theme_accent` | long | `-1` | Couleur d'accent de ce composant (`-1` = accent du thème)
`is_tooltip` | string | `""` | Info-bulle simple affichée au survol du composant
`is_super_tooltip_title` | string | `""` | Titre de l'info-bulle enrichie (prend le pas sur `is_tooltip`)
`is_super_tooltip_text` | string | `""` | Texte de l'info-bulle enrichie (balisage riche accepté)
`is_super_tooltip_image` | string | `""` | Image de l'info-bulle enrichie

## Méthodes #

Méthode | Rôle
--- | ---
`of_reset ( )` | Remet toutes les propriétés à leur défaut
`of_set_redraw (boolean)` | Regroupe une rafale de modifications en un seul rendu
`of_save_as_png (string)` · `of_save_as_jpg (string)` | Exporte le rendu en image

## Événements #

Événement | Déclenché quand
--- | ---
`ue_clicked ( )` | Le bouton est cliqué, ou déclenché par Entrée / Échap / son raccourci
`ue_rclicked ( )` | Clic droit sur le bouton
`ue_mouse_enter ( )` | La souris entre — nécessite `ib_track_mouse = true`
`ue_mouse_leave ( )` | La souris sort — nécessite `ib_track_mouse = true`
`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`)

## Exemples #

### Les trois styles #

    uo_ok.is_text     = "Valider"
    uo_ok.is_style    = uo_ok.STYLE_PRIMARY
    uo_ok.ib_default  = true          // touche Entree

    uo_annuler.is_text   = "Annuler"
    uo_annuler.is_style  = uo_annuler.STYLE_STANDARD
    uo_annuler.ib_cancel = true       // touche Echap

    uo_aide.is_text  = "Aide"
    uo_aide.is_style = uo_aide.STYLE_FLAT   // discret, sans bordure

### Icône et badge de notification #

    uo_messages.is_text  = "Messages"
    uo_messages.is_image = "mono:img\mail.svg"
    uo_messages.ii_image_size = 20
    uo_messages.ii_badge = 12             // pastille "12"

    // Mettre le compteur a jour : la pastille disparait a 0
    uo_messages.ii_badge = ll_non_lus

    // Une pastille rouge pour une alerte, plutot que la couleur du theme.
    // La couleur du texte est choisie toute seule pour rester lisible.
    uo_messages.il_badge_color = RGB(200, 30, 30)

    // Revenir a la couleur qui vient du theme
    uo_messages.il_badge_color = 0

### Libellé enrichi #

    uo_bouton.is_text = "[b]Exporter[/b] [size-=20]· CSV[/size-=20]"
    uo_bouton.is_text = "Statut [picture=mono:img\ok.svg,14,14]"

### Bouton d'action principale avec raccourci et aide #

    uo_valider.of_set_redraw(false)

    uo_valider.is_text     = "&Valider la commande"
    uo_valider.is_style    = uo_valider.STYLE_PRIMARY
    uo_valider.is_shortcut = "Ctrl+Entrée"
    uo_valider.ib_default  = true
    uo_valider.is_super_tooltip_title = "Valider"
    uo_valider.is_super_tooltip_text  = "Envoie la commande au fournisseur." &
                                        + "[br][br][size-=15]Action irréversible.[/size-=15]"

    uo_valider.of_set_redraw(true)

### Réagir au survol #

    uo_bouton.ib_track_mouse = true

    // event ue_mouse_enter de uo_bouton
    uo_statut.of_item("main").is_text = "Enregistre le dossier en cours"

## Bonnes pratiques #

- Un seul bouton `primary` par écran : c'est l'action attendue.
- `ib_default` et `ib_cancel` remplacent la gestion manuelle d'Entrée / Échap dans votre fenêtre.
- Utilisez `mono:` pour les icônes monochromes : elles suivront le thème clair comme sombre.
- Appelez `of_reset()` avant de réutiliser un bouton pour une autre action.

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