InomHitta mer dokumentationSupportresurser som ingår | Ladda ner denna bok i PDF (1328 KB)
Chapitre 11 Boîtes de dialogueVous pouvez ajouter des fenêtres de boîte de dialogue et des formulaires personnalisés aux documents StarOffice. Ceux-ci peuvent, à leur tour, être liés à des macros StarOffice Basic afin d'en étendre les possibilités d'utilisation de façon considérable. Les boîtes de dialogue peuvent, par exemple, afficher les informations d'une base de données ou guider les utilisateurs lors d'un processus étape par étape de création d'un nouveau document sous la forme d'un assistant. Utilisation des boîtes de dialogueLes boîtes de dialogue StarOffice Basic sont constituées d'une fenêtre comprenant des champs de texte, des zones de liste, des boutons radio et autres éléments de contrôle. Création de boîtes de dialogueVous pouvez créer des boîtes de dialogue à l'aide de l'éditeur de boîte de dialogue StarOffice dont le fonctionnement est identique à celui l'application StarOffice Draw : ![]() Faites glisser les éléments de contrôle de votre choix depuis la palette de conception (située à droite) vers la zone de la boîte de dialogue dans laquelle vous pourrez définir la position et la taille de ces éléments. L'exemple illustre une boîte de dialogue contenant une étiquette et une zone de liste. ![]() Vous pouvez ouvrir une boîte de dialogue à l'aide du code suivant : Dim Dlg As Object
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.DlgDef)
Dlg.Execute()
Dlg.dispose()
CreateUnoDialog crée un objet nommé Dlg qui fait référence à la boîte de dialogue associée. Avant de pouvoir créer une boîte de dialogue, vous devez vérifier que la bibliothèque qu'elle utilise (dans cet exemple, la bibliothèque Standard) est chargée. Dans le cas contraire, la méthode LoadLibrary accomplit cette tâche. Une fois que l'objet de la boîte de dialogue Dlg a été initialisé, vous pouvez utiliser la méthode Execute pour afficher la boîte de dialogue. Les boîtes de dialogue telles que celle-ci sont décrites comme modales, car elles ne permettent aucune autre action du programme avant leur fermeture. Lorsque cette boîte de dialogue est ouverte, le programme reste dans l'appel Execute. La méthode dispose à la fin du code approuve les ressources utilisées par la boîte de dialogue lorsque le programme se termine. Fermeture des boîtes de dialogueFermeture par OK ou AnnulerSi une boîte de dialogue contient un bouton OK ou Annuler, elle se ferme automatiquement lorsque vous cliquez sur l'un d'entre eux. Vous trouverez de plus amples informations sur l'utilisation de ces boutons à la section Détails des éléments de contrôle des boîtes de dialogue, plus loin dans ce chapitre. Si vous fermez une boîte de dialogue en cliquant sur le bouton OK, la méthode Execute retourne la valeur 1 ; sinon, c'est la valeur 0 qui est retournée. Dim Dlg As Object
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.MyDialog)
Select Case Dlg.Execute()
Case 1
MsgBox "Ok pressed"
Case 0
MsgBox "Cancel pressed"
End Select
Fermeture par le bouton de fermeture de la barre de titreSi vous le souhaitez, vous pouvez fermer une boîte de dialogue en cliquant sur le bouton de fermeture de la barre de titre de la fenêtre de la boîte de dialogue. Dans ce cas, la méthode Execute de la boîte de dialogue retourne la valeur 0, comme si vous aviez appuyé sur le bouton Annuler. Fermeture avec un appel de programme expliciteVous pouvez également fermer une fenêtre de boîte de dialogue avec la méthode endExecute : Dlg.endExecute() Accès à des éléments de contrôle individuelsUne boîte de dialogue peut contenir autant d'éléments de contrôle que nécessaire. Vous pouvez accéder à ces éléments par l'intermédiaire de la méthode getControl qui retourne le nom de l'élément de contrôle. Dim Ctl As Object
Ctl = Dlg.getControl("MyButton")
Ctl.Label = "New Label"
Ce code détermine l'objet de l'élément de contrôle MyButton, puis initialise la variable d'objet Ctl avec une référence à l'élément. Enfin, le code définit la propriété Label de l'élément de contrôle sur la valeur New Label. Remarque – StarOffice Basic fait la distinction entre les majuscules et les minuscules pour les noms des éléments de contrôle. Utilisation du modèle des boîtes de dialogue et des éléments de contrôleLa séparation entre les éléments visibles du programme (Vue) et les données ou les documents sous-jacents (Modèle) se produit à de nombreux endroits dans l'API StarOffice. Outre les méthodes et les propriétés des éléments de contrôle, les objets des boîtes de dialogue et des éléments de contrôle ont un objet Model subordonné. Cet objet vous permet d'accéder directement au contenu d'une boîte de dialogue ou d'un élément de contrôle. Dans les boîtes de dialogue, la distinction entre les données et leur représentation n'est pas toujours aussi claire que dans d'autres zones de l'API StarOffice. Les éléments de l'API sont disponibles via les objets View et Model. La propriété Model offre un accès contrôlé par programme au modèle des objets de boîte de dialogue et d'élément de contrôle. Dim cmdNext As Object
cmdNext = Dlg.getControl("cmdNext")
cmdNext.Model.Enabled = False
Cet exemple désactive le bouton cmdNtext de la boîte de dialogue Dlg à l'aide de l'objet du modèle à partir de cmdNtext. PropriétésNom et titreChaque élément de contrôle possède son nom propre et peut être interrogé à l'aide de la propriété de modèle suivante :
Vous pouvez spécifier le titre apparaissant dans la barre de titre d'une boîte de dialogue à l'aide de la propriété de modèle suivante :
Position et tailleVous pouvez interroger la taille et la position d'un élément de contrôle à l'aide des propriétés suivantes de l'objet Model :
Pour que les boîtes de dialogue conservent la même apparence d'une plate-forme à l'autre, StarOffice utilise l'unité interne Map AppFont (ma) qui permet de spécifier la position et la taille des éléments au sein des boîtes de dialogue. Une unité ma correspond au huitième de la hauteur moyenne d'un caractère de la police système définie dans le système d'exploitation et au quart de sa largeur. En utilisant les unités ma, StarOffice garantit qu'une boîte de dialogue aura la même apparence quels que soient le système et les paramètres du système. Si vous souhaitez modifier la taille ou la position des éléments de contrôle au moment de l'exécution, déterminez la taille totale de la boîte de dialogue et réglez les valeurs des éléments de contrôle sur les rapports des parties correspondants. Remarque – Map AppFont (ma) remplace l'unité Twips pour obtenir une meilleure indépendance vis-à-vis des plates-formes. Focus et séquence de tabulationVous pouvez naviguer dans les éléments de contrôle des différentes boîtes de dialogue en appuyant sur la touche de tabulation. Les propriétés suivantes sont disponibles dans ce contexte dans le modèle des éléments de contrôle :
Enfin, l'élément de contrôle fournit une méthode getFocus permettant à l'élément de contrôle sous-jacent de recevoir le focus :
Boîtes de dialogue à plusieurs ongletsDans StarOffice, une boîte de dialogue peut posséder plusieurs onglets. La propriété Step d'une boîte de dialogue définit l'onglet actif, tandis que la propriété Step d'un élément de contrôle spécifie l'onglet dans laquelle il doit s'afficher. La valeur Step (si elle définie sur 0) constitue un cas à part. Si vous définissez cette valeur sur zéro dans une boîte de dialogue, tous les éléments de contrôle sont visibles, quelle que soit leur valeur Step. De même, si vous définissez cette valeur sur zéro pour un élément de contrôle, celui-ci s'affiche sur tous les onglets d'une boîte de dialogue. ![]() Dans l'exemple ci-dessus, vous pouvez également assigner la valeur Step (définie sur 0) à la ligne de séparation, ainsi que les boutons Annuler, Précédent, Suivant et Terminé pour afficher ces éléments sur tous les onglets. Vous pouvez également assigner ces éléments à un seul onglet (le premier, par exemple). Le code suivant montre comment la valeur Step des gestionnaires d'événements des boutons Suivant et Précédent peut être augmentée ou réduite et modifie le statut de ces boutons. Sub cmdNext_Initiated
Dim cmdNext As Object
Dim cmdPrev As Object
cmdPrev = Dlg.getControl("cmdPrev")
cmdNext = Dlg.getControl("cmdNext")
cmdPrev.Model.Enabled = Not cmdPrev.Model.Enabled
cmdNext.Model.Enabled = False
Dlg.Model.Step = Dlg.Model.Step + 1
End Sub
Sub cmdPrev_Initiated
Dim cmdNext As Object
Dim cmdPrev As Object
cmdPrev = Dlg.getControl("cmdPrev")
cmdNext = Dlg.getControl("cmdNext")
cmdPrev.Model.Enabled = False
cmdNext.Model.Enabled = True
Dlg.Model.Step = Dlg.Model.Step - 1
End Sub
Une variable globale Dlg faisant référence à une boîte de dialogue ouverte doit être ajoutée pour que cet exemple fonctionne. La boîte de dialogue change ensuite d'apparence de la façon suivante : Onglet 1 : ![]() Onglet 2 :
ÉvénementsLes boîtes de dialogue et formulaires de StarOffice sont basés sur un modèle de programmation orienté événement dans lequel vous pouvez assigner des gestionnaires d'événements aux éléments de contrôle. Un gestionnaire d'événements exécute une procédure prédéfinie lorsqu'une action particulière se produit, même lorsque cette action est un autre événement. Grâce à la gestion d'événements, vous pouvez également éditer des documents ou des bases de données ouvertes, et accéder à d'autres éléments de contrôle. Les éléments de contrôle de StarOffice reconnaissent divers types d'événements pouvant être déclenchés dans différentes situations. Ces types d'événements peuvent être répartis en quatre groupes :
Lorsque vous utilisez des événements, vérifiez que vous créez la boîte de dialogue associée dans l'environnement de développement de StarOffice et qu'elle contient les éléments de contrôle ou documents nécessaires (si les événements s'appliquent à un formulaire). ![]() La figure ci-dessus illustre l'environnement de développement de StarOffice Basic avec une boîte de dialogue contenant deux zones de liste. Vous pouvez déplacer les données d'une liste à l'autre en utilisant les boutons entre les deux zones de liste. Pour afficher la mise en page à l'écran, vous devez créer les procédures StarOffice Basic associées afin qu'elles puissent être appelées par les gestionnaires d'événements. Bien que vous puissiez utiliser ces procédures dans tous les modules, il est préférable d'en limiter l'utilisation à deux modules. Pour simplifier la lecture de votre code, il est recommandé d'attribuer des noms significatifs à ces procédures. Le passage direct à une procédure générale du programme depuis une macro peut produire un code peu clair. Ainsi, afin de simplifier la maintenance et le dépannage des codes, créez plutôt une autre procédure servant de point d'entrée pour la gestion d'événements, même si elle n'exécute qu'un seul appel vers la procédure cible. Le code de l'exemple suivant déplace une entrée de la zone de liste de gauche vers celle de droite dans une boîte de dialogue. Sub cmdSelect_Initiated
Dim objList As Object
lstEntries = Dlg.getControl("lstEntries")
lstSelection = Dlg.getControl("lstSelection")
If lstEntries.SelectedItem > 0 Then
lstSelection.AddItem(lstEntries.SelectedItem, 0)
lstEntries.removeItems(lstEntries.SelectItemPos, 1)
Else
Beep
End If
End Sub
Si cette procédure a été créée dans StarOffice Basic, vous pouvez l'assigner à un événement requis en utilisant la fenêtre des propriétés de l'éditeur de boîte de dialogue. ![]() La boîte de dialogue d'assignation répertorie toutes les procédures de StarOffice Basic. Pour assigner une procédure à un événement, sélectionnez la procédure et cliquez sur Assigner. ParamètresL'occurrence d'un événement particulier ne suffit pas toujours pour obtenir une réponse appropriée. D'autres informations peuvent s'avérer nécessaires. Par exemple, pour traiter un clic de souris, vous aurez certainement besoin de connaître la position du curseur à l'écran lors de l'appui sur le bouton. Dans StarOffice Basic, vous pouvez utiliser des paramètres d'objet pour fournir à une procédure des informations supplémentaires concernant un événement, par exemple : Sub ProcessEvent(Event As Object) End Sub La précision avec laquelle l'objet et les propriétés Event sont structurés dépend du type d'événement déclenché par l'appel de procédure. Les sections suivantes décrivent les types d'événements de façon détaillée. Quel que soit le type d'événement, tous les objets donnent accès à l'élément de contrôle correspondant et à son modèle. L'élément de contrôle peut être atteint en utilisant Event.Source et son modèle en utilisant Event.Source.Model Vous pouvez utiliser ces propriétés pour déclencher un événement au sein d'un gestionnaire d'événements. Événements de la sourisStarOffice Basic reconnaît les événements de souris suivants :
La structure des objets Event associés est définie dans la structure com.sun.star.awt.MouseEvent qui fournit les informations suivantes :
Les constantes définies dans com.sun.star.awt.MouseButton pour les boutons de la souris sont :
Le résultat de l'exemple suivant permet de déterminer la position de la souris, ainsi que le bouton de souris qui a été enfoncé : Sub MouseUp(Event As Object)
Dim Msg As String
Msg = "Keys: "
If Event.Buttons AND com.sun.star.awt.MouseButton.LEFT Then
Msg = Msg & "LEFT "
End If
If Event.Buttons AND com.sun.star.awt.MouseButton.RIGHT Then
Msg = Msg & "RIGHT "
End If
If Event.Buttons AND com.sun.star.awt.MouseButton.MIDDLE Then
Msg = Msg & "MIDDLE "
End If
Msg = Msg & Chr(13) & "Position: "
Msg = Msg & Event.X & "/" & Event.Y
MsgBox Msg
End Sub
Remarque – Les événements VBA Click et Doubleclick ne sont pas disponibles dans StarOffice Basic. Vous pouvez donc utiliser l'événement StarOffice Basic MouseUp à la place de l'événement click et imiter l'événement Doubleclick en modifiant la logique de l'application. Événements du clavierLes événements de clavier suivants sont disponibles dans StarOffice Basic :
Les deux événements sont associés à des actions de touches logiques et non à des actions physiques. Si l'utilisateur appuie sur plusieurs touches afin d'obtenir un seul caractère (par exemple, pour ajouter un accent à un caractère), StarOffice Basic ne crée qu'un événement. Une action unique sur une touche de modification, comme la touche MAJ ou ALT, ne crée pas d'événement indépendant. Les informations relatives à une touche enfoncée sont indiquées par l'objet Event que StarOffice Basic fournit à la procédure pour la gestion des événements. Il contient les propriétés suivantes :
L'exemple suivant utilise la propriété KeyCode pour établir si l'utilisateur a appuyé sur la touche Entrée, la touche de tabulation ou sur l'une des autres touches contrôle. Si l'une de ces touches a été enfoncée, son nom est retourné ; sinon, c'est le caractère saisi qui est retourné : Sub KeyPressed(Event As Object)
Dim Msg As String
Select Case Event.KeyCode
Case com.sun.star.awt.Key.RETURN
Msg = "Return pressed"
Case com.sun.star.awt.Key.TAB
Msg = "Tab pressed"
Case com.sun.star.awt.Key.DELETE
Msg = "Delete pressed"
Case com.sun.star.awt.Key.ESCAPE
Msg = "Escape pressed"
Case com.sun.star.awt.Key.DOWN
Msg = "Down pressed"
Case com.sun.star.awt.Key.UP
Msg = "Up pressed"
Case com.sun.star.awt.Key.LEFT
Msg = "Left pressed"
Case com.sun.star.awt.Key.RIGHT
Msg = "Right pressed"
Case Else
Msg = "Character " & Event.KeyChar & " entered"
End Select
MsgBox Msg
End Sub
Vous trouverez de plus amples informations sur les autres constantes du clavier dans la référence de l'API, dans le groupe de constantes com.sun.star.awt.Key. Événements du focusLes événements du focus indiquent si un élément de contrôle reçoit ou perd le focus. Par exemple, vous pouvez utiliser ces événements pour déterminer si un utilisateur a terminé le traitement d'un élément de contrôle de telle sorte que vous puissiez mettre à jour d'autres éléments d'une boîte de dialogue. Les événements de focus suivants sont disponibles :
Les objets Event des événements de focus sont structurés de la façon suivante :
Événements propres à l'élément de contrôleOutre les événements ci-dessus, qui sont pris en charge par tous les éléments de contrôle, il existe également certains événements spécifiques qui ne sont définis que pour certains éléments de contrôle. Les plus importants de ces événements sont :
Lorsque vous utilisez des événements, notez que certains d'entre eux, comme When initiating, peuvent être déclenchés chaque fois que vous cliquez avec la souris sur certains éléments de contrôle (par exemple, sur des boutons radio). Aucune action n'est exécutée pour vérifier si le statut de l'élément de contrôle a réellement été modifié. Pour éviter ce type d'"événement aveugle", enregistrez l'ancienne valeur de l'élément de contrôle dans une variable globale et vérifiez si la valeur est modifiée au moment de l'exécution d'un événement. Les propriétés de l'événement Item Status Changed sont :
Détails des éléments de contrôle des boîtes de dialogueStarOffice Basic reconnaît un ensemble d'éléments de contrôle qui peuvent être répartis dans les groupes suivants : Champs de saisie :
Boutons :
Listes de sélection :
Autres éléments de contrôle :
Les éléments de contrôle les plus importants sont présentés ci-après. BoutonsUn bouton exécute une action lorsque vous cliquez dessus. Le scénario le plus simple est celui au cours duquel le bouton déclenche un événement When Initiating lorsqu'un utilisateur clique dessus. Vous pouvez également lier une autre action au bouton pour qu'une boîte de dialogue s'ouvre en utilisant la propriété PushButtonType. Lorsque vous cliquez sur un bouton pour lequel cette propriété est définie sur la valeur 0, rien ne se passe au niveau de la boîte de dialogue. Lorsque vous cliquez sur un bouton pour lequel cette propriété est définie sur la valeur 1, la boîte de dialogue est fermée et la méthode Execute de la boîte de dialogue retourne la valeur 1 (la séquence de la boîte de dialogue s'est terminée correctement). Si la propriété PushButtonType a la valeur 2, la boîte de dialogue est fermée et la méthode Execute de la boîte de dialogue retourne la valeur 0 (boîte de dialogue fermée). Vous trouverez ci-après toutes les propriétés disponibles par l'intermédiaire du modèle de bouton :
Boutons radioCes boutons sont généralement utilisés en groupes et vous permettent de choisir parmi une ou plusieurs options. Lorsque vous sélectionnez une option, toutes les autres options du groupe sont désactivées. De cette façon, il n'est possible de définir q'un seul bouton radio à la fois. Un élément de contrôle d'un bouton radio fournit deux propriétés :
Vous pouvez également utiliser les propriétés suivantes à partir du modèle des boutons radio :
Pour regrouper plusieurs boutons radio, vous devez les positionner les uns à la suite des autres dans la séquence d'activation sans aucun espace (propriété Model.TabIndex décrite en tant que Order dans l'éditeur de boîte de dialogue). Si la séquence d'activation est interrompue par un autre élément de contrôle, StarOffice démarre automatiquement avec un nouveau groupe d'éléments de contrôle pouvant être activé indépendamment du premier. Remarque – Contrairement à VBA, vous ne pouvez pas insérer de boutons radio dans un groupe d'éléments de contrôle dans StarOffice Basic. Le groupement d'éléments de contrôle dans StarOffice Basic sert uniquement à créer une division visuelle en dessinant un cadre autour des éléments de contrôle. Cases à cocherLes cases à cocher servent à enregistrer une valeur Yes ou No et, suivant le mode, elles peuvent adopter deux ou trois états. En plus des états Yes et No, une case à cocher peut posséder un état intermédiaire si le statut correspondant pour Yes ou No a plusieurs significations ou n'est pas clair. Les cases à cocher offrent les propriétés suivantes :
L'objet Model d'une case à cocher fournit les propriétés suivantes :
Champs de texteLes champs de texte permettent aux utilisateurs de saisir des chiffres et du texte. Le service com.sun.star.awt.UnoControlEdit constitue la base des champs de texte. Un champ de texte peut contenir une ou plusieurs lignes et peut être édité ou bloqué par les utilisateurs. Les champs de texte peuvent également servir de champs numériques ou monétaires spéciaux, ainsi que de champs d'écran pour certaines tâches particulières. Ces éléments de contrôle étant basés sur le service Uno UnoControlEdit, leur gestion contrôlée par programme est semblable. Les champs de texte offrent les propriétés suivantes :
De plus, les propriétés suivantes sont fournies par l'intermédiaire de l'objet Model associé :
Zones de listeLes zones de listes (service com.sun.star.awt.UnoControlListBox) prennent en charge les propriétés suivantes :
Les zones de liste offrent les méthodes suivantes :
L'objet Model des zones de liste fournit les propriétés suivantes :
Remarque – L'option VBA permettant d'émettre des entrées de liste avec une valeur numérique supplémentaire (ItemData) n'existe pas dans StarOffice Basic. Si vous souhaitez gérer une valeur numérique (ID de base de données, par exemple) en plus du texte en langage naturel, vous devez créer un champ de données auxiliaire en plus de la zone de liste. |