OpenXMLDialog()

Syntaxe

Resultat = OpenXMLDialog(#Dialog, #XML, Nom$ [, X, Y [, Largeur, Hauteur [, ParentID]]]))
Description
Ouvre l'interface utilisateur spécifiée (fenêtre, boîte de dialogue, etc) et l'affiche à l'écran.

Pour accéder aux gadgets, voir DialogGadget().
Pour obtenir le numéro de la fenêtre, voir DialogWindow().

Arguments

#Dialog L'interface utilisateur à utiliser.

Elle doit être créée au préalable avec CreateDialog().
#XML Le code xml à utiliser.

Il doit être créé au préalable avec LoadXML(), CreateXML() ou CatchXML().
Cela signifie qu'il est possible de créer des interfaces utilisateur à la volée avec CreateXML() ou CatchXML().
Voir les remarques ci-dessous pour prendre connaissance des attributs XML supportés.
Lorsque le script XML est compris dans le code, il est peut être plus aisé d'utiliser la quote (guillemet simple) pour les attributs XML (c'est une syntaxe XML parfaitement admise).
Nom$ Le nom de l'interface utilisateur à ouvrir.

En effet, un fichier XML peut contenir le code de plusieurs interfaces utilisateur.
X, Y (optionnel) Les coordonnées x, y (en pixels) de l'interface utilisateur.
Largeur, Hauteur (optionnel) La taille (en pixels) de l'interface utilisateur.

Si la taille est plus petite que la taille calculée d'après le code du fichier XML et d'après l'agencement automatique des gadgets ou "layout", alors ces paramètres optionnels ne seront pas pris en compte et la taille calculée sera bien utilisée.
Sans ces paramètres optionnels, la taille de la boîte de dialogue aura la plus petite taille possible.
ParentID (optionnel) L'identifiant de la fenêtre parent.

Un identifiant de fenêtre valide peut être récupéré avec WindowID().

Valeur de retour

Renvoie une valeur non nulle si l'interface utilisateur a été ouverte avec succès ou zéro sinon.
Pour obtenir plus d'informations sur l'erreur qui a eu lieu, voir DialogError().

Remarques

----------------------------------------------------------------
   .: Format XML d'une interface utilisateur :.
----------------------------------------------------------------

  I. Attributs communs 
  --------------------

  width     - Largeur minimale. Valeur positive ou nulle (par défaut="0")
  height    - Hauteur minimale. Valeur positive ou nulle (par défaut="0")

  id        - Numéro d'identification d'un gadget ou d'une fenêtre (par défaut c'est #PB_Any). Il peut être une constante runtime
  name      - Une chaîne de caractères qui identifie l'objet (principalement pour DialogGadget(), insensible à la casse) (par défaut="")
  text      - Texte associé à l'objet (par défaut="")

  flags     - Options du gadget/fenêtre, comme "#PB_Window_Borderless | #PB_Window_ScreenCentered"  (par défaut="")

  min        - Valeur minimum 
  max        - Valeur maximum
  value      - Valeur courante

  invisible - Egal à "yes", l'objet créé est invisible (par défaut="no")
  disabled  - Egal à "yes", l'objet créé est désactivé (seulement pour les gadgets) (par défaut="no")

  colspan   - Seulement à l'intérieur de l'attribut <gridbox>, permet à un élément de couvrir plusieurs lignes / colonnes
  rowspan     (par défaut="1")

  Remarque : Tous ces attributs sont facultatifs.


  II. L'élément racine
  --------------------

  <window>  : Une fenêtre unique
  </window>
  
  ou 
    
  <dialogs> : Plusieurs fenêtres dans un même fichier XML
    <window name="PremiereFenetre">
    </window>
    <window name="SecondeFenetre">
    </window>
    ...
  </dialogs>


  III. L'élément fenêtre 
  ----------------------

  <window>
  </window>
  
  Clés reconnues dans le code XML:
  ................................

  Tous les attributs communs ainsi que les clés suivantes:
  
  minwidth  = 'auto' ou une valeur numérique 
  maxwidth  = 'auto' ou une valeur numérique
  minheight = 'auto' ou une valeur numérique
  maxheight = 'auto' ou une valeur numérique
  
  Permet de définir les tailles minimum et maximum d'une fenêtre. 
  Si la valeur est 'auto' alors la taille est calculée en fonction de la taille 
  (calculée ou prédéfinie) des éléments contenus dans la fenêtre.
                

   - Crée la fenêtre
   - Peut avoir tous les attributs communs.
   - Est un conteneur à un seul élément.
   - Si plus d'un élément <window> est présent, l'attribut 'name' est utilisé pour les identifier.
   - Tous les éléments d'interface graphique ne peuvent être placés qu'ici.
  
  
  IV. Les élements Boîtes, agencement et réorganisation automatique des gadgets (Layout)
  --------------------------------------------------------------------------------------
  
  **************************************************************************************
  hbox et vbox
  **************************************************************************************

    Boîtes qui disposent les éléments horizontalement ou verticalement. 
    Peut contenir n'importe quel nombre d'éléments.

    Clés reconnues dans le code XML:
    ................................

    Tous les attributs communs ainsi que les clés suivantes:
  
    spacing   = Espace à ajouter entre les éléments (par défaut=5)
  
    expand    = yes           - Les éléments deviennent plus grands pour remplir tout l'espace (par défaut)
                no            - Les éléments ne s'étendent pas pour remplir tout l'espace
                equal         - Force les éléments à avoir une taille égale
                item:<numéro> - Elargit un seul élément, si l'espace est disponible
  
    align     = top/left      - Ne s'applique que lorsque l'attribut expand="no", top/left sont les attributs par défaut
                center
                bottom/right

  **************************************************************************************
  gridbox 
  **************************************************************************************
  
    Aligne les éléments dans un tableau. 
    Peut contenir n'importe quel nombre d'éléments.
    
    Clés reconnues dans le code XML:
    ................................

    Tous les attributs communs ainsi que les clés suivantes:
  
    columns    = Nombre de colonnes (par défaut = 2)
  
    colspacing = Espace entre les colonnes / lignes (par défaut = 5)
    rowspacing
  
    colexpand = yes           - Les éléments deviennent plus grands pour remplir tout l'espace (par défaut)
    rowexpand   no            - Les éléments ne s'étendent pas pour remplir tout l'espace
                equal         - Force les éléments à avoir une taille égale
                item:<numéro> - Elargit un seul élément, si l'espace est disponible
                
                Pour colexpand, par défaut=yes
                Pour rowexpand, par défaut=no
  
    Tous les éléments d'un gridbox peuvent utiliser les clés suivantes:
    colspan = nombre de colonnes à fusionner (par défaut = 1)
    rowspan = nombre de lignes à fusionner
  
  **************************************************************************************
  multibox
  **************************************************************************************
   
    Une boîte avec de multiples éléments dans la même position. 
    Permet d'utiliser plusieurs conteneurs et de n'en montrer qu'un seul à la fois.
    Peut contenir n'importe quel nombre d'éléments.
   
    Clés reconnues dans le code XML:
    ................................

    Tous les attributs communs.
    
  **************************************************************************************
  singlebox
  **************************************************************************************
   
    Une boîte avec un seul élément.
    Utilisée uniquement pour ajouter une marge supplémentaire ou 
    des propriétés d'alignement supplémentaires à un élément.
   
     Clés reconnues dans le code XML:
    ................................

     Tous les attributs communs ainsi que les clés suivantes:
  
    margin = Marge autour du contenu (par défaut = 10)
             Peut être un nombre unique (= pour toutes les marges), ou une combinaison de
             top:<num>,left:<num>,right:<num>,bottom:<num>,vertical:<num>,horizontal:<num>
             Exemple: "vertical:5,left:10,right:0"
  
    expand = yes        - Les éléments deviennent plus grands pour remplir tout l'espace (par défaut)
             no         - Les éléments ne s'étendent pas pour remplir tout l'espace
             vertical   - Elargissement verticalement seulement
             horizontal - Elargissement horizontalement seulement
  
    expandwidth  = Taille maximale d'élargissement des éléments. Si la taille demandée est supérieure à
    expandheight   ce paramètre alors la taille de la requête est utilisée (le contenu ne peut pas devenir plus petit)
                   par défaut=0
  
    align  = C'est une combinaison de top, left, bottom, right et center. (n'est efficace que lorsque expand <> yes)
             Exemple: "top,center" ou "top,left" (par défaut) 
             
             
             
  V. Les éléments Gadget 
  ----------------------

  Clés reconnues dans le code XML:
  ................................

  Tous les attributs XML communs sont pris en charge.
  
  De plus, pour lier une procédure d'événement directement dans le fichier XML, 
  les attributs suivants sont disponibles pour les gadgets:
  
    onevent            = EventProcedure() - Liaison d'événements génériques, pour tous les types d'événements.
    onchange           = EventProcedure() - Liaison de type #PB_EventType_Change           (uniquement pour les gadgets qui supportent ce type d'événement).
    onfocus            = EventProcedure() - Liaison de type #PB_EventType_Focus            (uniquement pour les gadgets qui supportent ce type d'événement).
    onlostfocus        = EventProcedure() - Liaison de type #PB_EventType_LostFocus        (uniquement pour les gadgets qui supportent ce type d'événement).
    ondragstart        = EventProcedure() - Liaison de type #PB_EventType_DragStart        (uniquement pour les gadgets qui supportent ce type d'événement).
    onrightclick       = EventProcedure() - Liaison de type #PB_EventType_RightClick       (uniquement pour les gadgets qui supportent ce type d'événement).
    onleftclick        = EventProcedure() - Liaison de type #PB_EventType_LeftClick        (uniquement pour les gadgets qui supportent ce type d'événement).
    onrightdoubleclick = EventProcedure() - Liaison de type #PB_EventType_RightDoubleClick (uniquement pour les gadgets qui supportent ce type d'événement).
    onleftdoubleclick  = EventProcedure() - Liaison de type #PB_EventType_LeftDoubleClick  (uniquement pour les gadgets qui supportent ce type d'événement).
    
  'EventProcedure()' doit être déclarée comme 'Runtime' dans le code principal, et doit respecter le format 
  de la procedure BindEvent() de la bibliothèque PureBasic 'Window'.
  En fait c'est BindGadgetEvent() qui est appelée ;)
  
  Les gadgets supportés sont :
  <button>
  <buttonimage>
  <calendar>
  <canvas>
  <checkbox>
  <combobox> 
  <container>    - Conteneur à un seul élément
  <date>
  <editor>
  <explorercombo>
  <explorerlist> 
  <explorertree> 
  <frame>        - Conteneur à un seul élément
  <hyperlink>
  <ipaddress>
  <image>
  <listicon> 
  <listview> 
  <option group> - Utilise le même numéro de 'group' pour créer des OptionGadget() liés entre eux.
  <panel>        - Peut contenir <tab> seulement
  <progressbar min max valeur> 
  <scrollarea scrolling="="vertical, horizontal ou les deux (par défaut)" innerheight="valeur ou auto (par défaut)" innerwidth="valeur ou auto (par défaut)" pas> 
                 - Conteneur à un seul élément
  <scrollbar min max page value> 
                 - page = Longueur de la page
  <spin min max value>
  <splitter firstmin="valeur ou auto" secondmin> 
                 - Doit contenir 2 éléments, (c'est un container a 2 "éléments-enfants"), 
                   la taille minimum est déterminée par les gadgets contenus par ces 2 éléments. 
                   Si 'auto' est spécifié, la valeur min sera la taille minimale de l'enfant.
  <string>
  <text>
  <trackbar min max valeur>
  <tree> 
  <web>
  <scintilla>    - Le callback reste vide

  Éléments liés à Gadget:
  <tab>          - Onglet, conteneur à un seul élément (l'attribut 'text' est supporté).
  
  Element Spécial :
  <empty>        - Un élément vide, utile quand il est nécessaire d'avoir un espace entre l'élément, 
                   afin de les aligner aux bordures par exemple.

Exemple: Simple fenêtre redimensionnable

  #XmlEncoding = #PB_UTF8
  
  #Dialog = 0
  #Xml = 0
  
  XML$ = "<window id='#PB_Any' name='test' text='test' minwidth='auto' minheight='auto' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>" +
         "  <panel>" +
         "    <tab text='Premier Onglet'>" +
         "      <vbox expand='item:2'>" +
         "        <hbox>" +
         "          <button text='Bouton 1'/>" +
         "          <checkbox text='Case à cocher 1'/>" +
         "          <button text='Bouton 2'/>" +
         "        </hbox>" +
         "        <editor text='Contenu...' height='150'/>" +
         "      </vbox>" +
         "    </tab>" +
         "    <tab text='Second Onglet'>" +
         "    </tab>" +
         "  </panel>" +
         "</window>"
  
  If CatchXML(#Xml, @XML$, StringByteLength(XML$), 0, #XmlEncoding) And XMLStatus(#Xml) = #PB_XML_Success
    
    If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
      
      Repeat
        Event = WaitWindowEvent()
      Until Event = #PB_Event_CloseWindow 
      
    Else  
      Debug "Erreur de la bibliothèque -Dialog- : " + DialogError(#Dialog)
    EndIf
  Else
    Debug "Erreur XML : " + XMLError(#Xml) + " (Ligne: " + XMLErrorLine(#Xml) + ")"
  EndIf

Exemple: Boîte 'Multibox'

  #XmlEncoding = #PB_UTF8
  
  #Dialog = 0
  #Xml = 0
  
  Runtime Enumeration Gadget
    #ListView
    #GeneralContainer
    #EditorContainer
    #BackupContainer
  EndEnumeration
  
  Procedure ShowPanels()
    
    HideGadget(#GeneralContainer, #True)
    HideGadget(#EditorContainer, #True) 
    HideGadget(#BackupContainer, #True)
    
    Select GetGadgetState(#ListView)
      Case 0
        HideGadget(#GeneralContainer, #False)
        
      Case 1
        HideGadget(#EditorContainer, #False)
        
      Case 2
        HideGadget(#BackupContainer, #False)
    EndSelect
  EndProcedure
  
  Runtime Procedure OnListViewEvent()
    ShowPanels()
  EndProcedure
  
  XML$ = "<window id='#PB_Any' name='test' text='Préférences' minwidth='auto' minheight='auto' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>" +
         "  <hbox expand='item:2'>" +
         "    <listview id='#ListView' width='100' onEvent='OnListViewEvent()'/>" +
         "    <multibox>" +
         "" +
         "      <container id='#GeneralContainer' invisible='yes'>" +
         "        <frame text='Général'>" +
         "          <vbox expand='no'>" +
         "            <checkbox text='Activer la LED rouge'/>" +
         "            <checkbox text='Activer la LED verte'/>" +
         "          </vbox>" +
         "        </frame>" +
         "      </container>" +
         "" +
         "      <container id='#EditorContainer' invisible='yes'>" +
         "        <frame text='Editeur'>" +
         "          <vbox expand='no'>" +
         "            <checkbox text='Mode lecture seule'/>" +
         "            <checkbox text='Dupliquer la ligne automatiquement'/>" +
         "            <checkbox text='Activer les polices monospaces'/>" +
         "          </vbox>" +
         "        </frame>" +
         "      </container>" +
         "" +
         "      <container  id='#BackupContainer' invisible='yes'>" +
         "      <frame text='Backup'>" +
         "        <vbox expand='no'>" +
         "          <checkbox text='Activer le backup'/>" +
         "        </vbox>" +
         "      </frame>" +
         "      </container>" +
         "" +
         "    </multibox>" +
         "  </hbox>" +
         "</window>"
  
  If CatchXML(#Xml, @XML$, StringByteLength(XML$), 0, #XmlEncoding) And XMLStatus(#Xml) = #PB_XML_Success
    
    If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
      
      AddGadgetItem(#ListView, -1, "Général")
      AddGadgetItem(#ListView, -1, "Editeur")
      AddGadgetItem(#ListView, -1, "Backup")
      
      SetGadgetState(#ListView, 0)
      
      ShowPanels()
      
      Repeat
        Event = WaitWindowEvent()
      Until Event = #PB_Event_CloseWindow 
      
    Else  
      Debug "Erreur de la bibliothèque -Dialog- : " + DialogError(#Dialog)
    EndIf
  Else
    Debug "Erreur XML : " + XMLError(#Xml) + " (Ligne: " + XMLErrorLine(#Xml) + ")"
  EndIf

Exemple: Boîte Gridbox

  #XmlEncoding = #PB_UTF8
  
  #Dialog = 0
  #Xml = 0
  
  XML$ = "<window id='#PB_Any' name='test' text='Gridbox' minwidth='auto' minheight='auto' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>" +
         "    <gridbox columns='6'>" +
         "          <button text='Bouton 1' />" +
         "          <button text='Bouton 2' />" +
         "          <button text='Bouton 3' colspan='3' />" +
         "          <button text='Bouton 4' />" +
         "          <button text='Bouton 5' rowspan='2' />" +
         "          <button text='Bouton 6' />" +
         "          <button text='Bouton 7' />" +
         "          <button text='Bouton 8' />" +
         "          <button text='Bouton 9' />" +
         "          <button text='Bouton 10' />" +
         "          <button text='Bouton 11' />" +
         "          <button text='Bouton 12' />" +
         "    </gridbox>" +
         "  </window>"
  
  If CatchXML(#Xml, @XML$, StringByteLength(XML$), 0, #XmlEncoding) And XMLStatus(#Xml) = #PB_XML_Success
    
    If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
      
      Repeat
        Event = WaitWindowEvent()
      Until Event = #PB_Event_CloseWindow 
      
    Else  
      Debug "Erreur de la bibliothèque -Dialog- : " + DialogError(#Dialog)
    EndIf
  Else
    Debug "Erreur XML : " + XMLError(#Xml) + " (Ligne: " + XMLErrorLine(#Xml) + ")"
  EndIf

Voir aussi

CreateDialog()

OS Supportés

Tous

<- IsDialog() - Dialog Index - RefreshDialog() ->