Guide de programmation de StarOffice 8 pour BASIC
  Rechercher uniquement dans ce livre
Télécharger cet ouvrage au format PDF (1328 Ko)

Chapitre 12 Formulaires

À de nombreux égards, la structure des formulaires StarOffice correspond aux boîtes de dialogue abordées au chapitre précédent. Il existe cependant quelques différences importantes :

  • Les boîtes de dialogue apparaissent sous la forme d'une seule fenêtre de dialogue, qui s'affiche sur le document et qui ne permet aucune autre action que le traitement de la boîte de dialogue jusqu'à sa fermeture. Les formulaires, en revanche, s'affichent directement dans le document, tout comme les éléments de dessin.

  • L'éditeur de boîte de dialogue situé dans l'environnement de développement StarOffice Basic permet de créer des boîtes de dialogue. Les formulaires sont créés directement dans le document à l'aide de la barre d'outils Fonctions de formulaire.

  • Alors que les fonctions de boîte de dialogue sont disponibles dans tous les documents StarOffice, l'ensemble complet des fonctions de formulaire n'est disponible que dans les textes et les feuilles de calcul.

  • Les éléments de contrôle d'un formulaire peuvent être liés à une table de base de données externe. Cette fonction n'est pas disponible dans les boîtes de dialogue.

  • Les éléments de contrôle des boîtes de dialogue et des formulaires diffèrent en plusieurs points.

Les utilisateurs souhaitant créer des formulaires avec leurs propres méthodes de gestion des événements doivent se reporter au chapitre 11, Boîtes de dialogue. Les mécanismes expliqués ici sont identiques à ceux des formulaires.

Utilisation des formulaires

Les formulaires StarOffice peuvent contenir des champs de texte, des zones de liste, des boutons radio, ainsi que plusieurs autres éléments de contrôle, qui sont insérés directement dans un texte ou une feuille de calcul. La barre d'outils Fonctions de formulaire permet d'éditer des formulaires.

Un formulaire StarOffice peut adopter l'un des deux modes suivants : le mode brouillon et le mode affichage. En mode brouillon, la position des éléments de contrôle peut être modifiée et leurs propriétés peuvent être éditées dans la fenêtre des propriétés.

La barre d'outils Fonctions de formulaire permet également de passer d'un mode à l'autre.

Détermination de formulaires d'objet

StarOffice positionne les éléments de contrôle d'un formulaire au niveau de l'objet de dessin. Le formulaire d'objet réel est accessible par l'intermédiaire de la liste des formulaires au niveau du dessin. L'accès aux objets s'effectue de la façon suivante dans les documents texte :

Dim Doc As Object
Dim DrawPage As Object
Dim Form As Object

Doc = StarDesktop.CurrentComponent
DrawPage = Doc.DrawPage
Form = DrawPage.Forms.GetByIndex(0)

La méthode GetByIndex retourne le formulaire avec le numéro d'index 0.

Lorsque vous utilisez des feuilles de calcul, une étape intermédiaire est nécessaire via la liste des feuilles, car les niveaux de dessin ne se trouvent pas directement dans le document mais dans les feuilles individuelles :

Dim Doc As Object
Dim Sheet As Object
Dim DrawPage As Object
Dim Form As Object

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.GetByIndex(0)
DrawPage = Sheet.DrawPage
Form = DrawPage.Forms.GetByIndex(0)

Comme le suggère le nom de la méthode GetByIndex, un document peut contenir plusieurs formulaires. Cela est utile si, par exemple, le contenu de différentes bases de données s'affiche dans un document ou si une relation de la base de données 1:n s'affiche dans un formulaire. L'option permettant de créer des sous-formulaires peut également être utilisée à cet effet.

Les trois aspects d'un formulaire d'éléments de contrôle

Un élément de contrôle d'un formulaire a trois aspects :

  • En premier lieu, il y a le modèle de l'élément de contrôle. Il s'agit pour le programmeur StarOffice Basic du principal objet lors de l'utilisation des formulaires d'éléments de contrôle.

  • Son équivalent est la vue de l'élément de contrôle, qui permet de gérer les informations d'affichage.

  • Dans la mesure où les formulaires d'éléments de contrôle des documents sont gérés comme des éléments spéciaux du dessin, il existe également un objet Shape qui représente les propriétés spécifiques de l'élément de dessin figurant dans l'élément de contrôle (en particulier sa position et sa taille).

Accès au modèle des formulaires d'éléments de contrôle

Les modèles des éléments de contrôle d'un formulaire sont accessibles via la méthode GetByName du formulaire d'objet :

Dim Doc As Object
Dim Form As Object
Dim Ctl As Object

Doc = StarDesktop.CurrentComponent
Form = Doc.DrawPage.Forms.GetByIndex(0)
Ctl = Form.getByName("MyListBox")

Cet exemple détermine le modèle de l'élément de contrôle MyListBox, situé dans le premier formulaire du document texte actuellement ouvert.

En cas de doute sur le formulaire d'un élément de contrôle, vous pouvez utiliser l'option de recherche dans tous les formulaires de l'élément de contrôle souhaité :

Dim Doc As Object
Dim Forms As Object
Dim Form As Object
Dim Ctl As Object
Dim I as Integer

Doc = StarDesktop.CurrentComponent
Forms = Doc.Drawpage.Forms

For I = 0 To Forms.Count - 1
   Form = Forms.GetbyIndex(I)
   If Form.HasByName("MyListBox") Then
      Ctl = Form.GetbyName("MyListBox")
      Exit Function
   End If
Next I

Cet exemple utilise la méthode HasByName pour vérifier tous les formulaires d'un document texte, afin de déterminer s'ils contiennent un modèle d'élément de contrôle nommé MyListBox. Si un modèle correspondant est trouvé, une référence est enregistrée dans la variable Ctl et la recherche est interrompue.

Accès à la vue des formulaires d'éléments de contrôle

Pour accéder à la vue d'un formulaire d'éléments de contrôle, vous devez d'abord indiquer le modèle associé. La vue du formulaire d'éléments de contrôle peut être déterminée grâce au modèle et au contrôleur de document.

Dim Doc As Object
Dim DocCrl As Object
Dim Forms As Object
Dim Form As Object
Dim Ctl As Object
Dim CtlView As Object
Dim I as Integer

Doc = StarDesktop.CurrentComponent
DocCrl = Doc.getCurrentControler()
Forms = Doc.Drawpage.Forms

For I = 0 To Forms.Count - 1
   Form = Forms.GetbyIndex(I)
   If Form.HasByName("MyListBox") Then
      Ctl = Form.GetbyName("MyListBox")
      CtlView = DocCrl.GetControl(Ctl)
      Exit Function
   End If
Next I

Le code de cet exemple est très semblable à celui de l'exemple précédent permettant de déterminer un modèle d'élément de contrôle. Il utilise non seulement l'objet de document Doc, mais aussi l'objet du contrôleur de document DocCrl qui fait référence à la fenêtre du document actif. À l'aide de l'objet du contrôleur et du modèle de l'élément de contrôle, il utilise ensuite la méthode GetControl pour déterminer la vue (variable CtlView) du formulaire d'éléments de contrôle.

Accès à l'objet Shape des formulaires d'éléments de contrôle

La méthode permettant d'accéder aux objets Shape d'un élément de contrôle utilise également le niveau de dessin correspondant du document. Pour déterminer un élément de contrôle particulier, vous devez effectuer une recherche dans tous les éléments de dessin du niveau de dessin.

Dim Doc As Object
Dim Shape as Object
Dim I as integer

Doc = StarDesktop.CurrentComponent

For i = 0 to Doc.DrawPage.Count - 1
   Shape = Doc.DrawPage(i)

   If HasUnoInterfaces(Shape, _
      "com.sun.star.drawing.XControlShape") Then
      If Shape.Control.Name = "MyListBox" Then
            Exit Function
      End If
   End If
Next

Cet exemple vérifie tous les éléments de dessin pour déterminer s'ils prennent en charge l'interface com.sun.star.drawing.XControlShape requise pour les formulaires d'éléments de contrôle. Si c'est le cas, la propriété Control.Name vérifie ensuite si le nom de l'élément de contrôle est MyListBox. Si la valeur est True, la fonction met fin à la recherche.

Détermination de la taille et de la position des éléments de contrôle

Comme indiqué précédemment, la taille et la position des éléments de contrôle peuvent être déterminées à l'aide de l'objet Shape associé. À cet effet, la forme de l'élément de contrôle, comme tous les autres objets Shape, fournit les propriétés Size et Position :

  • Size (struct) : taille de l'élément de contrôle (structure de données com.sun.star.awt.Size).

  • Position (struct) : position de l'élément de contrôle (structure de données com.sun.star.awt.Point).

L'exemple suivant montre comment définir la position et la taille d'un élément de contrôle en utilisant l'objet Shape associé :

Dim Shape As Object

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Shape.Size = Size
Shape.Position = Point

Pour que le code fonctionne, l'objet Shape de l'élément de contrôle doit déjà être connu. Si ce n'est pas le cas, il doit être déterminé en utilisant le code ci-dessus.

Détails des formulaires d'éléments de contrôle

Les éléments de contrôle disponibles dans les formulaires sont semblables à ceux des boîtes de dialogue. Vous pouvez choisir parmi plusieurs champs de texte simples, zones de liste, boîtes combinées et boutons.

Vous trouverez ci-dessous la liste des propriétés les plus importantes pour les formulaires des éléments de contrôle. Toutes les propriétés font partie des objets Model associés.

Outre les éléments de contrôle standard, un élément de contrôle de table est également disponible pour les formulaires : il permet l'intégration de tables de bases de données complètes. Pour plus d'informations à ce sujet, reportez-vous à la section Formulaires de base de données du Chapitre 12, Formulaires.

Boutons

L'objet Model d'un bouton de formulaire fournit les propriétés suivantes :

  • BackgroundColor (long) : couleur d'arrière-plan.

  • DefaultButton (Boolean) : le bouton sert de valeur par défaut. Dans ce cas, il répond également au bouton d'entrée s'il n'est pas activé.

  • Enabled (Boolean) : l'élément de contrôle peut être activé.

  • Tabstop (Boolean) : l'élément de contrôle peut être atteint avec le bouton de tabulation.

  • TabIndex (Long) : position de l'élément de contrôle dans la séquence d'activation.

  • FontName (String) : nom du type de police.

  • FontHeight (Single) : hauteur de caractère en points (pt).

  • Tag (String) : chaîne contenant des informations supplémentaires, pouvant être enregistrées dans le bouton pour un accès contrôlé par le programme.

  • TargetURL (String) : URL cible pour les boutons du type d'URL.

  • TargetFrame (String) : nom de la fenêtre (ou du cadre) dans laquelle l'URL cible (TargetURL) doit être ouvert lors de l'activation du bouton (pour les boutons du type d'URL).

  • Label (String) : nom du bouton.

  • TextColor (Long) : couleur du texte de l'élément de contrôle.

  • HelpText (String) : texte d'aide s'affichant automatiquement lorsque le curseur de la souris se trouve au-dessus de l'élément de contrôle.

  • HelpURL (String) : URL de l'aide en ligne pour l'élément de contrôle correspondant.

  • ButtonType (Enum) : action liée au bouton (valeur par défaut à partir de com.sun.star.form.FormButtonType).

La propriété ButtonType permet de définir une action s'exécutant automatiquement lorsque l'utilisateur appuie sur le bouton. Le groupe de constantes com.sun.star.form.FormButtonType associé fournit les valeurs suivantes :

  • PUSH : bouton standard.

  • SUBMIT : fin de l'entrée du formulaire (particulièrement utile pour les formulaires HTML).

  • RESET : rétablit toutes les valeurs d'origine du formulaire.

  • URL : appelle l'URL défini dans TargetURL. L'URL est ouvert dans la fenêtre spécifiée via TargetFrame.

Les types de bouton OK et Annuler figurant dans les boîtes de dialogue ne sont pas pris en charge dans les formulaires.

Boutons radio

Les propriétés suivantes d'un bouton radio sont disponibles via l'objet Model :

  • Enabled (Boolean) : l'élément de contrôle peut être activé.

  • Tabstop (Boolean) : l'élément de contrôle peut être atteint avec le bouton de tabulation.

  • TabIndex (Long) : position de l'élément de contrôle dans la séquence d'activation.

  • FontName (String) : nom du type de police.

  • FontHeight (Single) : hauteur de caractère en points (pt).

  • Tag (String) : chaîne contenant des informations supplémentaires, pouvant être enregistrées dans le bouton pour un accès contrôlé par le programme.

  • Label (String) : nom du bouton.

  • Printable (Boolean) : l'élément de contrôle peut être imprimé.

  • State (Short) : si la valeur est 1, l'option est activée ; sinon, elle est désactivée.

  • RefValue (String) : chaîne permettant d'enregistrer des informations supplémentaires (pour gérer les ID des enregistrements de données, par exemple).

  • TextColor (Long) : couleur du texte de l'élément de contrôle.

  • HelpText (String) : texte d'aide s'affichant automatiquement lorsque le curseur de la souris se trouve au-dessus de l'élément de contrôle.

  • HelpURL (String) : URL de l'aide en ligne pour l'élément de contrôle correspondant.

Le mécanisme de regroupement des boutons radio fait la distinction entre les éléments de contrôle destinés aux boîtes de dialogue et aux formulaires. Alors que les éléments de contrôle apparaissant successivement dans les boîtes de dialogue sont automatiquement regroupés, le regroupement des formulaires s'effectue sur la base des noms. Pour ce faire, tous les boutons radio d'un groupe doivent porter le même nom. StarOffice associe les éléments de contrôle groupés dans une matrice afin que les boutons individuels d'un programme StarOffice Basic puissent être atteints de la même manière que précédemment.

L'exemple suivant montre comment déterminer le modèle d'un groupe d'éléments de contrôle.

Dim Doc As Object
Dim Forms As Object
Dim Form As Object
Dim Ctl As Object
Dim I as Integer

Doc = StarDesktop.CurrentComponent
Forms = Doc.Drawpage.Forms

For I = 0 To Forms.Count - 1
   Form = Forms.GetbyIndex(I)
   If Form.HasByName("MyOptions") Then
      Ctl = Form. GetGroupbyName("MyOptions")
      Exit Function
   End If
Next I

Ce code correspond à l'exemple précédent permettant de déterminer un modèle simple d'élément de contrôle. Il effectue une recherche en boucle dans tous les formulaires du document texte actif et utilise la méthode HasByName pour vérifier si le formulaire correspondant contient un élément comportant le nom MyOptions recherché. Si tel est le cas, l'accès à la matrice du modèle s'effectue via la méthode GetGroupByName, plutôt que la méthode GetByName qui permet de déterminer des modèles simples.

Cases à cocher

L'objet Model d'un formulaire de case à cocher fournit les propriétés suivantes :

  • Enabled (Boolean) : l'élément de contrôle peut être activé.

  • Tabstop (Boolean) : l'élément de contrôle peut être atteint avec la touche de tabulation.

  • TabIndex (Long) : position de l'élément de contrôle dans la séquence d'activation.

  • FontName (String) : nom du type de police.

  • FontHeight (Single) : hauteur de caractère en points (pt).

  • Tag (String) : chaîne contenant des informations supplémentaires, pouvant être enregistrées dans le bouton pour un accès contrôlé par le programme.

  • Label (String) : nom du bouton.

  • Printable (Boolean) : l'élément de contrôle peut être imprimé.

  • State (Short) : si la valeur est 1, l'option est activée ; sinon, elle est désactivée.

  • RefValue (String) : chaîne permettant d'enregistrer des informations supplémentaires (pour gérer les ID des enregistrements de données, par exemple).

  • TextColor (Long) : couleur du texte de l'élément de contrôle.

  • HelpText (String) : texte d'aide s'affichant automatiquement lorsque le curseur de la souris se trouve au-dessus de l'élément de contrôle.

  • HelpURL (String) : URL de l'aide en ligne pour l'élément de contrôle correspondant.

Champs de texte

L'objet Model d'un formulaire de champ de texte fournit les propriétés suivantes :

  • Align (short) : orientation du texte (0 : aligné à gauche, 1 : centré, 2 : aligné à droite).

  • BackgroundColor (long) : couleur d'arrière-plan de l'élément de contrôle.

  • Border (short) : type de bordure (0 : aucune bordure, 1 : bordure 3D, 2 : bordure simple).

  • EchoChar (String) : caractère écho pour le champ de mot de passe.

  • FontName (String) : nom du type de police.

  • FontHeight (Single) : hauteur de caractère en points (pt).

  • HardLineBreaks (Boolean) : des retours à la ligne automatiques sont constamment insérés dans le texte de l'élément de contrôle.

  • HScroll (Boolean) : le texte possède une barre de défilement horizontale.

  • MaxTextLen (Short) : longueur maximale du texte. Si la valeur 0 est indiquée, il n'existe aucune limite.

  • MultiLine (Boolean) : autorise les entrées sur plusieurs lignes.

  • Printable (Boolean) : l'élément de contrôle peut être imprimé.

  • ReadOnly (Boolean) : le contenu de l'élément de contrôle est en lecture seule.

  • Enabled (Boolean) : l'élément de contrôle peut être activé.

  • Tabstop (Boolean) : l'élément de contrôle peut être atteint avec la touche de tabulation.

  • TabIndex (Long) : position de l'élément de contrôle dans la séquence d'activation.

  • FontName (String) : nom du type de police.

  • FontHeight (Single) : hauteur de caractère en points (pt).

  • Text (String) : texte de l'élément de contrôle.

  • TextColor (Long) : couleur du texte de l'élément de contrôle.

  • VScroll (Boolean) : le texte possède une barre de défilement verticale.

  • HelpText (String) : texte d'aide s'affichant automatiquement lorsque le curseur de la souris se trouve au-dessus de l'élément de contrôle.

  • HelpURL (String) : URL de l'aide en ligne pour l'élément de contrôle correspondant.

Zones de liste

L'objet Model d'un formulaire de zone de liste fournit les propriétés suivantes :

  • BackgroundColor (long) : couleur d'arrière-plan de l'élément de contrôle.

  • Border (short) : type de bordure (0 : aucune bordure, 1 : bordure 3D, 2 : bordure simple).

  • FontDescriptor (struct) : structure correspondant à com.sun.star.awt.FontDescriptor, indiquant les polices à utiliser.

  • LineCount (Short) : nombre de lignes dans l'élément de contrôle.

  • MultiSelection (Boolean) : autorise la sélection multiple d'entrées.

  • SelectedItems (Array of Strings) : liste des entrées mises en évidence.

  • StringItemList (Array of Strings) : liste de toutes les entrées.

  • ValueItemList (Array of Variant) : liste contenant des informations supplémentaires pour chaque entrée (pour gérer les ID des enregistrements de données, par exemple).

  • Printable (Boolean) : l'élément de contrôle peut être imprimé.

  • ReadOnly (Boolean) : le contenu de l'élément de contrôle est en lecture seule.

  • Enabled (Boolean) : l'élément de contrôle peut être activé.

  • Tabstop (Boolean) : l'élément de contrôle peut être atteint avec la touche de tabulation.

  • TabIndex (Long) : position de l'élément de contrôle dans la séquence d'activation.

  • FontName (String) : nom du type de police.

  • FontHeight (Single) : hauteur de caractère en points (pt).

  • Tag (String) : chaîne contenant des informations supplémentaires, pouvant être enregistrées dans le bouton pour un accès contrôlé par le programme.

  • TextColor (Long) : couleur du texte de l'élément de contrôle.

  • HelpText (String) : texte d'aide s'affichant automatiquement lorsque le curseur de la souris se trouve au-dessus de l'élément de contrôle.

  • HelpURL (String) : URL de l'aide en ligne pour l'élément de contrôle correspondant.


Remarque –

La propriété ValueItemList des formulaires de zones de liste s'apparente à la propriété VBA ItemData, qui permet de gérer des informations supplémentaires pour les entrées de liste individuelles.


De plus, les méthodes suivantes sont fournies via l'objet View de la zone de liste :

  • addItem (Item, Pos) : insère dans la liste la chaîne spécifiée dans Item à la position Pos.

  • addItems (ItemArray, Pos) : insère dans la liste les entrées répertoriées dans le champ de données de la chaîne ItemArray à la position Pos.

  • removeItems (Pos, Count) : supprime les entrées Count positionnées sur Pos.

  • selectItem (Item, SelectMode) : active ou désactive la mise en évidence de l'élément spécifié dans la chaîne Item, en fonction de la variable SelectMode.

  • makeVisible (Pos) : fait défiler les champs de la liste afin de rendre l'entrée spécifiée par Pos visible.

Formulaires de base de données

Les formulaires StarOffice peuvent être directement liés à une base de données. Les formulaires créés de cette manière offrent toutes les fonctions d'une base de données frontale complète et ne nécessitent pas de programmation indépendante.

L'utilisateur peut parcourir les tables et requêtes sélectionnées, y effectuer des recherches, modifier des enregistrements de données et en insérer de nouveaux. StarOffice vérifie automatiquement la pertinence des données récupérées à partir de la base de données et s'assure que toutes les modifications sont réécrites dans la base de données.

Un formulaire de base de données correspond en fait à un formulaire StarOffice standard. Outre les propriétés standard, les propriétés suivantes, propres aux bases de données, doivent également être définies dans le formulaire :

  • DataSourceName (String) : nom de la source de données ; la source de données doit être créée de manière globale dans StarOffice. Reportez-vous au Chapitre 10, Accès aux bases de données

  • Command (String) : nom de la table, requête ou commande Select SQL vers laquelle un lien doit être établi.

  • CommandType (Const) : spécifie si la commande est une table, une requête ou une commande SQL (valeur obtenue à partir de l'énumération com.sun.star.sdb.CommandType).

L'énumération com.sun.star.sdb.CommandType reconnaît les valeurs suivantes :

  • TABLE : table

  • QUERY : requête

  • COMMAND : commande SQL

Les champs de la base de données sont assignés aux éléments de contrôle individuels via cette propriété :

  • DataField (String) : nom du champ de la base de données liée.

Tables

Un autre élément de contrôle est fourni pour utiliser les bases de données : il s'agit de l'élément de contrôle de table. Il représente le contenu d'une table ou d'une requête de base de données complète. Dans le scénario le plus simple, un élément de contrôle de table est lié à une base de données grâce au formulaire de l'assistant qui relie toutes les colonnes aux champs correspondants de la base de données, conformément aux spécifications de l'utilisateur. Du fait de la relative complexité de l'API, nous n'en fournirons pas une description complète pour l'instant.