shellexplorer — u_pbt_shellexplorer #
← Référence des composants · Sommaire du guide
L'arborescence du shell Windows : Bureau, Ce PC, lecteurs, dossiers, Réseau — avec les vraies icônes du poste.
▶ Le voir en vrai — Application de démonstration, tuile Shell explorer : l'aperçu, le code qui le produit et cette page, côte à côte.
En bref #
| Userobject | u_pbt_shellexplorer |
| Sert à | Choisir un dossier, ou naviguer, sans quitter l'application |
| Principe | Vous dites où commencer ; le shell dit ce qu'il y a, et vous recevez ce que l'utilisateur choisit |
Démarrage rapide #
// Nothing to build : the tree starts at the shell root on its own
// (Desktop, This PC, Network - what the user already knows)
uo_tree.is_root = u_pbt_shellexplorer.ROOT_DESKTOP
Le shell, pas le système de fichiers #
Le composant n'énumère pas des répertoires : il interroge le shell (IShellFolder). C'est ce qui met dans l'arbre Ce PC, le Réseau, la Corbeille et les dossiers virtuels — c'est-à-dire l'arbre que l'utilisateur connaît, au lieu d'une liste de lecteurs.
Chaque nœud est identifié par son nom d'analyse : un chemin pour ce qui est sur le disque, une forme ::{GUID} pour le reste. C'est la seule clé que le shell sait relire — donc la seule à stocker si vous voulez rouvrir une branche demain.
🚨
ue_selectedvous donne le nom EN PLUS du chemin, et ce n'est pas une commodité. Le nom affiché d'un dossier virtuel n'est pas la fin de son chemin : « Ce PC » n'a pas de fin. Une application qui découpe le chemin pour en tirer un libellé affichera::{20D04FE0-…}à son utilisateur.
L'arbre se construit au fur et à mesure qu'on le parcourt : une branche n'est demandée qu'à son ouverture. Lire un disque entier pour dessiner un arbre gèlerait l'application pendant des minutes sur un lecteur réseau — et c'est le cas normal dans les applications où cette bibliothèque vit.
// Event ue_selected : the path AND the display name
st_chemin.text = as_path
st_nom.text = as_name
Propriétés #
| Propriété | Type | Défaut | Rôle |
|---|---|---|---|
is_root | string | "" | Où commence l'arbre (constantes ROOT_*). Vide = la racine du shell. Un chemin y commence à la place |
ib_show_files | boolean | false | Affiche aussi les fichiers. Faux par défaut : un arbre sert à choisir un lieu, et un dossier de quatre mille fichiers n'est plus un lieu |
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_expand ( string as_path ) | Ouvre une branche déjà dessinée. Une branche que personne n'a atteinte ne peut pas s'ouvrir : l'arbre se construit en marchant. Renvoie 0 une fois appliqué, -2 si le composant n'est pas créé |
of_collapse ( string as_path ) | Ferme une branche. Ses enfants restent en place, donc la rouvrir ne coûte rien. Renvoie 0 une fois appliqué, -2 si le composant n'est pas créé |
of_select ( string as_path ) | Sélectionne un nœud déjà dessiné, et le rapporte comme le ferait un clic |
of_refresh ( ) | Reconstruit l'arbre depuis la racine. Ce qui était ouvert se referme : le shell n'a aucun moyen de dire ce qui a changé |
of_selected_key ( ) | Le nom d'analyse du nœud choisi. La seule clé que le shell sait relire |
of_selected_name ( ) | Le nom affiché, tel que l'Explorateur le montre. Ne le déduisez jamais du chemin |
of_reset ( ) | Revient à la racine du shell, dossiers seuls, rien de sélectionné. Renvoie 0 une fois appliqué, -2 si le composant n'est pas créé |
Événements #
| Événement | Déclenché quand |
|---|---|
ue_selected (string as_path, string as_name) | Un nœud a été choisi : son chemin et son nom d'affichage |
ue_expanded (string as_path) | Une branche s'ouvre. L'événement part avant l'arrivée des enfants — le shell est interrogé à cet instant, et sur un partage réseau il prend son temps |
ue_activated (string as_path) | Double-clic, ou touche Entrée. C'est là qu'une application ouvre le dossier, le charge, ou referme un sélecteur |
ue_error (string as_message) | Le shell refuse une branche — lecteur déconnecté, dossier sans droits. L'arbre reste utilisable |
Les icônes viennent de l'imagelist système du poste, pas de nous : un fichier
.dwgporte l'icône d'AutoCAD si AutoCAD est installé, et l'icône générique sinon. C'est ce que l'utilisateur attend, et rien d'autre ne peut le donner.
Exemples #
Commencer ailleurs qu'au Bureau #
// Only the drives, nothing above them
uo_tree.is_root = u_pbt_shellexplorer.ROOT_COMPUTER
// Or somewhere the application already knows
uo_tree.is_root = "C:\Projects"
Ouvrir ce que l'utilisateur a validé #
// Event ue_activated : a double-click, or Enter
of_ouvrir_dossier(as_path)
Bonnes pratiques #
- 🚨 Stockez
of_selected_key(), affichezof_selected_name(). Découper le chemin pour en tirer un libellé marche pourC:\Clientset affiche::{20D04FE0-…}pour Ce PC. - Laissez
ib_show_filesà faux tant que vous cherchez un dossier. Les fichiers rendent l'arbre illisible et sa lecture lente. - Prévoyez
ue_errordès la première version : un lecteur réseau déconnecté est le cas ordinaire, pas l'exception. - Utilisez
ue_activated, pasue_selected, pour valider. Sélectionner, c'est regarder ; double-cliquer, c'est décider. - Ne rafraîchissez pas en boucle.
of_refreshreferme tout : appelez-le quand l'utilisateur le demande, pas sur un minuteur. - Un chemin de départ étroit vaut mieux qu'un arbre entier quand l'application sait déjà où elle travaille : partez de
C:\Projets, l'utilisateur n'a plus rien à chercher.
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.
| Membres | Rôle | Détaillé dans |
|---|---|---|
of_reset | Remettre le composant à zéro | 3.6 Remettre un composant à zéro : of_reset() |
of_register_shortcut · of_clear_shortcuts | Raccourcis clavier du composant | 3.5 Les raccourcis clavier |
of_is_created · of_is_ready · of_get_last_error | S'il est né, s'il est prêt, ce qui a échoué | 3.7 Diagnostic |
of_save_as_png · of_save_as_jpg | Exporter le rendu en image | 3.8 Exporter le rendu en image |
of_set_redraw | Grouper les modifications en un seul repaint | 3.10 Bonnes pratiques |
of_preload_icons | Icônes affichées sans délai | Affichage instantané : of_icon |
of_set_translation | Traduire un libellé du composant | 5.2 Adapter un libellé : of_set_translation |
of_focus_webview | Donner le focus au composant | 6.4 Clavier et focus |
of_print · of_print_to_pdf | Imprimer, ou écrire un PDF | 6.9 Imprimer |
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.