# 1. Installation et déploiement #

← Sommaire · Prise en main →

## 1.1 Prérequis #

Élément | Détail
--- | ---
PowerBuilder | 10.2 → 2025 (32 bits ou 64 bits)
Windows | 10 / 11, Server 2016 et supérieur
Runtime WebView2 Evergreen | Préinstallé sur Windows 10/11 à jour. Sur Windows Server ou LTSC, l'installer une fois avec le bootstrapper `MicrosoftEdgeWebview2Setup.exe` (~2 Mo, silencieux : `/silent /install`)

Il n'y a rien d'autre à installer : pas de .NET, pas d'ActiveX, pas de PBNI, aucun enregistrement COM, aucun droit administrateur pour la bibliothèque elle-même.

## 1.2 Fichiers à déployer #

Déploiement xcopy, à côté de votre exécutable :

    mon_appli.exe
    pbtoolboxai.dll        <- exemplaire x86 ou x64, selon votre application

La DLL est autoportante : les bundles HTML/CSS/JS, les thèmes et les dictionnaires de langue sont embarqués comme ressources. Aucun fichier web sur disque, aucun dossier annexe à recopier.

Côté PowerBuilder, `pbtoolboxai.pbl` est intégrée à votre application comme n'importe quelle bibliothèque (en `.pbl` en développement, en `.pbd` ou compilée dans l'exécutable en production).

### Un seul nom de DLL pour le 32 et le 64 bits #

La bibliothèque est livrée en deux exemplaires portant le même nom, dans deux dossiers séparés :

Dossier livré | Fichier | À déployer avec
--- | --- | ---
`x86\` | `pbtoolboxai.dll` | l'IDE PowerBuilder (toujours 32 bits) et les exécutables 32 bits
`x64\` | `pbtoolboxai.dll` | les exécutables 64 bits

Conséquence pratique : vos déclarations external functions ne citent qu'un seul nom, `pbtoolboxai.dll`. Vous développez et déboguez dans l'IDE 32 bits, puis vous compilez un exécutable 64 bits sans changer une ligne de PowerScript — seul le fichier déployé change.

> Sablier pendant une opération longue. `SetPointer(HourGlass!)` ne couvre que les zones PowerBuilder : un composant est un WebView2, il tourne dans un autre processus et continue d'afficher son curseur normal — l'écran dit « cliquez-moi » alors que rien n'écoute. `PBT_SetBusy(1)` demande à tous les composants de poser le sablier, y compris ceux qui naissent pendant l'attente ; `PBT_SetBusy(0)` le lève. Encadrez-en vos traitements longs, comme vous le faites déjà avec `SetPointer`.

> ⚠️ Les deux exemplaires portant le même nom, ils ne doivent jamais cohabiter dans un même dossier.

> ℹ️ Rien d'autre à changer pour le 64 bits. Les handles de fenêtre traversent l'API de la bibliothèque sur 32 bits — Windows garantit que les handles de fenêtre tiennent sur 32 bits significatifs, précisément pour ce passage. La déclaration `long` portée par `u_pbt_base` est donc exacte sur les deux cibles : vous ne touchez ni au nom de la bibliothèque, ni à une seule ligne de PowerScript. Aucun `longptr` n'est requis, et le plancher reste PowerBuilder 10.2.

## 1.3 Intégration dans l'IDE PowerBuilder #

1. Copiez `pbtoolboxai.pbl` dans le dossier de votre application.
2. Library list de la cible → ajoutez `pbtoolboxai.pbl`.
3. Copiez `pbtoolboxai.dll` — l'exemplaire x86, l'IDE PowerBuilder étant 32 bits — à côté de `pbXXX.exe` ou dans le dossier de travail de la cible, afin que l'IDE la trouve en exécution depuis l'IDE.
4. Les déclarations external functions sont déjà portées par `u_pbt_base` : rien à redéclarer pour utiliser un composant.

### Déclarations globales (optionnel) #

Quelques fonctions sont globales au processus (thème par défaut, langue, sens de lecture, licence). Elles ne dépendent d'aucun composant : déclarez-les dans l'objet application (`Local External Functions` de l'objet `application`), puis appelez-les dans l'event `open`.

    // Declarations - objet application, onglet "Local External Functions"
    Function long PBT_SetLicense (string as_client, string as_key) Library "pbtoolboxai.dll"
    Function long PBT_SetDefaultTheme (string as_name) Library "pbtoolboxai.dll"
    Function long PBT_SetDefaultThemeAccent (long al_accent) Library "pbtoolboxai.dll"
    Function long PBT_SetLanguage (string as_lang) Library "pbtoolboxai.dll"
    Function long PBT_SetFlowDirection (string as_dir) Library "pbtoolboxai.dll"
    Function long PBT_SetBusy (long al_on) Library "pbtoolboxai.dll"
    Function long PBT_Warmup () Library "pbtoolboxai.dll"

    // Event open de l'objet application
    PBT_SetLicense(gs_titulaire, gs_cle_licence)   // debride la bibliotheque
    PBT_SetDefaultTheme("fluent-dark")  // theme applique AVANT le premier rendu
    PBT_SetLanguage("fr")               // langue de l'interface des composants
    PBT_Warmup()                        // prechauffe le moteur WebView2

    Open(w_principale)

> ⚠️ Le nom de la bibliothèque est le même en 32 et en 64 bits : ces déclarations restent identiques quelle que soit la cible compilée.

## 1.4 Vérifier le runtime au démarrage (recommandé) #

Deux moyens complémentaires :

    // 1. Sur le composant : l'event ue_runtime_missing est leve si WebView2 est absent
    event ue_runtime_missing   // sur votre composant
    MessageBox("PBToolboxAI", "Le composant Microsoft WebView2 est requis.")

    // 2. A froid, sans composant : PBT_CheckRuntime renvoie la version installee
    string ls_version
    long ll_rc

    ls_version = Space(64)
    ll_rc = PBT_CheckRuntime(ls_version, 64)
    if ll_rc <= 0 then
        MessageBox("PBToolboxAI", "Runtime WebView2 absent : installez-le avant de continuer.")
    end if

## 1.5 Préchauffage (performance de démarrage) #

Le premier composant créé paie le démarrage du processus Edge (quelques centaines de millisecondes). `PBT_Warmup()` déclenche ce démarrage pendant que votre application charge le reste :

    // Event open de l'objet application, AVANT l'ouverture de la premiere fenetre
    PBT_Warmup()

Sans préchauffage tout fonctionne : la première fenêtre s'affiche simplement un peu plus lentement.

## 1.6 Dossier de données WebView2 #

Chaque application obtient son propre dossier de cache sous `%LOCALAPPDATA%\PBToolboxAI\WebView2\<nom_exe>` — jamais à côté de l'exécutable (souvent non inscriptible en `Program Files`). Il est créé automatiquement ; aucune action requise, aucun droit particulier.

## 1.7 Désinstallation #

Supprimez la DLL et la PBL de votre livraison. Le cache peut être effacé sous `%LOCALAPPDATA%\PBToolboxAI`. Le runtime WebView2, partagé avec Windows et d'autres applications, se laisse en place.

## 1.8 Checklist de mise en service #

- [ ] `pbtoolboxai.dll` (x86 / x64) à côté de l'exécutable (et de `pbXXX.exe` pour l'IDE)
- [ ] `pbtoolboxai.pbl` dans la library list
- [ ] `PBT_SetLicense` appelé dans l'event `open` de l'application (Licence)
- [ ] `PBT_SetDefaultTheme` appelé avant l'ouverture de la première fenêtre (Thèmes)
- [ ] `PBT_Warmup` appelé une fois au démarrage
- [ ] Runtime WebView2 vérifié sur le poste cible

← Sommaire · Prise en main →