Sei sulla pagina 1di 229

StarOfficeTM 7 Office Suite

A SunTM ONE Software Offering

Manuel de programmation Basic

Sun Microsystems, Inc. 4150 Network Circle Santa Clara, CA 95054 U.S.A. 650-960-1300
Part No. 817-3917-10 2003, Revision A

Copyrights and Trademarks


Copyright 2003 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, U.S.A. All rights reserved. Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product that is described in this document. In particular, and without limitation, these intellectual property rights may include one or more of the U.S. patents listed at http://www.sun.com/patents and one or more additional patents or pending patent applications in the U.S. and in other countries. This document and the product to which it pertains are distributed under licenses restricting their use, copying, distribution, and decompilation. No part of the product or of this document may be reproduced in any form by any means without prior written authorization of Sun and its licensors, if any. Third-party software, including font technology, is copyrighted and licensed from Sun suppliers. This product is based in part on the work of the Independent JPEG Group, The FreeType Project and the Catharon Typography Project. Portions Copyright 2000 SuSE, Inc. Word for Word Copyright 1996 Inso Corp. International CorrectSpell spelling correction system Copyright 1995 by Lernout & Hauspie Speech Products N.V. All rights reserved. Source code for portions of this product are available under the Mozilla Public License at the following sites: http://www.mozilla.org/, http://www.jclark.com/, and http://www.gingerall.com. Sun, Sun Microsystems, the Sun logo, Java, Solaris, StarOffice, the Solaris logo, and the StarOffice logo are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. UNIX is a registered trademark in the U.S. and in other countries, exclusively licensed through X/Open Company, Ltd. Screen Beans and Screen Beans clipart characters are registered trademarks of A Bit Better Corporation. International CorrectSpell is a trademark of Lernout & Hauspie Speech Products N.V. International CorrectSpell Swedish, Russian, Norwegian, English, Dutch, and Danish correction systems Copyright 1995 by Lernout & Hauspie Speech Products N.V. All rights reserved. Reproduction or disassembly of embodied algorithms or database prohibited. International CorrectSpell Spanish and French correction systems Copyright 1995 by Lernout & Hauspie Speech Products N.V. All rights reserved. Adapted from word list supplied by Librairie Larousse. Reproduction or disassembly of embodied algorithms or database prohibited. International CorrectSpell Australian English correction system Copyright 1995 by Lernout & Hauspie Speech Products N.V. All rights reserved. Based upon The Macquarie Dictionary, Second Revised Edition Copyright Macquarie University NSW. Reproduction or disassembly of embodied algorithms or database prohibited. International CorrectSpell Catalan correction system Copyright 1995 by Lernout & Hauspie Speech Products N.V. All rights reserved. Adapted from Catalan word list Copyright 1992 Universitat de Barcelona. Reproduction or disassembly of embodied algorithms or database prohibited. International CorrectSpell Czech correction system Copyright 1995 by Lernout & Hauspie Speech Products N.V. All rights reserved. Adapted from word list supplied by Jan Hajic. Reproduction or disassembly of embodied algorithms or database prohibited. International CorrectSpell Finnish correction system Copyright 1995 by Lernout & Hauspie Speech Products N.V. All rights reserved. Adapted from word list supplied by University of Helsinki Institute for Finnish Language and Dr. Kolbjorn Heggstad. Reproduction or disassembly of embodied algorithms or database prohibited. International CorrectSpell German correction system Copyright 1995 by Lernout & Hauspie Speech Products N.V. All rights reserved. Adapted from word list supplied by Langenscheidt K.G. Reproduction or disassembly of embodied algorithms or database prohibited. International CorrectSpell Italian correction system Copyright 1995 by Lernout & Hauspie Speech Products N.V. All rights reserved. Adapted from word list supplied by Zanichelli S.p.A. Reproduction or disassembly of embodied algorithms or database prohibited. International CorrectSpell Portuguese correction system Copyright 1995 by Lernout & Hauspie Speech Products N.V. All rights reserved. Portions adapted from the Dicionario Academico da Lingua Portuguesa Copyright 1992 by Porto Editora. Reproduction or disassembly of embodied algorithms or database prohibited. Federal Acquisitions: Commercial Software - Government Users Subject to Standard License Terms and Conditions. DOCUMENTATION IS PROVIDED "AS IS" AND ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD TO BE LEGALLY INVALID.

Copyright 2003 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, tats-Unis. Tous droits rservs. Sun Microsystems, Inc. a les droits de proprit intellectuels relatants la technologie incorpore dans ce produit. En particulier, et sans la limitation, ces droits de proprit intellectuels peuvent inclure un ou plus des brevets amricains numrs http://www.sun.com/patents et un ou les brevets plus supplmentaires ou les applications de brevet en attente dans les tats Unis et les autres pays. Ce produit ou document est protg par un copyright et distribu avec des licences qui en restreignent l'utilisation, la copie, la distribution, et la dcompilation. Aucune partie de ce produit ou document ne peut tre reproduite sous aucune forme, par quelque moyen que ce soit, sans l'autorisation pralable et crite de Sun et de ses bailleurs de licence, s'il y en a. Le logiciel dtenu par des tiers, et qui comprend la technologie relative aux polices de caractres, est protg par un copyright et licenci par des fournisseurs de Sun. Ce produit repose en partie sur le travail de l'Independent JPEG Group, de The FreeType Project et de Catharon Typography Project. Portions Copyright 2000 SuSE, Inc. Word for Word Copyright 1996 Inso Corp. Systme de correction orthographique International CorrectSpell Copyright 1995 de Lernout & Hauspie Speech Products N.V. Tous droits rservs. Le code source de certaines parties de ce produit est disponible sous licence publique Mozilla sur les sites suivants : http://www.mozilla.org/, http://www.jclark.com/ et http://www.gingerall.com. Sun, Sun Microsystems, le logo Sun, Java, Solaris, StarOffice, le logo Solaris et le logo StarOffice sont des marques de fabrique ou des marques dposes de Sun Microsystems, Inc. aux tatsUnis et dans d'autres pays. UNIX est une marque dpose aux tats-Unis et dans d'autres pays et licencie exclusivement par X/Open Company, Ltd. Les Screen Beans et les objets graphiques prdessins Screen Beans sont des marques dposes de A Bit Better Corporation. International CorrectSpell est une marque dpose de Lernout & Hauspie Speech Products N.V. Systmes de correction orthographique sudois, russe, norvgien, anglais, nerlandais et danois International CorrectSpell Copyright 1995 de Lernout & Hauspie Speech Products N.V. Tous droits rservs. Il est interdit de reproduire ou de dsassembler les algorithmes ou les bases de donnes incorpors. Systmes de correction orthographique espagnol et franais International CorrectSpell Copyright 1995 de Lernout & Hauspie Speech Products N.V. Tous droits rservs. Adapt partir de la liste de mots fournie par la Librairie Larousse. Il est interdit de reproduire ou de dsassembler les algorithmes ou les bases de donnes incorpors. Systme de correction orthographique anglais australien International CorrectSpell Copyright 1995 de Lernout & Hauspie Speech Products N.V. Tous droits rservs. labor partir de The Macquarie Dictionary, deuxime dition mise jour. Copyright Macquarie University NSW. Il est interdit de reproduire ou de dsassembler les algorithmes ou les bases de donnes incorpors. Systme de correction orthographique catalan International CorrectSpell Copyright 1995 de Lernout & Hauspie Speech Products N.V. Tous droits rservs. Adapt partir de la liste de mots catalans Copyright 1992 Universitat de Barcelona. Il est interdit de reproduire ou de dsassembler les algorithmes ou les bases de donnes incorpors. Systme de correction orthographique tchque International CorrectSpell Copyright 1995 de Lernout & Hauspie Speech Products N.V. Tous droits rservs. Adapt partir de la liste de mots fournie par Jan Hajic. Il est interdit de reproduire ou de dsassembler les algorithmes ou les bases de donnes incorpors. Systme de correction orthographique finlandais International CorrectSpell Copyright 1995 de Lernout & Hauspie Speech Products N.V. Tous droits rservs. Adapt partir de la liste de mots fournie par le University of Helsinki Institute pour la langue finlandaise et par le Dr Kolbjorn Heggstad. Il est interdit de reproduire ou de dsassembler les algorithmes ou les bases de donnes incorpors. Systme de correction orthographique allemand International CorrectSpell Copyright 1995 de Lernout & Hauspie Speech Products N.V. Tous droits rservs. Adapt partir de la liste de mots fournie par Langenscheidt K.G. Il est interdit de reproduire ou de dsassembler les algorithmes ou les bases de donnes incorpors. Systme de correction orthographique italien International CorrectSpell Copyright 1995 de Lernout & Hauspie Speech Products N.V. Tous droits rservs. Adapt partir de la liste de mots fournie par Zanichelli S.p.A. Il est interdit de reproduire ou de dsassembler les algorithmes ou les bases de donnes incorpors. Systme de correction orthographique portugais International CorrectSpell Copyright 1995 de Lernout & Hauspie Speech Products N.V. Tous droits rservs. Certaines parties ont t adaptes partir du Dicionario Academico da Lingua Portuguesa Copyright 1992 de Porto Editora. Il est interdit de reproduire ou de dsassembler les algorithmes ou les bases de donnes incorpors. Acquisitions fdrales : logiciel commercial ; les utilisateurs gouvernementaux sont soumis aux conditions gnrales standard de la licence. LA DOCUMENTATION est fournie TELLE QUELLE et TOUTES LES CONDITIONS, REPRSENTATIONS ET GARANTIES EXPRESSES OU TACITES, Y COMPRIS TOUTE GARANTIE TACITE CONCERNANT LA QUALIT MARCHANDE, L'APTITUDE UN USAGE PARTICULIER OU LA NON-VIOLATION DE DROITS DE TIERS SERONT REJETES, EXCEPT DANS LE CAS O L'EXCLUSION OU LA LIMITATION DE TELLES GARANTIES NE SERAIT PAS AUTORISE PAR LA LGISLATION EN VIGUEUR.

Table des matires


1 Introduction 13 13 14 14 15 17 17

propos de StarOffice Basic Utilisation de StarOffice Basic Structure de ce manuel 14 Informations complmentaires 2 Le langage de StarOffice Basic

Utilisateurs cibles de StarOffice Basic

Prsentation d'un programme StarOffice Basic Lignes de programme Commentaires Marqueur 19 20 20 20 18 17

Utilisation des variables

Dclaration de variable implicite Dclaration de variable explicite Chanes 21

Depuis un jeu de caractres ASCII vers Unicode Variables chanes 23 23

21

Spcification de chanes explicites Nombres 24 24 24

Variables de type entier

Variables de type entier long Variables de type simple Variables de type double Variables montaires 25 25 25

Spcification de nombres explicites Vrai et faux 28

25

Variables logiques

28 28

Dtails sur la date et l'heure Variables de date Champs de donnes Matrices simples 28 29 29

Valeur spcifique pour l'indice de dbut Champs de donnes multidimensionnels

30 30 30

Modifications dynamiques des dimensions des champs de donnes Porte et dure de vie des variables Variables locales 32 33 31

Variables du domaine public Variables globales Variables prives Constantes Oprateurs 35 35 33 34

Oprateurs mathmatiques Oprateurs logiques 35

35

Oprateurs de comparaison Instructions conditionnelles If...Then...Else Select...Case Boucles 38 38 40 36 37 36

36

For...Next Do...Loop

Exemple de programme : tri l'aide de boucles imbriques Procdures et fonctions Procdures Fonctions 42 42 42

41

Interruption prmature d'une procdure et d'une fonction Passage de paramtres Paramtres facultatifs Rcursivit 46 46 46 44 45

43

Traitement des erreurs

L'instruction On Error

6 StarOffice 7 Manuel de programmation Basic

La commande Resume

47 48 48 51

Requtes portant sur les erreurs

Astuces pour le traitement d'erreur structur 3 La bibliothque d'excution de StarOffice Basic Fonctions de conversion 51

Conversions de type implicites et explicites Vrification du contenu de variables Chanes de caractres 55 55 55 53

51

Utilisation des jeux de caractres Accs aux parties d'une chane Recherche et remplacement Formatage des chanes Date et heure 58 57 56

Spcification de la date et de l'heure l'intrieur du code du programme Extraction des informations de date et d'heure Obtention de l'heure et de la date systme Fichiers et rpertoires 60 61 65 66 60 59

58

Administration des fichiers

criture et lecture de fichiers texte Botes de message et zones de saisie Affichage de messages 67

Zone de saisie pour demander des chanes simples Autres fonctions Beep Shell Wait 68 69 69 69 71 71 68

68

Environ

4 Introduction l'API StarOffice

Universal Network Objects (UNO) Proprits et mthodes Proprits Mthodes 72 73 73 72

Modules, services et interfaces

Table of contents 7

Outils pour l'utilisation d'UNO La mthode supportsService Proprits de dbogage Rfrence de l'API 75 74

74 74

Prsentation de quelques interfaces centrales Cration d'objets contextuels 75 76

75

Accs par nom aux objets subordonns Accs par indice aux objets subordonns Accs itratif aux objets subordonns 5 Utilisation de documents StarOffice StarDesktop 79 79

77

78

Informations de base sur les documents dans StarOffice Cration, ouverture et import de documents Objets Document Modles 88 89 84 81

80

dtails sur diverses options de formatage 6 Documents texte 91 91

Structure des documents texte

Paragraphes et portions de paragraphe dition de documents texte TextCursor 100 104 107 100

92

Recherche de portions de texte

Remplacement de portions de texte Documents texte : plus que du texte Tableaux 109 113 116 120

108

Cadres texte Champs texte

Repres de texte 7 Classeurs 121

Structure des documents base de tables (classeurs) Classeurs 121 123

121

Lignes et colonnes Cellules 125

8 StarOffice 7 Manuel de programmation Basic

Formatage

130 140

dition efficace des classeurs Plages de cellules 140

Recherche et remplacement du contenu des cellules 8 Dessins et prsentations Structure des dessins Pages 145 147 157 145

142

145

Proprits lmentaires des objets de dessin Prsentation de diffrents objets de dessin dition des objets de dessin Regroupement des objets 164 164

Rotation et cisaillement des objets de dessin Recherche et remplacement Prsentations 168 168 166

165

Utilisation des prsentations 9 Diagrammes 169

Utilisation de diagrammes dans les feuilles de calcul La structure des diagrammes 170 170 Les lments individuels d'un diagramme Exemple 176 177 177 177 177 178

169

Diagrammes 3D

Diagrammes empils Types de diagrammes

Diagrammes linaires Diagrammes de surface Diagrammes barres Diagrammes secteurs

178 178 179 179 180

10 Accs aux bases de donnes SQL : un langage de requte Sources de donnes Requtes 182 180

Types d'accs aux bases de donnes

Liaisons avec des formulaires de base de donnes

183

Table of contents 9

Accs aux bases de donnes Itration de tables 184

184

Mthodes de rcupration des valeurs en fonction du type Les variantes ResultSet 187 187 188

186

Les mthodes de navigation dans les ResultSets Modification des enregistrements de donnes 11 Botes de dialogue 189 189 189 190

Utilisation des botes de dialogue Cration de botes de dialogue

Fermeture des botes de dialogue

Accs des lments de contrle individuels

191 192

Utilisation du modle de bote de dialogue et d'lment de contrle Proprits 192 192 192 193 193

Nom et titre

Position et taille

Focus et squence de tabulation

Botes de dialogue plusieurs pages vnements 195 197 198 199 200

Paramtres

vnements de la souris vnements du clavier vnements du focus

vnements spcifiques des lments de contrle Dtail des lments de contrle des botes de dialogue Boutons 202 203

201 201

Boutons d'option Cases cocher Champs de texte Zones de liste 12 Formulaires 207

203 204

205

Utilisation des formulaires

207 208 208

Dtermination des formulaires d'objet

Les trois aspects d'un formulaire d'lments de contrle


10 StarOffice 7 Manuel de programmation Basic

Accs au modle des formulaires d'lments de contrle Accs la vue des formulaires d'lments de contrle

209

210 211

Accs l'objet Shape des formulaires d'lments de contrle dtails des formulaires d'lments de contrle Boutons 212 213 212

Boutons d'option Cases cocher Champs de texte Zones de liste

214 215

216 217

Formulaires de base de donnes Tables 13 Annexe 217 219 219

Conseils de migration VBA

Conseils de migration StarOffice 5.x

219

Table of contents 11

12 StarOffice 7 Manuel de programmation Basic

CHAPITRE

Introduction
Ce manuel est une introduction la programmation l'aide de StarOffice Basic 7.0 et indique les applications possibles lies l'utilisation de StarOffice Basic dans StarOffice. Pour tirer le meilleur parti de cet ouvrage, vous devez tre familiaris avec d'autres langages de programmation. Des exemples dtaills vous sont proposs pour vous aider dvelopper rapidement vos propres programmes StarOffice Basic.
De nombreuses astuces de migration destines aux programmeurs Microsoft Visual Basic ou ceux ayant travaill avec des versions antrieures de StarOffice Basic sont proposes tout au long de ce manuel. Celles-ci sont signales par un petit symbole figurant sur le bord de la page. L'annexe de ce manuel contient un index de toutes les astuces de migration vous permettant d'accder rapidement celle que vous souhaitez consulter.

propos de StarOffice Basic


Le langage de programmation StarOffice Basic a t dvelopp spcialement pour StarOffice et est troitement intgr au paquetage Office. Comme son nom l'indique, StarOffice Basic est un langage de programmation appartenant la famille Basic. Quiconque ayant dj travaill avec d'autres langages Basic en particulier avec Visual Basic ou Visual Basic pour applications (VBA) de Microsoft se familiarisera rapidement avec StarOffice Basic. Une grande partie des structures de base de StarOffice Basic sont compatibles avec Visual Basic. Le langage de programmation StarOffice Basic peut tre divis en quatre composants :

Le langage de StarOffice Basic : dfinit les structures linguistiques lmentaires, par exemple, pour les dclarations de variables, les boucles et les fonctions. La bibliothque d'excution : fournit des fonctions standard qui n'ont pas de rfrence directe avec StarOffice, par exemple, des fonctions d'dition de nombres, de chanes de caractres, de dates et de fichiers. L'API (Application Programming Interface) StarOffice : permet d'accder aux documents StarOffice afin de les crer, de les enregistrer, de les modifier et de les imprimer. L'diteur de bote de dialogue : cre des fentres de botes de dialogue personnelles et permet l'ajout d'lments de contrle et de gestionnaires d'vnements.
La compatibilit entre StarOffice Basic et VBA concerne le langage StarOffice Basic, ainsi que la bibliothque d'excution. L'API StarOffice et l'diteur de bote de dialogue ne sont pas compatibles avec VBA (la standardisation de ces interfaces aurait rendu impossibles de nombreux concepts fournis dans StarOffice). 13

Utilisateurs cibles de StarOffice Basic


Le champ d'application de StarOffice Basic commence l o s'arrtent les fonctions standard de StarOffice. Les tches rcurrentes peuvent ainsi tre automatises dans StarOffice Basic, des liens peuvent tre tablis vers d'autres programmes (vers un serveur de base de donnes, par exemple) et les activits complexes peuvent tre excutes par un clic sur un bouton grce des scripts prdfinis. StarOffice Basic offre un accs complet toutes les fonctions StarOffice, supporte toutes les fonctions, modifie les types de document et fournit des options pour la cration de fentres de botes de dialogue personnelles.

Utilisation de StarOffice Basic


Tous les utilisateurs de StarOffice peuvent utiliser StarOffice Basic sans aucun autre programme ou aide. Mme avec l'installation standard, StarOffice Basic comprend tous les composants ncessaires la cration de ses propres macros Basic, dont :
?

L'environnement de dveloppement intgr (IDE, Integrated Development Environment) qui met disposition un diteur pour la saisie et le test des macros. L'interprteur, ncessaire l'excution des macros de StarOffice Basic. Les interfaces vers diverses applications StarOffice, permettant d'accder directement aux documents Office.

? ?

Structure de ce manuel
Les trois premiers chapitres prsentent StarOffice Basic aux lecteurs :

Chapitre 2 : Le langage de StarOffice Basic Chapitre 3 : La bibliothque d'excution de StarOffice Basic Chapitre 4 : Introduction l'API StarOffice

Ces chapitres proposent un aperu de StarOffice Basic et leur lecture est conseille toute personne souhaitant crire des programmes StarOffice Basic. Les autres chapitres dcrivent plus en dtail les diffrents composants de l'API StarOffice et peuvent tre lus sparment selon vos besoins :

Chapitre 5 : Utilisation de documents StarOffice Chapitre 6 : Documents texte Chapitre 7 : Classeurs Chapitre 8 : Dessins et prsentations Chapitre 9 : Diagrammes Chapitre 10 : Accs aux bases de donnes

14 StarOffice 7 Manuel de programmation Basic

Chapitre 11 : Botes de dialogue Chapitre 12 : Formulaires

Informations complmentaires
Le choix des composants de l'API StarOffice qui sont traits dans ce manuel a t effectu en fonction des avantages pratiques qu'ils apportent au programmeur StarOffice Basic. En gnral, les interfaces ne sont que partiellement traites. Pour une description plus dtaille, reportez-vous la rfrence de l'API disponible sur Internet l'adresse :
http://api.openoffice.org/common/ref/com/sun/star/module-ix.html

Le Developer's Guide (Guide du dveloppeur) dcrit l'API StarOffice de manire plus dtaille que ce manuel, mais est surtout prvu pour les programmeurs Java et C++. Les personnes dj familiarises avec la programmation StarOffice Basic peuvent trouver des informations complmentaires dans le Developer's Guide sur StarOffice Basic et la programmation dans StarOffice. Vous pouvez tlcharger le Developer's Guide depuis Internet l'adresse :
http://api.openoffice.org/DevelopersGuide/DevelopersGuide.html

Les programmeurs souhaitant travailler directement avec Java ou C++ plutt qu'avec StarOffice Basic doivent se reporter au Developer's Guide de StarOffice plutt qu' ce manuel. La programmation de StarOffice avec Java ou C++ est une tche beaucoup plus complexe que la programmation l'aide de StarOffice Basic.

Chapitre 1 Introduction 15

16 StarOffice 7 Manuel de programmation Basic

CHAPITRE

Le langage de StarOffice Basic


StarOffice Basic appartient la famille des langages Basic. De nombreuses parties de StarOffice Basic sont identiques Microsoft Visual Basic pour applications (VBA) et Microsoft Visual Basic. Toute personne ayant dj travaill avec ces langages se familiarisera rapidement avec StarOffice Basic. Les programmeurs d'autres langages comme Java, C++ ou Delphi ne devraient pas non plus avoir de problme se familiariser avec StarOffice Basic. StarOffice Basic est un langage de programmation procdural abouti qui n'utilise plus de structures de contrle rudimentaires, comme GoTo et GoSub. Vous pouvez galement profiter des avantages de la programmation oriente objet puisque StarOffice Basic possde une interface permettant d'utiliser des bibliothques d'objets externes. L'intgralit de l'API StarOffice est fonde sur ces interfaces, qui sont dcrites plus en dtail plus loin. Ce chapitre propose un aperu gnral des lments cls et des structures du langage StarOffice Basic ainsi que du cadre dans lequel les applications et les bibliothques sont orientes vers StarOffice Basic.

Prsentation d'un programme StarOffice Basic


StarOffice Basic est un langage interprt. Contrairement C++ ou Turbo Pascal, le compilateur de StarOffice ne cre pas de fichiers excutables ou auto-extractibles, capables de s'excuter de faon autonome. En revanche, vous pouvez excuter un programme StarOffice Basic simplement en cliquant sur un bouton. Le code est d'abord vrifi la recherche d'erreurs patentes, puis excut ligne par ligne.

Lignes de programme
Le fait que l'interprteur Basic fonctionne ligne par ligne est une des diffrences majeures entre le Basic et les autres langages de programmation. Alors que l'emplacement des retours la ligne dans le code source des programmes, par exemple en Java, C++ ou Delphi, est indiffrent, chaque ligne d'un programme Basic constitue une unit indpendante. Les appels de fonction, les expressions mathmatiques et les autres lments du langage, comme les en-ttes de fonction ou de boucle, doivent commencer et finir l'intrieur d'une mme ligne.

17

Si l'espace est insuffisant ou si cela donne des lignes trop longues, il est possible de lier plusieurs lignes ensemble par l'ajout de caractres de soulignage (_). L'exemple suivant montre comment lier les quatre lignes d'une expression mathmatique :
LongExpression = (Expression1 * Expression2) + _ (Expression3 * Expression4) + _ (Expression5 * Expression6) + _ (Expression7 * Expression8)

. Le caractre de soulignage doit toujours tre le dernier de la ligne lier et ne doit tre suivi d'aucun espace ou tabulation, sans quoi le code provoque une erreur. Paralllement la liaison de plusieurs lignes, StarOffice Basic permet aux programmeurs d'employer des deux-points (:) pour diviser une ligne en diffrentes sections afin de pouvoir y placer plusieurs expressions. Les assignations
a = 1 a = a + 1 a = a + 1

peuvent, par exemple, tre crites sous la forme suivante :


a = 1 : a = a + 1 : a = a + 1

Commentaires
En plus du code excuter, un programme StarOffice Basic peut galement contenir des commentaires expliquant le rle de ses diffrentes parties et fournissant des informations prcieuses qui pourront servir lorsque le programme sera repris ultrieurement, par exemple pour tre dbogu. StarOffice Basic propose deux mthodes pour insrer des commentaires dans le code :

Tous les caractres suivant une apostrophe sont considrs comme des commentaires :
Dim A ' Ceci est un commentaire pour la variable A

Le mot-cl Rem, suivi du commentaire.


Rem Ce commentaire est insr grce au mot-cl Rem.

Un commentaire comprend gnralement tous les caractres jusqu' la fin de la ligne. StarOffice Basic interprte la ligne suivante de nouveau comme une instruction normale. Si les commentaires s'tendent sur plusieurs lignes, chaque ligne doit tre signale comme tant un commentaire :
Dim B ' Ce commentaire pour la variable B est relativement long ' et s'tend sur plusieurs lignes. Le ' caractre de commentaire doit donc tre rpt ' chaque ligne.

18 StarOffice 7 Manuel de programmation Basic

Marqueur
Un programme StarOffice Basic peut contenir des dizaines, des centaines, voire des milliers de marqueurs (noms donns aux variables, constantes, fonctions, etc.) Lorsque vous choisissez un nom pour un marqueur, vous devez respecter les rgles suivantes :

Les marqueurs ne peuvent contenir que des lettres latines, des chiffres et des caractres de soulignage (_). Le premier caractre d'un marqueur doit tre une lettre ou un caractre de soulignage. Les marqueurs ne peuvent pas contenir de caractres spciaux comme , , , et . La longueur maximum d'un marqueur est de 255 caractres. Il n'y a pas de distinction entre les lettres majuscules et minuscules. Le marqueur UneVariableDeTest , par exemple, renvoie la mme variable que uneVariabledetest et UNEVARIABLEDETEST. Il y a cependant une exception cette rgle : les majuscules sont distingues des minuscules pour les constantes UNO-API. Vous trouverez de plus amples informations sur UNO dans le chapitre 4.
Les rgles de construction des marqueurs dans StarOffice Basic ne sont pas les mmes que dans VBA. Contrairement VBA, par exemple, StarOffice Basic n'autorise pas les caractres spciaux dans les marqueurs, car ils peuvent provoquer des problmes dans les projets internationaux.

Voici quelques exemples de marqueurs corrects et incorrects :


Surname Surname5 First Name DjVu 5Surnames First,Name ' Correct ' Correct (le chiffre 5 n'est pas le premier caractre) ' Incorrect (les espaces sont interdits) ' Incorrect (les lettres comme et sont interdites) ' Incorrect (le premier caractre ne peut pas tre un chiffre) ' Incorrect (les virgules et les points sont interdits)

Chapitre 2 Le langage de StarOffice Basic 19

Utilisation des variables


Dclaration de variable implicite
Les langages Basic sont conus pour tre simples d'emploi. Par consquent, StarOffice Basic permet de crer une variable simplement en l'utilisant et sans avoir la dclarer explicitement. En d'autres termes, une variable existe ds que vous l'intgrez dans le code. En fonction des variables dj prsentes, l'extrait de code suivant peut dclarer jusqu' trois nouvelles variables :
a = b + c

La dclaration implicite de variables n'est pas une bonne pratique et peut amener introduire involontairement de nouvelles variables, par exemple en faisant une faute de frappe. Au lieu de gnrer un message d'erreur, l'interprteur se contente d'initialiser une nouvelle variable correspondant la faute de frappe avec une valeur de 0. Les erreurs de ce type peuvent tre assez difficiles reprer dans le code

Dclaration de variable explicite


Afin d'viter les erreurs dues la dclaration implicite des variables, StarOffice Basic propose une option nomme :
Option Explicit

Celle-ci doit tre indique dans la premire ligne de code de chaque module et assure qu'un message d'erreur sera mis chaque fois qu'une variable sera utilise sans avoir t dclare au pralable. L'option Option Explicit doit se trouver dans tous les modules Basic. La forme la plus simple pour la dclaration explicite d'une variable est la suivante :
Dim MyVar

Cet exemple dclare une variable portant le nom MyVar et de type variant. Une variable de type variant est une variable universelle pouvant contenir tout type de valeur, comme des chanes de caractres, des nombres entiers, des nombres virgule flottante et des valeurs logiques. Voici quelques exemples de variables de type Variant :
MyVar = "Hello World" MyVar = 1 MyVar = 1.0 MyVar = True ' Assignation d'une chane de caractres ' Assignation d'un nombre entier ' Assignation d'un nombre virgule flottante ' Assignation d'une valeur logique

Les variables dclares ci-dessus peuvent mme tre employes pour contenir diffrents types de variables l'intrieur d'un mme programme. Mme si ce dernier point procure une grande souplesse, mieux vaut restreindre une variable un type unique. Lorsque StarOffice Basic rencontre un type de variable dfinie de faon incorrecte pour un contexte particulier, il gnre un message d'erreur.

20 StarOffice 7 Manuel de programmation Basic

Utilisez la syntaxe suivante pour dclarer une variable associe un type particulier :
Dim MyVar As Integer ' Dclaration d'une variable du type entier

La variable est dclare en tant qu'entier et peut contenir des valeurs numriques entires. Vous avez galement la possibilit d'utiliser la syntaxe suivante pour dclarer une variable de type entier :
Dim MyVar% ' Dclaration d'une variable du type entier

L'instruction Dim peut enregistrer plusieurs dclarations de variable :


Dim MyVar1, MyVar2

Pour assigner aux variables un type permanent, vous devez procder sparment pour chacune :
Dim MyVar1 As Integer, MyVar2 As Integer

Si vous ne spcifiez pas de type pour une variable, StarOffice Basic considre qu'elle est de type variant. Par exemple, dans la dclaration de variable suivante, MyVar1 est de type variant et MyVar2 de type entier :
Dim MyVar1, MyVar2 As Integer

Les sections suivantes dressent la liste des types de variables disponibles dans StarOffice Basic et indiquent la faon de les utiliser et de les dclarer.

Chanes
Les chanes constituent, avec les nombres, les types de base les plus importants de StarOffice Basic. Une chane est constitue d'une suite de caractres conscutifs. L'ordinateur stocke les chanes en interne sous forme d'une suite de nombres, o chacun correspond un caractre particulier.

Depuis un jeu de caractres ASCII vers Unicode


Les jeux de caractres tablissent une correspondance entre les diffrents caractres d'une chane et des codes (des chiffres et des caractres) dans une table, dcrivant la faon dont l'ordinateur doit afficher la chane sur un cran ou une imprimante.

Le jeu de caractres ASCII


Le jeu de caractres ASCII est un ensemble de codes reprsentant les chiffres, les caractres et les symboles spciaux sur un octet. Les codes ASCII de 0 127 reprsentent l'alphabet et des symboles courants (comme les points, les virgules et les parenthses) ainsi que certains caractres de contrle spciaux pour l'affichage l'cran ou l'impression. Le jeu de caractres ASCII est couramment utilis comme format standard pour l'change de donnes texte entre ordinateurs. Cependant, il manque notamment ce jeu toute une plage de caractres spciaux employs en Europe, comme , et , ainsi que d'autres formats de caractres, comme l'alphabet cyrillique.

Chapitre 2 Le langage de StarOffice Basic 21

Le jeu de caractres ANSI


Microsoft a utilis pour son produit Windows le jeu de caractres ANSI (American National Standards Institute) qui a t peu peu tendu pour inclure les caractres absents du jeu de caractres ASCII.

Pages de code
Les jeux de caractres ISO 8859 constituent le standard international longtemps attendu. Les 128 premiers caractres du jeu ISO correspondent au jeu de caractres ASCII. Le standard ISO apporte de nouveaux jeux de caractres (pages de code ) afin de pouvoir afficher correctement un plus grand nombre de langues. Cela a cependant pour rsultat qu'une mme valeur peut reprsenter diffrents caractres dans diffrentes langues.

Unicode
Unicode augmente la longueur d'un caractre quatre octets et combine diffrents jeux de caractres afin de crer un standard permettant de reprsenter autant de langues que possible. La version 2.0 d'Unicode est prsent supporte par de nombreux programmes, dont StarOffice et StarOffice Basic.

22 StarOffice 7 Manuel de programmation Basic

Variables chanes
StarOffice Basic enregistre les chanes sous forme de variables chanes de caractres Unicode. Une variable chane de caractres peut contenir jusqu' 65 535 caractres. En interne, StarOffice Basic enregistre la valeur Unicode associe chaque caractre. La mmoire de travail ncessaire pour une variable chane de caractres dpend de la longueur de celle-ci. Exemple de dclaration d'une variable chane de caractres :
Dim Variable As String

Vous pouvez galement crire cette dclaration sous la forme :


Dim Variable$

Lorsque vous portez des applications VBA, assurez-vous que la longueur maximum pour les chanes de caractres autorise dans StarOffice Basic est bien respecte (65 535 caractres).

Spcification de chanes explicites


Pour assigner une chane explicite une variable chane de caractres, placez la chane entre guillemets (").
Dim MyString As String MyString = " Ceci est un test"

Pour rpartir une chane sur deux lignes, ajoutez un signe plus la fin de la premire :
Dim MyString As String MyString = "Cette chane est si longue qu'elle" + _ "a t rpartie sur deux lignes."

Pour insrer un guillemet (") dans une chane, saisissez-en deux conscutifs l'endroit voulu :
Dim MyString As String MyString = "un ""-quotation mark." ' produit un "-guillemet

Chapitre 2 Le langage de StarOffice Basic 23

Nombres
StarOffice Basic supporte cinq types de base pour traiter les nombres :

Nombre entier Nombre entier long Nombre virgule flottante Double Monnaie

Variables de type entier


Les variables de type entier (integer) peuvent stocker n'importe quel nombre entier compris entre -32 768 et 32 767. Un entier peut occuper deux octets de mmoire au maximum. Le symbole de dclaration de type pour une variable de type entier est le signe %. Les calculs utilisant des variables entires sont trs rapides et particulirement utiles pour les compteurs de boucles. Si vous assignez un nombre virgule flottante une variable de type entier long, le nombre est arrondi par excs ou par dfaut au nombre entier le plus proche. Exemples de dclaration pour des variables entires :
Dim Variable As Integer Dim Variable%

Variables de type entier long


Les variables de type entier long (long) peuvent stocker tout nombre entier compris entre -2 147 483 648 et 2 147 483 647 et peuvent occuper quatre octets de mmoire au maximum. Le symbole de dclaration de type pour un entier long est le signe &. Les calculs utilisant des variables entires longues sont trs rapides et particulirement utiles pour les compteurs de boucles. Si vous affectez un nombre virgule flottante une variable entire, le nombre est arrondi par excs ou par dfaut au nombre entier le plus proche. Exemples de dclaration pour des variables de type entier long :
Dim Variable as Long Dim Variable&

24 StarOffice 7 Manuel de programmation Basic

Variables de type simple


Les variables de type simple (single) peuvent stocker n'importe quel nombre virgule flottante positif ou ngatif, compris entre 3,402823 x 1038 et 1,401298 x 10-45. Une variable de type simple peut occuper quatre octets de mmoire au maximum. Le symbole de dclaration de type pour une variable de type simple est !. l'origine, les variables de type simple servaient rduire le temps de calcul exig par les variables doubles, plus prcises. Cependant, ces considrations de rapidit ne sont plus vraiment pertinentes, ce qui rduit l'intrt des variables de type simple. Exemples de dclaration pour des variables simples :
Dim Variable as Single Dim Variable!

Variables de type double


Les variables de type double peuvent stocker n'importe quel nombre virgule flottante positif ou ngatif et compris entre 1,79769313486232 x 10308 et 4,94065645841247 x 10-324. Une variable de type double peut occuper huit octets de mmoire au maximum. Les variables doubles peuvent tre utilises pour des calculs prcis. Le symbole de dclaration de type est le signe #. Exemples de dclarations de variables doubles :
Dim Variable As Double Dim Variable#

Variables montaires
Les variables montaires (currency) diffrent des autres types de variables par la manire dont elles grent les valeurs. Le signe dcimal est fixe et suivi de quatre dcimales. La variable peut compter jusqu' 15 chiffres pour sa partie entire. Une variable montaire peut stocker n'importe quelle valeur comprise entre 922 337 203 685 477,5808 et +922 337 203 685 477,5807 et peut occuper huit octets de mmoire au maximum. Le symbole de dclaration de type pour une variable montaire est @. Les variables montaires sont surtout destines aux calculs financiers qui gnrent des erreurs d'arrondi imprvisibles dues l'emploi de nombres virgule flottante. Exemples de dclaration de variables montaires :
Dim Variable As Currency Dim Variable@

Spcification de nombres explicites


Les nombres peuvent tre reprsents de diffrentes manires, par exemple au format dcimal ou en notation scientifique, voire dans une base diffrente du systme dcimal. Les rgles suivantes s'appliquent aux caractres numriques dans StarOffice Basic :

Chapitre 2 Le langage de StarOffice Basic 25

Nombres entiers
La mthode la plus simple consiste utiliser des nombres entiers. Ils sont reprsents dans le texte source, sans espace pour sparer le chiffre des milliers :
Dim A As Integer Dim B As Float A = 1210 B = 2438

Les nombres peuvent tre prcds d'un signe plus (+) ou moins (-) (avec ou sans espace entre) :
Dim A As Integer Dim B As Float A = + 121 B = - 243

Nombres dcimaux
Lorsque vous saisissez un nombre dcimal, sparez la partie entire de la partie dcimale l'aide d'un point (.). Cette rgle permet de garantir que les textes sources peuvent tre transfrs d'un pays un autre sans conversion.
Dim A As Integer Dim B As Integer Dim C As Float A = 1223.53 B = - 23446.46 C = + 3532.76323 ' est arrondi ' est arrondi

Vous pouvez utiliser les signes (+) ou moins (-) comme prfixes aux nombres dcimaux (ici aussi, avec ou sans espace). Si vous assignez un nombre dcimal une variable entire, StarOffice Basic l'arrondit par excs ou par dfaut.

26 StarOffice 7 Manuel de programmation Basic

Notation exponentielle
StarOffice Basic permet d'crire les nombres en notation exponentielle ; vous pouvez par exemple crire 1.5e-10 pour reprsenter le nombre 1,5 10-10 (0,00000000015). La lettre "e" peut tre majuscule ou minuscule et prcde ou non d'un signe plus (+). Voici quelques exemples corrects et incorrects de nombres au format exponentiel :
Dim A As Double A = 1.43E2 A = + 1.43E2 A = - 1.43E2 A = 1.43E-2 A = 1.43E -2 A = 1,43E-2 dcimale) A = 1.43E2.2 ' Incorrect (l'exposant doit tre un nombre entier) ' Correct ' Correct (un espace entre le signe plus et le nombre de base) ' Correct (un espace entre le signe moins et le nombre de base) ' Correct (exposant ngatif) ' Incorrect (les espaces sont interdits l'intrieur des nombres) ' Incorrect (les virgules sont interdites pour sparer la partie

Notez que le premier et le troisime exemples incorrects ne gnrent aucun message d'erreur, bien qu'ils renvoient des valeurs incorrectes. L'expression
A = 1.43E -2

est interprte comme 1,43 moins 2, soit 0,57. Cependant, le rsultat attendu tait 1,43 * 10-2 (soit 0,0143). Dans la valeur
A = 1.43E2.2

StarOffice Basic ignore la partie de l'exposant aprs le point et considre l'expression comme tant
A = 1.43E2

Valeurs hexadcimales
Le systme hexadcimal (base 16) prsente l'avantage de pouvoir faire correspondre un octet deux chiffres exactement. Ceci permet de grer les nombres d'une manire refltant plus fidlement l'architecture de la machine. Dans le systme hexadcimal, les nombres sont reprsents au moyen des chiffres de 0 9 et des lettres de A F. La lettre A correspond au nombre 10 en dcimal et la lettre F au nombre 15. Pour utiliser des valeurs hexadcimales pour les nombres entiers dans StarOffice Basic, il vous suffit de les faire prcder par &H.
Dim A As Longer A = &HFF A = &H10 ' La valeur hexadcimale FF correspond la valeur dcimale 255 ' La valeur hexadcimale 10 correspond la valeur dcimale 16

Chapitre 2 Le langage de StarOffice Basic 27

Valeurs octales
StarOffice Basic comprend galement le systme octal (base 8), qui utilise les chiffres de 0 7 et dont les nombres sont prcds par &O.
Dim A As Longer A = &O77 A = &O10 ' La valeur octale 77 correspond la valeur dcimale 63 ' La valeur octale 10 correspond la valeur dcimale 8

Vrai et faux
Variables logiques
Les variables logiques ne peuvent prendre qu'une des deux valeurs suivantes : True (vrai) et False (faux). Elles sont bien adaptes aux spcifications binaires qui ne peuvent avoir que deux tats. Une valeur logique est enregistre en interne sous forme d'entier sur deux octets, 0 correspondant False et toute autre valeur True. Il n'existe pas de symbole de dclaration de type pour les variables logiques. La dclaration ne peut se faire qu'en utilisant la mention supplmentaire As Boolean. Exemple de dclaration d'une variable logique :
Dim Variable As Boolean

Dtails sur la date et l'heure


Variables de date
Les variables de date peuvent contenir des valeurs de date et d'heure. Lorsqu'il enregistre des valeurs de date, StarOffice Basic emploie un format interne permettant d'effectuer des comparaisons et des oprations mathmatiques sur les heures et les dates. Il n'existe pas de symbole de dclaration de type pour les variables de date. La dclaration ne peut se faire qu'en utilisant la mention supplmentaire As Date . Exemple de dclaration d'une variable de date :
Dim Variable As Date

28 StarOffice 7 Manuel de programmation Basic

Champs de donnes
En plus des variables simples (scalaires), StarOffice Basic supporte galement les champs de donnes (matrices). Un champ de donnes contient plusieurs variables adresses au moyen d'un indice.

Matrices simples
Une dclaration de matrice est similaire celle d'une variable simple, mais le nom de la matrice est suivi de parenthses contenant une indication du nombre de ses lments. L'expression
Dim MyArray(3)

dclare une matrice de quatre variables de type variant, savoir MyArray(0), MyArray(1), MyArray(2) et MyArray(3). Vous pouvez galement dclarer des variables d'un type spcifique dans une matrice ; par exemple, la ligne suivante dclare une matrice contenant quatre variables entires :
Dim MyInteger(3) As Integer

Dans les exemples prcdents, l'indice de la matrice commence toujours par la valeur initiale standard de zro. Il est galement possible de spcifier une plage de validit avec des valeurs initiale et finale pour la dclaration du champ de donnes. L'exemple suivant dclare un champ de donnes comprenant six valeurs entires, pouvant tre adresses par des valeurs d'indice de 5 10:
Dim MyInteger(5 To 10)

Les valeurs d'indice ne doivent pas forcment tre positives. L'exemple suivant montre une dclaration galement correcte, mais avec des limites ngatives pour le champ de donnes.
Dim MyInteger(-10 To -5)

Il dclare un champ de donnes d'entiers comprenant 6 valeurs, pouvant tre adresses par des valeurs d'indice allant de -10 -5. Il y a trois limites respecter lorsque vous dfinissez des valeurs d'indice pour un champ de donnes :

La valeur d'indice minimum est de -32 768. La valeur d'indice maximum est de 32 767. Le nombre maximum d'lments (pour une dimension de champ de donnes) est de 16 368.
D'autres limites peuvent s'appliquer aux valeurs d'indice pour les champs de donnes dans VBA. La mme considration s'applique galement aux nombres maximum d'lments possibles par dimension. Vous trouverez les valeurs qui s'appliquent ici dans la documentation VBA approprie.

Chapitre 2 Le langage de StarOffice Basic 29

Valeur spcifique pour l'indice de dbut


Gnralement l'indice de dbut d'un champ de donnes est 0, mais vous pouvez changer cette valeur par dfaut en 1 pour toutes les dclarations de champ de donnes grce l'appel :
Option Base 1

Cet appel doit tre inclus dans l'en-tte d'un module si vous voulez qu'il s'applique l'ensemble des dclarations de matrice du module. Cependant, cet appel n'affecte pas les squences UNO dfinies par l'API StarOffice dont l'indice commence toujours 0. Pour plus de clart, vitez d'utiliser Option Base 1. Option Base 1 se contente de modifier la valeur d'indice de dbut et n'affecte pas le nombre d'lments d'une matrice. La dclaration
Option Base 1 ' ... Dim MyInteger(3)

cre 4 variables entires qui peuvent tre dsignes par les expressions MyInteger(1), MyInteger(2), MyInteger(3) et MyInteger(4).
Dans StarOffice Basic, l'expression Option Base 1 n'affecte pas le nombre d'lments d'une matrice, contrairement ce qui se produit dans VBA. Dans StarOffice Basic, seul l'indice de dbut est modifi. Alors que la dclaration MyInteger(3) cre trois valeurs entires dans VBA avec des valeurs d'indice de 1 3, la mme dclaration dans StarOffice Basic cre quatre valeurs entires avec des valeurs d'indice de 1 4.

Champs de donnes multidimensionnels


En plus des champs de donnes unidimensionnels, StarOffice Basic supporte galement les champs de donnes multidimensionnels. Les diffrentes dimensions sont spares les unes des autres par des virgules. L'exemple
Dim MyIntArray(5, 5)

dfinit une matrice d'entiers deux dimensions, comportant chacune six valeurs (pouvant tre adresses par les valeurs d'indice de 0 5). La matrice peut stocker un total de 6 6 = 36 valeurs entires. Bien que vous puissiez dfinir des matrices ayant des centaines de dimensions dans StarOffice Basic, en pratique ce nombre est limit par la quantit de mmoire dont vous disposez.

Modifications dynamiques des dimensions des champs de donnes


Les exemples ci-dessus utilisent des champs de donnes ayant une dimension dfinie. Vous pouvez galement dfinir des matrices dont la dimension des champs de donnes change de faon dynamique. Vous pouvez par exemple dfinir une matrice pour contenir tous les mots d'un texte commenant par la lettre A. Comme le nombre de ces mots n'est pas connu au dpart, vous devez

30 StarOffice 7 Manuel de programmation Basic

pouvoir modifier les limites du champ par la suite. Pour effectuer cette opration dans StarOffice Basic, utilisez l'appel suivant :
ReDim MyArray(10)

Contrairement VBA, o vous ne pouvez dimensionner que les matrices dynamiques avec Dim MyArray(), StarOffice Basic vous permet de modifier les matrices statiques comme les dynamiques grce ReDim.

L'exemple suivant modifie la dimension de la matrice initiale pour qu'elle puisse stocker 11 ou 21 valeurs :
Dim MyArray(4) As Integer ' ... ReDim MyArray(10) As Integer ' ... ReDim MyArray(20) As Integer ' Passe 21 lments ' Passe 11 lments ' Dclaration pour cinq lments

Lorsque vous redfinissez les dimensions d'une matrice, vous pouvez utiliser chacune des options prsentes dans les sections prcdentes. Cela comprend notamment les dclarations de champs de donnes multidimensionnels et les spcifications explicites de valeurs d'indice de dbut et de fin. Lors de la modification des dimensions d'un champ de donnes, tout son contenu est perdu . Pour conserver les valeurs d'origine, utilisez la commande Preserve :
Dim MyArray(10) As Integer ' Dfinit les dimensions ' initiales ' ... ReDim Preserve MyArray(20) As Integer ' Augmente la taille du ' champ de donnes, tout en ' prservant le contenu

Lorsque vous utilisez Preserve, assurez-vous que le nombre de dimensions et que le type de variable restent les mmes.
Contrairement VBA, o seule la limite suprieure de la dernire dimension peut tre modifie lorsque vous utilisez Preserve, StarOffice Basic vous permet de modifier galement les autres dimensions.

Si vous utilisez ReDim avec Preserve, vous devez utiliser le mme type de donnes que celui indiqu lors de la dclaration initiale du champ de donnes.

Porte et dure de vie des variables


Une variable dans StarOffice Basic est pourvue d'une dure de vie limite ainsi que d'une porte limite, qui dtermine les autres parties de programme pouvant la lire et l'utiliser. La dure pendant
Chapitre 2 Le langage de StarOffice Basic 31

laquelle une variable est conserve ainsi que les endroits depuis lesquels il est possible d'y accder dpendent de son emplacement et de son type.

Variables locales
Les variables dclares dans une fonction ou une procdure sont appeles variables locales :
Sub Test Dim MyInteger As Integer ' ... End Sub

Les variables locales ne restent valides que durant l'excution de la fonction ou de la procdure et sont ensuite rinitialises zro. chaque nouvel appel de la fonction, les valeurs gnres prcdemment ne sont plus disponibles. Pour conserver les valeurs prcdentes, vous devez dfinir la variable comme statique :
Sub Test Static MyInteger As Integer ' ... End Sub

Contrairement VBA, StarOffice Basic s'assure que le nom d'une variable locale n'est pas utilis simultanment comme nom de variable globale et prive dans l'en-tte du module. Lorsque vous portez une application VBA vers StarOffice Basic, vous devez modifier tous les noms de variable dupliqus.

32 StarOffice 7 Manuel de programmation Basic

Variables du domaine public


Les variables du domaine public sont dfinies dans la section d'en-tte d'un module par le mot-cl Dim. Ces variables sont accessibles tous les modules de leur bibliothque : Module A :
Dim A As Integer Sub Test Flip Flop End Sub Sub Flip A = A + 1 End Sub

Module B :
Sub Flop A = A - 1 End Sub

La valeur de la variable A n'est pas modifie par la fonction Test, mais est augmente de un dans la fonction Flip et diminue de un dans la fonction Flop. Ces deux modifications de la variable sont globales. Vous pouvez galement employer le mot-cl Public la place de Dim pour dclarer une variable du domaine public :
Public A As Integer

Une variable du domaine public n'est accessible que durant l'excution de la macro associe et est ensuite rinitialise.

Variables globales
Du point de vue de leur fonction, les variables globales sont semblables aux variables du domaine public, si ce n'est que leurs valeurs sont conserves mme aprs l'excution de la macro associe. Les variables globales sont dclares dans la section d'en-tte d'un module avec le mot-cl Global :
Global A As Integer

Chapitre 2 Le langage de StarOffice Basic 33

Variables prives
Les variables prives ne sont accessibles que dans le module l'intrieur duquel elles ont t dfinies. Utilisez le mot-cl Private pour dfinir la variable :
Private MyInteger As Integer

Si plusieurs modules contiennent chacun une variable prive portant le mme nom, StarOffice Basic cre une variable diffrente pour chaque occurrence du nom. Dans l'exemple suivant, les deux modules A et B possdent une variable prive nomme C. La fonction Test commence par dfinir la variable prive dans le module A puis dfinit la variable prive dans le module B. Module A :
Private C As Integer Sub Test SetModuleA SetModuleB ShowVarA ShowVarB End Sub Sub SetmoduleeA A = 10 End Sub Sub ShowVarA MsgBox C End Sub ' Affiche la variable C du module A. ' Dfinit la variable C du module A ' Dfinit la variable C du module B ' Affiche la variable C du module A (= 10) ' Affiche la variable C du module B (= 20)

Module B :
Private C As Integer Sub SetModuleB A = 20 End Sub Sub ShowVarB MsgBox C End Sub ' Affiche la variable C du module B.

34 StarOffice 7 Manuel de programmation Basic

Constantes
Dans StarOffice Basic, utilisez le mot-cl Const pour dclarer une constante.
Const A = 10

Si vous le souhaitez, vous pouvez aussi prciser le type de la constante dans la dclaration
Const B As Double = 10

Oprateurs
StarOffice Basic comprend les oprateurs mathmatiques, logiques et de comparaison courants.

Oprateurs mathmatiques
Les oprateurs mathmatiques s'appliquent tous les types de nombres, alors que l'oprateur + peut galement servir relier des chanes de caractres. + * / \ ^ MOD Addition de nombres et de valeurs de date, liaison de chanes Soustraction de nombres et de valeurs de date Multiplication de nombres Division de nombres Division de nombres avec un rsultat entier (arrondi) lvation de nombres une puissance Modulo (calcule le reste d'une division)

Oprateurs logiques
Les oprateurs logiques vous permettent de lier des lments selon les rgles de l'algbre de Boole. Si les oprateurs sont appliqus des valeurs logiques, la liaison fournit directement le rsultat voulu. S'ils sont utiliss en combinaison avec des entiers ou des entiers longs, la liaison est ralise au niveau des bits. AND OR XOR NOT EQV IMP Et logique Ou logique Ou exclusif logique Ngation Test d'quivalence (les deux parties valent True ou False) Implication (si la premire expression est vraie, alors la seconde doit l'tre galement)

Chapitre 2 Le langage de StarOffice Basic 35

Oprateurs de comparaison
Les oprateurs de comparaison peuvent s'appliquer tous les types de variables lmentaires (nombres, dates, chanes et valeurs logiques). = <> > >= < <= galit de nombres, de dates et de chanes Ingalit de nombres, de dates et de chanes Suprieur pour les nombres, les dates et les chanes Suprieur ou gal pour les nombres, les dates et les chanes Infrieur pour les nombres, les dates et les chanes Infrieur ou gal pour les nombres, les dates et les chanes

StarOffice Basic ne supporte pas l'oprateur de comparaison VBALike.

Instructions conditionnelles
Utilisez des instructions conditionnelles pour n'excuter un bloc de code que lorsqu'une condition particulire est remplie.

If...Then...Else
L'instruction conditionnelle la plus courante est l'instruction If comme le montre l'exemple suivant :
If A > 3 Then B = 2 End If

L'assignation B = 2 ne se produit que si la valeur de la variable A est suprieure trois. La clause If/Else est une variante de l'instruction If :
If A > 3 Then B = 2 Else B = 0 End If

Dans cet exemple, la variable B reoit la valeur 2 si A est suprieur 3, sinon B reoit la valeur 0.

36 StarOffice 7 Manuel de programmation Basic

Pour les situations plus complexes, vous pouvez imbriquer plusieurs instructions If , par exemple :
If A = 0 Then B = 0 ElseIf A < 3 Then B = 1 Else B = 2 End If

Si la valeur de la variable A vaut zro, B reoit la valeur 0. Si A est infrieur 3 (mais diffrent de zro), alors B reoit la valeur 1. Dans tous les autres cas (c'est--dire si A est suprieur ou gal 3), B reoit la valeur 2.

Select...Case
L'instruction Select...Case constitue une alternative l'imbrication des instructions If et sert dans les cas o vous dsirez employer une mme variable pour plusieurs conditions :
Select Case DayOfWeek Case 1: NameOfWeekday = "Dimanche" Case 2: NameOfWeekday = "Lundi" Case 3: NameOfWeekday = "Mardi" Case 4: NameOfWeekday = "Mercredi" Case 5: NameOfWeekday = "Jeudi" Case 6: NameOfWeekday = "Vendredi" Case 7: NameOfWeekday = "Samedi" End Select

Dans cet exemple, chaque nom d'un jour de la semaine correspond un nombre, de telle manire que la variable DayOfWeek reoit la valeur 1 pour Dimanche, 2 pour Lundi, et ainsi de suite.

Chapitre 2 Le langage de StarOffice Basic 37

La commande Select n'est pas limite aux correspondances directes vous pouvez galement utiliser des oprateurs de comparaison ou des listes d'expressions dans un embranchement Case. L'exemple suivant dresse la liste des variantes les plus importantes de la syntaxe :
Select Case Var Case 1 To 5 ' ... Var est compris entre les nombres 1 et 5 Case 6, 7, 8 ' ... Var vaut 6, 7 ou 8 Case Var > 8 And Var < 11 ' ... Var est suprieur 8 et infrieur 11 Case Else ' ... tous les autres cas End Select

Boucles
Une boucle rpte l'excution d'un bloc de code un nombre de fois donn. Vous pouvez galement avoir des boucles se rptant indfiniment.

For...Next
La boucle For...Next effectue un nombre de passages dtermin. Le compteur de la boucle dfinit le nombre de fois qu'elle sera rpte. Dans l'exemple suivant,
Dim I For I = 1 To 10 ' ... Next I Corps de la boucle

la variable I est le compteur de la boucle, avec une valeur initiale de 1. Le compteur est incrment de 1 chaque passage. Lorsque la variable I vaut 10, la boucle s'arrte.

38 StarOffice 7 Manuel de programmation Basic

Pour que le compteur de la boucle soit incrment d'une autre valeur que 1 chaque passage, utilisez la fonction Step :
Dim I For I = 1 To 10 Step 0.5 ' ... Corps de la boucle Next I

Dans l'exemple ci-dessus, le compteur est incrment de 0,5 la fin de chaque passage, et la boucle est excute 19 fois. Vous pouvez utiliser galement des valeurs de pas ngatives :
Dim I For I = 10 To 1 Step -1 ' ... Corps de la boucle Next I

Dans cet exemple, le compteur commence 10 et dcrot de 1 chaque passage jusqu' atteindre la valeur 1. L'instruction Exit For permet de sortir d'une boucle For prmaturment. Dans l'exemple suivant, la boucle se termine au cinquime passage :
Dim I For I = 1 To 10 If I = 5 Then Exit For End If ' ... Corps de la boucle Next I

La variante For Each...Next de VBA n'est pas supporte par StarOffice Basic.

Chapitre 2 Le langage de StarOffice Basic 39

Do...Loop
L'instruction Do...Loop n'est pas lie un nombre de passages fixe. En revanche, la boucle Do...Loop est rpte jusqu' ce qu'une certaine condition soit remplie. Il existe quatre variantes de la boucle Do...Loop (dans les exemples suivants, A > 10 reprsente une condition quelconque) : 1. La variante Do While...Loop
Do While A > 10 ' ... corps de la boucle Loop

vrifie si la condition est toujours remplie avant chaque passage et n'excute la boucle que si c'est effectivement le cas. 2. La variante Do Until...Loop
Do Until A > 10 ' ... corps de la boucle Loop

excute la boucle jusqu' ce que la condition ne soit plus remplie. 3. La variante Do...Loop While
Do ' ... corps de la boucle Loop While A > 10

ne vrifie la condition qu'aprs le premier passage dans la boucle et s'arrte si elle est remplie . 4. La variante Do...Loop Until
Do ' ... corps de la boucle Loop Until A > 10

vrifie aussi la condition aprs le premier passage, mais excute la boucle jusqu' ce que la condition ne soit plus remplie. Tout comme la boucle For...Next , la boucle Do...Loop dispose d'une commande de fin prmature. La commande Exit Do peut interrompre une boucle n'importe quel endroit.
Do If A = 4 Then Exit Do End If ' ... corps de la boucle While A > 10

40 StarOffice 7 Manuel de programmation Basic

Exemple de programme : tri l'aide de boucles imbriques


Il existe de nombreux types d'utilisation des boucles, par exemple pour rechercher dans des listes, renvoyer des valeurs ou excuter des tches mathmatiques complexes. L'exemple suivant prsente un algorithme utilisant des boucles pour trier une liste par nom.
Sub Sort Dim Entry(1 To 10) As String Dim Count As Integer Dim Count2 As Integer Dim Temp As String Entry(1) = "Patrick" Entry(2) = "Kurt" Entry(3) = "Thomas" Entry(4) = "Michel" Entry(5) = "David" Entry(6) = "Catherine" Entry(7) = "Suzanne" Entry(8) = "Eddy" Entry(9) = "Christine" Entry(10) = "Jean" For Count = 1 To 10 For Count2 = Count + 1 To 10 If Entry(Count) > Entry(Count2) Then Temp = Entry(Count) Entry(Count) = Entry(Count2) Entry(Count2) = Temp End If Next Count2 Next Count For Count = 1 To 10 Print Entry(Count) Next Count End Sub

Les valeurs sont interverties deux par deux plusieurs fois, jusqu' ce qu'elles se trouvent classes par ordre croissant. Comme des bulles, les variables remontent peu peu vers la bonne position. Pour cette raison, cet algorithme est connu sous le nom de tri bulles.

Chapitre 2 Le langage de StarOffice Basic 41

Procdures et fonctions
Les procdures et les fonctions sont les lments centraux de la structure d'un programme. Elles forment le cadre permettant de diviser un problme complexe en diffrentes sous-tches.

Procdures
Une procdure excute une action sans fournir de valeur explicite. Sa syntaxe est
Sub Test ' ... ici se trouve le code de la procdure proprement parler End Sub

L'exemple dfinit une procdure nomme Test contenant du code accessible depuis n'importe quel endroit du programme. L'appel se fait en insrant le nom de la procdure l'endroit adapt du programme :
Test

Fonctions
Une fonction, tout comme une procdure, regroupe un bloc d'instructions excuter en une unit logique. Cependant, contrairement une procdure, une fonction renvoie une valeur de retour.
Function Test ' ... ici se trouve le code de la fonction proprement parler Test = 123 End Function

La valeur de retour est assigne par une simple affectation. L'assignation ne doit pas forcment tre place la fin de la fonction, mais peut au contraire se trouver n'importe o l'intrieur de celle-ci. La fonction ci-dessus peut tre appele l'intrieur du programme de la faon suivante :
Dim A A = Test

Le code dfinit une variable A et lui assigne le rsultat de la fonction Test.

42 StarOffice 7 Manuel de programmation Basic

La valeur de retour peut tre crase plusieurs fois l'intrieur de la fonction. Comme dans le cas d'une assignation de variable classique, la fonction renvoie la valeur qui lui a t assigne en dernier.
Function Test Test = 12 ' ... Test = 123 End Function

Dans cet exemple, la valeur de retour de la fonction est 123. Si une affectation est interrompue, la fonction renvoie une valeur zero (le nombre 0 pour les valeurs numriques et une chane vide pour les chanes de caractres). La valeur de retour d'une fonction peut tre de n'importe quel type. Le type se dclare de la mme manire que pour une variable :
Function Test As Integer ' ... ici se trouve le code de la fonction proprement parler End Function

Si l'indication d'une valeur explicite est interrompue, la valeur de retour sera de type variant.

Interruption prmature d'une procdure et d'une fonction


Dans StarOffice Basic, vous pouvez utiliser les commandes Exit Sub et Exit Function pour terminer prmaturment une procdure ou une fonction, par exemple pour grer une erreur. Ces commandes interrompent la procdure ou la fonction et retournent au programme principal l'endroit d'o elle avait t appele. L'exemple suivant montre une procdure s'interrompant lorsque la variable ErrorOccured prend la valeur True.
Sub Test Dim ErrorOccured As Boolean ' ... If ErrorOccured Then Exit Sub End If ' ... End Sub

Chapitre 2 Le langage de StarOffice Basic 43

Passage de paramtres
Les fonctions et les procdures peuvent recevoir un ou plusieurs paramtres. Les paramtres essentiels doivent tre indiqus entre parenthses aprs le nom de la fonction ou de la procdure. L'exemple
Sub Test (A As Integer, B As String) End Sub

dfinit une procdure qui attend une valeur entire A et une chane B comme paramtres. Les paramtres sont normalement passs par rfrence dans StarOffice Basic. Les modifications apportes aux variables sont conserves lorsque la procdure ou la fonction se termine :
Sub Test Dim A As Integer A = 10 ChangeValue(A) ' Le paramtre A vaut prsent 20 End Sub Sub ChangeValue(TheValue As Integer) TheValue = 20 End Sub

Dans cet exemple, la valeur A dfinie dans la fonction Test est transmise comme paramtre la fonction ChangeValue. La valeur est ensuite change 20 et passe TheValue, qui est conserve lorsque la fonction se termine. Vous pouvez galement passer un paramtre par valeur si vous ne souhaitez pas que les modifications effectues par la suite sur le paramtre affectent sa valeur d'origine. Pour indiquer qu'un paramtre doit tre pass par valeur, assurez-vous que le mot-cl ByVal prcde la dclaration de la variable dans l'en-tte de la fonction. Dans l'exemple prcdent, si nous remplaons la fonction ChangeValue par la fonction
Sub ChangeValue(ByVal TheValue As Integer) TheValue = 20 End Sub

alors la variable de niveau suprieur A n'est pas affecte par cette modification. Aprs l'appel de la fonction ChangeValue, la variable A conserve la valeur 10.
La mthode pour passer les paramtres aux procdures et aux fonctions de StarOffice Basic est littralement identique celle de VBA. Par dfaut, les paramtres sont passs par rfrence. Pour passer des paramtres par valeur, utilisez le mot-cl ByVal. Dans VBA, vous pouvez galement utiliser le motcl ByRef pour forcer le passage d'un paramtre par rfrence. StarOffice Basic ne supporte pas ce motcl, car ce comportement est dj celui par dfaut.

En principe, les fonctions et les procdures dans StarOffice Basic sont Public. Les mots-cls Public et Private utiliss dans VBA ne sont pas supports par StarOffice Basic.

44 StarOffice 7 Manuel de programmation Basic

Paramtres facultatifs
Les fonctions et les procdures ne peuvent tre appeles que si tous les paramtres ncessaires sont passs lors de l'appel. StarOffice Basic vous permet d'indiquer certains paramtres comme tant facultatifs, c'est--dire que si les valeurs correspondantes ne sont pas incluses dans l'appel, StarOffice Basic passe un paramtre vide. Dans l'exemple
Sub Test(A As Integer, Optional B As Integer) End Sub

le paramtre A est obligatoire, alors que le paramtre B est facultatif. La fonction IsMissing contrle si un paramtre a bien t pass ou s'il a t omis.
Sub Test(A As Integer, Optional B As Integer) Dim B_Local As Integer ' Vrifie si le paramtre B est bien prsent If Not IsMissing (B) Then B_Local = B Else B_Local = 0 End If ' ... Dbut de la fonction en elle-mme End Sub ' le paramtre B a t omis -> valeur par dfaut de 0 ' le paramtre B est prsent

L'exemple commence par tester si le paramtre B a bien t pass, et, le cas chant, passe le mme paramtre la variable interne B_Local. Si le paramtre correspondant a t omis, une valeur par dfaut (en l'occurrence la valeur 0) est transmise B_ Local la place du paramtre.
L'option de VBA permettant de dfinir des valeurs par dfaut pour les paramtres facultatifs n'est pas supporte par StarOffice Basic.

Le mot-cl ParamArray prsent dans VBA n'est pas support par StarOffice Basic.

Chapitre 2 Le langage de StarOffice Basic 45

Rcursivit
StarOffice Basic supporte dsormais la rcursivit. Une procdure ou une fonction rcursive a la possibilit de s'appeler elle-mme jusqu' ce qu'une condition de base soit remplie. Lorsque la fonction est appele avec cette condition de base, elle renvoie un rsultat. L'exemple suivant utilise une fonction rcursive pour calculer la factorielle des nombres 42, -42 et 3,14 :
Sub Main Msgbox CalculateFactorial( factorielle !" Msgbox CalculateFactorial( 3.14 ) factorielle !" End Sub Function CalculateFactorial( Number ) If Number < 0 Or Number <> Int( Number ) Then CalculateFactorial = "Nombre incorrect pour le calcul de factorielle !" ElseIf Number = 0 Then CalculateFactorial = 1 Else ' Voici l'appel rcursif : CalculateFactorial = Number * CalculateFactorial( Number - 1 ) Endif End Function ' Affiche "Nombre incorrect pour le calcul de 42 ) ' Affiche 1,40500611775288E+51 ' Affiche "Nombre incorrect pour le calcul de Msgbox CalculateFactorial( -42 )

L'exemple renvoie la factorielle du nombre 42 en appelant de faon rcursive la fonction CalculateFactorial jusqu' atteindre la condition de base 0! = 1.
Notez que le niveau de rcursivit dans StarOffice Basic est pour l'instant limit 500.

Traitement des erreurs


Le traitement correct des situations d'erreur est une des tches qui prennent le plus de temps lors de l'criture d'un programme. StarOffice Basic propose un large ventail d'outils simplifiant le traitement des erreurs.

L'instruction On Error
L'instruction On Error est l'lment cl de tout traitement d'erreur :
Sub Test On Error Goto ErrorHandler ' ... lance la tche au cours de laquelle une erreur est susceptible de se produire Exit Sub

46 StarOffice 7 Manuel de programmation Basic

ErrorHandler: ' ... code particulier pour le traitement de l'erreur End Sub

La ligne On Error Goto ErrorHandler dfinit la faon dont StarOffice Basic ragit en cas d'erreur. L'instruction Goto ErrorHandler indique StarOffice Basic de quitter la ligne de programme active et d'excuter le code ErrorHandler : .

La commande Resume
La commande Resume Next reprend le droulement du programme partir de la ligne suivant celle o l'erreur s'est produite, aprs l'excution du code de traitement d'erreur :
ErrorHandler: ' ... code particulier pour le traitement de l'erreur Resume Next

Utilisez la commande Resume Proceed pour indiquer le point particulier de reprise du programme aprs le traitement de l'erreur :
ErrorHandler: ' ... code particulier pour le traitement de l'erreur Resume Proceed Proceed: ' ... le programme reprend ici aprs l'erreur

Pour reprendre un programme sans afficher de message d'erreur lorsqu'une erreur se produit, utilisez le format suivant :
Sub Test On Error Resume Next ' ... accomplit la tche au cours de laquelle une erreur est susceptible de se produire End Sub

Utilisez la commande On Error Resume Next avec prcaution, car elle a un effet global. Pour plus d'informations, voir Astuces pour le traitement d'erreur structur .

Chapitre 2 Le langage de StarOffice Basic 47

Requtes portant sur les erreurs


Pour traiter une erreur, il est prcieux de disposer d'une description de celle-ci et de savoir o et pourquoi elle est survenue :

La variable Err contient le nombre d'erreurs survenues. La variable Error$ contient une description de l'erreur. La variable Erl contient le numro de la ligne o l'erreur s'est produite.

L'appel
MsgBox "Erreur " & Err & ": " & Error$ & " (line : " & Erl & ")"

montre comment afficher les informations concernant une erreur dans une fentre de message.
Alors que VBA synthtise les messages d'erreur dans un objet statistique nomm Err, StarOffice Basic propose les trois variables Err, Error$, et Erl.

Les informations de statut restent valables jusqu' ce que le programme rencontre une commande Resume ou On Error, qui les rinitialise.
En VBA, la mthode Err.Clear de l'objet Err rinitialise le statut d'erreur aprs qu'une erreur s'est produite. Dans StarOffice Basic, les commandes utilises cet effet sont On Error ou Resume.

Astuces pour le traitement d'erreur structur


La commande de dfinition On Error, tout comme la commande de retour Resume, sont des variantes de la construction Goto. Si vous souhaitez structurer proprement votre code pour viter de gnrer des erreurs lorsque vous utilisez cette construction, vitez d'utiliser des commandes de saut sans les surveiller. La plus grande prudence est recommande lors de l'utilisation de la commande On Error Resume Next car elle supprime tous les messages d'erreur ouverts. La meilleure solution consiste n'utiliser qu'une seule approche pour le traitement des erreurs l'intrieur d'un programme - sparez le traitement des erreurs du code du programme en luimme et ne revenez pas dans le code initial aprs l'apparition d'une erreur. Voici un exemple de procdure de traitement d'erreur :
Sub Example ' Dfinit un programme de traitement des erreurs au dbut de la fonction On Error Goto ErrorHandler ' ... Ici se trouve le code du programme en lui-mme ' Dsactive le traitement des erreurs On Error Goto 0

48 StarOffice 7 Manuel de programmation Basic

' Fin de l'implmentation du programme normal Exit Sub ' Dbut du traitement des erreurs ErrorHandler: ' Contrle si l'erreur tait attendue If Err = ExpectedErrorNo Then ' ... Traitement de l'erreur Else ' ... Avertissement d'erreur imprvue End If On Error Goto 0 End Sub ' Dsactive le traitement des erreurs

Cette procdure commence par la dfinition d'un programme de traitement des erreurs, suivi du code du programme en lui-mme. la fin du code du programme, le traitement d'erreur est dsactiv par l'appel On Error Goto 0 et l'implmentation de la procdure se termine par la commande Exit Sub ( ne pas confondre avec End Sub). L'exemple commence par vrifier si le numro de l'erreur correspond celui attendu (stock dans la constante imaginaire ExpectedErrorNo) puis traite l'erreur en consquence. Si une erreur diffrente se produit, le systme met un avertissement. Il est important de contrler le numro de l'erreur, de manire pouvoir dtecter les erreurs inattendues. L'appel On Error Goto 0 la fin du code rinitialise les informations sur le statut de l'erreur (le code d'erreur dans les variables systme Err) de manire qu'une erreur ultrieure puisse tre clairement identifie.

Chapitre 2 Le langage de StarOffice Basic 49

50 StarOffice 7 Manuel de programmation Basic

CHAPITRE

La bibliothque d'excution de StarOffice Basic


Les sections suivantes prsentent les fonctions centrales de la bibliothque d'excution.

Fonctions de conversion
Dans de nombreuses situations, une variable d'un certain type doit tre convertie dans un autre type.

Conversions de type implicites et explicites


La manire la plus simple de modifier le type d'une variable est d'utiliser une assignation.
Dim A As String Dim B As Integer B = 101 A = B

Dans cet exemple, la variable A est une chane de caractres, et la variable B un entier. StarOffice Basic s'assure que la variable B est convertie en chane pendant l'assignation la variable A. Cette conversion est bien plus complexe qu'il n'y parat : l'entier B est stock en mmoire de travail sous la forme d'un nombre sur deux octets. A, en revanche, est une chane de caractres, et l'ordinateur enregistre chaque caractre (chaque chiffre) dans une valeur sur un ou deux octets. Pour cela, avant de copier le contenu de B dans A, B doit tre converti au format interne de A. Contrairement la plupart des autres langages de programmation, Basic effectue ce type de conversion de manire automatique. Cependant, ceci peut avoir des consquences dsastreuses. En y regardant de prs, le code suivant
Dim A As String Dim B As Integer Dim C As Integer B = 1 C = 1 A = B + C

qui, premire vue, semble vident, se rvle en fait assez trompeur. L'interprteur Basic commence par calculer le rsultat de l'addition puis convertit celui-ci en chane, ce qui donne la chane 2.
51

Si, en revanche, l'interprteur Basic commence par convertir les valeurs de dpart B et C en chanes, puis applique l'oprateur plus au rsultat, cela produit la chane 11. Le mme principe s'applique lorsque vous utilisez des variables de type variant :
Dim A Dim B Dim C B = 1 C = "1" A = B + C

Comme les variables de type variant peuvent contenir des nombres et des chanes, il est difficile de prvoir si la variable A recevra le nombre 2 ou la chane 11. Vous pouvez viter les erreurs lies aux conversions de type implicites en vous astreignant une certaine rigueur dans la programmation, par exemple en vitant d'utiliser le type de donnes variant (comme nous l'avons dj recommand). Pour viter d'autres erreurs dues aux conversions de type implicites, StarOffice Basic propose un ventail de fonctions de conversion, que vous pouvez utiliser pour dfinir quand convertir le type des donnes d'une opration :

CStr(Var) convertit tout type de donnes en une chane de caractres. CInt(Var) convertit tout type de donnes en une valeur entire. CLng(Var) convertit tout type de donnes en une valeur entire longue. CSng(Var) convertit tout type de donnes en une valeur simple. CDbl(Var) convertit tout type de donnes en une valeur double. CBool(Var) convertit tout type de donnes en une valeur logique. CDate(Var) convertit tout type de donnes en une valeur de date.

Vous pouvez vous servir de ces fonctions de conversion pour dfinir la faon dont StarOffice Basic doit effectuer ces oprations :
Dim A As String Dim B As Integer Dim C As Integer B = 1 C = 1 A = CInt(B + C) ' B et C sont d'abord ajouts l'un l'autre, puis convertis (cela donne le nombre 2) A = CStr(B) + Cstr(C) ' B et C sont convertis en chane puis ' combins (cela donne la chane "11")

52 StarOffice 7 Manuel de programmation Basic

Au cours du premier exemple d'addition, StarOffice Basic commence par ajouter les variables entires puis convertit le rsultat en chane de caractres. A reoit la chane 2. Dans le second exemple, les variables entires sont d'abord converties en deux chanes de caractres distinctes, qui sont concatnes au cours de l'assignation. A reoit donc la chane 11. Les fonctions de conversion numriques CSng et CDbl acceptent galement les nombres dcimaux. Vous devez utiliser comme sparateur de dcimales le symbole dfini dans les paramtres nationaux correspondants. Inversement, les mthodes CStr utilisent les paramtres nationaux slectionns pour les dtails du formatage des nombres, des dates et de l'heure. La fonction Val est diffrente des mthodes Csng, Cdbl et Cstr. Elle convertit une chane en nombre, mais attend toujours un point comme sparateur de dcimales.
Dim A As String Dim B As Double A = "2.22" B = Val(A) ' Est converti correctement quels que soient les paramtres nationaux

Vrification du contenu de variables


Dans certains cas, la date ne peut tre convertie :
Dim A As String Dim B As Date A = "test" B = A ' Gnre un message d'erreur

Dans cet exemple, l'assignation de la chane test une variable de date provoque une erreur de l'interprteur. Le mme principe s'applique lorsque vous tentez d'assigner une chane une variable logique :
Dim A As String Dim B As Boolean A = "test" B = A ' Gnre un message d'erreur

L encore, l'interprteur Basic indique une erreur. Il est possible d'viter ces messages d'erreur en vrifiant le programme avant une assignation, afin de dterminer si le contenu de la variable assigner correspond au type de la variable cible. StarOffice Basic propose des fonctions de test pour accomplir ce type de tche :

IsNumeric(Value) vrifie si une valeur est un nombre. IsDate(Value) vrifie si une valeur est une date. IsArray(Value) vrifie si une valeur est une matrice.

Chapitre 3 La bibliothque d'excution de StarOffice Basic 53

Ces fonctions sont particulirement utiles lorsque vous demandez une entre utilisateur. Par exemple ,vous pouvez vrifier qu'un utilisateur a bien saisi une date ou un nombre correct.
If IsNumeric(UserInput) Then ValidInput = UserInput Else ValidInput = 0 MsgBox "Message d'erreur." End If

Dans l'exemple ci-dessus, si la variable UserInput contient une valeur numrique correcte, elle est assigne la variable ValidInput. Si UserInput ne contient pas un nombre correct, ValidInput reoit la valeur 0 et le programme met un message d'erreur. Alors qu'il existe en Basic des fonctions de test pour vrifier les nombres, les dates et les tableaux, la fonction correspondante pour les valeurs logiques manque. Il est possible cependant d'imiter cette fonctionnalit en utilisant la fonction IsBoolean :
Function IsBoolean(Value As Variant) As Boolean On Error Goto ErrorIsBoolean: Dim Dummy As Boolean Dummy = Value IsBoolean = True On Error Goto 0 Exit Sub ErrorIsBoolean: IsBoolean = False On Error Goto 0 End Function

La fonction IsBoolean dfinit une variable auxiliaire interne Dummy du type Boolean et tente de l'assigner la valeur de transfert. Si l'assignation fonctionne, la fonction renvoie True. En cas d'chec, le programme gnre une erreur d'excution, qui vite que la fonction de test ne renvoie une erreur.
Si, dans StarOffice Basic, une chane contenant une valeur qui n'est pas numrique est assigne un nombre, StarOffice Basic ne gnre pas d'erreur, mais transmet la valeur 0 la variable. Cette procdure n'est pas la mme que dans VBA. Avec ce logiciel, une erreur est gnre et l'implmentation du programme est interrompue si une assignation correspondante est excute.

54 StarOffice 7 Manuel de programmation Basic

Chanes de caractres
Utilisation des jeux de caractres
Lorsqu'il traite des chanes de caractres, StarOffice Basic emploie le jeu de caractres Unicode. Les fonctions Asc et Chr permettent d'obtenir la valeur Unicode d'un caractre ou le caractre correspondant une valeur Unicode donne. Les expressions suivantes assignent les diffrentes valeurs Unicode la variable code :
Code = Asc("A") Code = Asc("") Code = Asc("") ' Lettre latine A (valeur Unicode 65) ' Caractre Euro (valeur Unicode 8364) ' Lettre cyrillique (valeur Unicode 1083)

Inversement, l'expression
MyString = Chr(13)

permet d'initialiser la chane MyString avec la valeur correspondant au nombre 13, qui correspond un retour la ligne forc. La commande Chr est frquemment utilise dans les langages Basic pour insrer des caractres de contrle dans une chane. L'assignation
MyString = Chr(9) + "Ceci est un test" + Chr(13)

fait prcder le texte par un caractre de tabulation (valeur Unicode 9) et le fait suivre d'un retour la ligne forc (valeur Unicode 13).

Accs aux parties d'une chane


StarOffice Basic propose quatre fonctions renvoyant des parties de chane :

Left(MyString, Length) renvoie les Length premiers caractres de MyString. Right(MyString, Length) renvoie les Length derniers caractres de MyString. Mid(MyString, Start, Length) renvoie les Length premiers caractres de MyString partir de la position Start.

Len(MyString) renvoie le nombre de caractres de MyString.

Voici quelques exemples de ces fonctions :


Dim MyString As String Dim MyResult As Strings Dim MyLen As Integer MyString = " Ceci est un petit test" MyResult = Left(MyString,5) MyResult = Right(MyString, 5) ' Renvoie la chane " Ceci" ' Renvoie la chane " test"

Chapitre 3 La bibliothque d'excution de StarOffice Basic 55

MyResult = Mid(MyString, 8, 5) MyLength = Len(MyString)

' Renvoie la chane "t un " ' Renvoie la valeur 21

Recherche et remplacement
StarOffice Basic propose la fonction InStr pour rechercher une chane partielle l'intrieur d'une autre :
ResultString = InStr (SearchString, MyString)

Le paramtre SearchString spcifie la chane rechercher dans MyString. La fonction renvoie un nombre contenant la position laquelle la chane SearchString apparat pour la premire fois dans MyString. Pour rechercher d'autres occurrences de la chane, la fonction propose une option permettant de spcifier la position partir de laquelle StarOffice Basic commence chercher. Dans ce cas, la syntaxe de la fonction est :
ResultString = InStr(StartPosition, SearchString, MyString)

Dans les exemples ci-dessus, InStr ne fait pas la distinction entre les majuscules et les minuscules. Pour effectuer une recherche avec InStr en respectant la casse, ajoutez le paramtre 0, comme indiqu dans l'exemple suivant :
ResultString = InStr(SearchString, MyString, 0)

En utilisant les fonctions d'dition de chanes indiques ci-dessus, les programmeurs peuvent rechercher et remplacer une chane l'intrieur d'une autre :
Function Replace(Source As String, Search As String, NewPart As String) Dim Result As String Dim StartPos As Long Dim CurrentPos As Long Result = "" StartPos = 1 CurrentPos = 1 If Search = "" Then Result = Source Else Do While CurrentPos <> 0 CurrentPos = InStr(StartPos, Source, Search) If CurrentPos <> 0 Then Result = Result + Mid(Source, StartPos, _ CurrentPos - StartPos) Result = Result + NewPart StartPos = CurrentPos + Len(Search) Else Result = Result + Mid(Source, StartPos, Len(Source)) End If ' Position <> 0 Loop End If

56 StarOffice 7 Manuel de programmation Basic

Replace = Result End Function

La fonction recherche dans la chane transfre Search dans une boucle en utilisant InStr dans le terme d'origine Source. Si elle trouve le terme recherch, elle prend la partie prcdant l'expression et l'crit dans le tampon de retour Result. Elle ajoute la section NewPart au niveau du terme recherch Search. Si aucune occurrence supplmentaire du terme recherch n'est trouve, la fonction dtermine la partie de la chane restante et l'ajoute au tampon de retour. Elle renvoie la chane ainsi cre comme rsultat du processus de remplacement. Comme le remplacement de parties de squences de caractres est une des fonctions les plus frquemment utilises, la fonction Mid de StarOffice Basic a t tendue de manire pouvoir effectuer cette tche automatiquement. L'exemple suivant
Dim MyString As String MyString = "Ceci fut mon texte"

Mid(MyString, 6, 3, "est")

remplace trois caractres par la chane est partir de la sixime position de la chane MyString.

Formatage des chanes


La fonction Format formate les nombres sous forme de chanes. Pour ce faire, la fonction attend une expression Format, qui sert de modle pour le formatage des nombres. Chaque substituant l'intrieur du modle assure que cet lment est bien format en consquence dans la valeur de sortie. Les cinq substituants les plus importants l'intrieur d'un modle sont le zro (0), le signe dise (#), le point (.), la virgule (,) et le signe dollar ($) . Le caractre zro dans le modle assure que l'emplacement correspondant sera toujours occup par un nombre. Si aucun chiffre n'est fourni, un 0 est affich sa place. Un point correspond au sparateur de dcimales dfini par le systme d'exploitation dans les paramtres nationaux. L'exemple ci-dessous montre comment les caractres zro et point peuvent dfinir le nombre de dcimales d'une expression :
MyFormat = "0.00" MyString = Format(-1579.8, MyFormat) MyString = Format(1579.8, MyFormat) MyString = Format(0.4, MyFormat) MyString = Format(0.434, MyFormat) ' Renvoie "-1579,80" ' Renvoie "1579,80" ' Renvoie "0,40" ' Renvoie "0,43"

De la mme manire, il est possible d'ajouter des zros devant un nombre pour lui donner la longueur souhaite :
MyFormat = "0000.00" MyString = Format(-1579.8, MyFormat) ' Renvoie "-1579,80"

Chapitre 3 La bibliothque d'excution de StarOffice Basic 57

MyString = Format(1579.8, MyFormat) MyString = Format(0.4, MyFormat) MyString = Format(0.434, MyFormat)

' Renvoie "1579,80" ' Renvoie "0000,40" ' Renvoie "0000,43"

Une virgule reprsente le caractre utilis par le systme d'exploitation comme sparateur de milliers, et le signe dise un chiffre ou un emplacement qui n'est affich que si la chane en entre le ncessite.
MyFormat = "#,##0.00" MyString = Format(-1579.8, MyFormat) MyString = Format(1579.8, MyFormat) MyString = Format(0.4, MyFormat) MyString = Format(0.434, MyFormat) ' Renvoie "-1 579,80" ' Renvoie "1 579,80" ' Renvoie "0,40" ' Renvoie "0,43"

la place du signe dollar, la fonction Format affiche le symbole montaire adapt, dfini par le systme :
MyFormat = "#,##0.00 $" MyString = Format(-1579.8, MyFormat) MyString = Format(1579.8, MyFormat) MyString = Format(0.4, MyFormat) MyString = Format(0.434, MyFormat) ' Renvoie "-1 579,80 " ' Renvoie "1 579,80 " ' Renvoie "0,40 " ' Renvoie "0,43 "

Les instructions de formatage utilises dans VBA pour date et l'heure ne sont pas supportes par StarOffice Basic.

Date et heure
StarOffice Basic dispose du type de donnes Date, qui enregistre les informations de date et d'heure dans un format binaire.

Spcification de la date et de l'heure l'intrieur du code du programme


Vous pouvez assigner une date une variable de date par la simple assignation d'une chane :
Dim MyDate As Date MyDate = "1.1.2002"

Cette assignation peut fonctionner correctement car StarOffice Basic convertit automatiquement la valeur de date dfinie sous forme de chane en variable de date. Ce type d'assignation peut cependant provoquer des erreurs, les valeurs de date et d'heure tant dfinies et affiches diffremment selon les pays.

58 StarOffice 7 Manuel de programmation Basic

Comme StarOffice Basic utilise les paramtres nationaux du systme d'exploitation lors de la conversion d'une chane en valeur de date, l'expression indique plus haut ne fonctionne correctement que si les paramtres nationaux correspondent au format de la chane de caractres. Afin d'viter ce problme, il est recommand d'utiliser la fonction DateSerial pour assigner une valeur fixe une variable de date :
Dim MyVar As Date MyDate = DateSerial (2001, 1, 1)

Le paramtre de la fonction doit correspondre l'ordre : anne, mois, jour. Cette fonction garantit que la variable reoit bien la valeur correcte, quels que soient les paramtres nationaux La fonction TimeSerial formate les informations d'heure de la mme manire que la fonction DateSerial formate les dates :
Dim MyVar As Date MyDate = TimeSerial(11, 23, 45)

Leurs paramtres doivent tre spcifis dans l'ordre : heures, minutes, secondes.

Extraction des informations de date et d'heure


Les fonctions suivantes constituent le pendant des fonctions DateSerial et TimeSerial :

Day(MyDate) renvoie le jour du mois de MyDate Month(MyDate) renvoie le mois de MyDate Year(MyDate) renvoie l'anne de MyDate Weekday(MyDate) renvoie le numro du jour de la semaine de MyDate Hour(MyTime) renvoie les heures de MyTime Minute(MyTime) renvoie les minutes de MyTime Second(MyTime) renvoie les secondes de MyTime

Ces fonctions extraient les sections de date ou d'heure d'une variable Date donne. L'exemple
Dim MyDate As Date ' ... Initialisation de MyDate If Year(MyDate) = 2003 Then ' ... La date spcifie est situe dans l'anne 2003 End If

vrifie si la date enregistre dans MyDate se trouve dans l'anne 2003. De la mme manire, l'exemple

Chapitre 3 La bibliothque d'excution de StarOffice Basic 59

Dim MyTime As Date ' ... Initialisation de MyTime If Hour(MyTime) >= 12 And Hour(MyTime) < 14 Then ' ... L'heure spcifie est comprise entre 12 et 14 heures End If

vrifie si l'heure de MyTime est comprise entre 12 et 14 heures. La fonction Weekday renvoie le numro du jour de la semaine pour la date indique :
Dim MyDate As Date Dim MyWeekday As String ' ... initialise MyDate Select Case WeekDay(MyDate) case 1 MyWeekday = "Dimanche" case 2 MyWeekday = "Lundi" case 3 MyWeekday = "Mardi" case 4 MyWeekday = "Mercredi" case 5 MyWeekday = "Jeudi" case 6 MyWeekday = "Vendredi" case 7 MyWeekday = "Samedi" End Select

Remarque : Le dimanche est considr comme le premier jour de la semaine.

Obtention de l'heure et de la date systme


Les fonctions suivantes de StarOffice Basic permettent d'obtenir l'heure et la date systme :

Date renvoie la date actuelle Time renvoie l'heure actuelle Now renvoie le point prsent dans le temps (la date et l'heure combines dans une seule valeur)

Fichiers et rpertoires
L'utilisation des fichiers est une des tches de base d'une application. L'API StarOffice propose un grand nombre d'objets permettant de crer, d'ouvrir et de modifier des documents Office. Ils sont

60 StarOffice 7 Manuel de programmation Basic

prsents en dtail au chapitre 4. Indpendamment de cela, il peut y avoir des circonstances o vous aurez besoin d'accder directement au systme de fichiers, de rechercher dans les rpertoires ou d'diter des fichiers texte. La bibliothque d'excution de StarOffice Basic propose plusieurs fonctions fondamentales pour ces tches.
Certaines fonctions spcifiques DOS pour les fichiers et les rpertoires ne sont plus proposes par StarOffice 7, ou seulement avec des fonctionnalits limites. Par exemple, les fonctions ChDir, ChDrive et CurDir ne sont plus supportes. Certaines proprits spcifiques DOS ne sont plus utilises dans les fonctions utilisant des proprits de fichier comme paramtres (par exemple, pour distinguer les fichiers cachs et les fichiers systme). Cette volution tait devenue ncessaire pour assurer une indpendance maximum de StarOffice par rapport aux diffrentes plates-formes.

Administration des fichiers


Recherche dans les rpertoires
La fonction Dir de StarOffice Basic permet de parcourir les rpertoires et sous-rpertoires la recherche de fichiers. Lors de la premire requte, vous devez assigner une chane contenant le chemin des rpertoires dans lesquels effectuer la recherche comme premier paramtre de la fonction Dir. Le second paramtre de la fonction Dir spcifie le fichier ou le rpertoire rechercher. StarOffice Basic renvoie le nom de la premire entre de rpertoire trouve. Pour obtenir l'entre suivante, vous devez appeler la fonction Dir sans lui passer de paramtres. Si la fonction Dir ne trouve pas d'entre supplmentaire, elle renvoie une chane vide. L'exemple suivant montre comment utiliser la fonction Dir pour obtenir la liste de tous les fichiers d'un rpertoire. La procdure enregistre les diffrents noms de fichier dans la variable AllFiles puis l'affiche dans une bote de message.
Sub ShowFiles Dim NextFile As String Dim AllFiles As String AllFiles = "" NextFile = Dir("C:\", 0) While NextFile NextFile Wend MsgBox AllFiles End Sub <> "" NextFile = Dir

AllFiles = AllFiles & Chr(13) &

Le 0 utilis comme second paramtre de la fonction Dir indique celle-ci de ne renvoyer que les noms des fichiers et d'ignorer les rpertoires. Les paramtres suivants peuvent tre spcifis ici :

0 : renvoie les fichiers normaux 16 : sous-rpertoires


Chapitre 3 La bibliothque d'excution de StarOffice Basic 61

L'exemple suivant est pratiquement identique au prcdent, si ce n'est que la fonction Dir est appele avec une valeur 16 en paramtre, et renvoie donc les sous-rpertoires d'un dossier et non plus les noms des fichiers.
Sub ShowDirs Dim NextDir As String Dim AllDirs As String AllDirs = "" NextDir = Dir("C:\", 16) While NextDir <> "" AllDirs = AllDirs & Chr(13) & NextDir Wend MsgBox AllDirs End Sub = Dir NextDir

Lorsqu'elle est appele dans StarOffice Basic, contrairement ce qui se passe dans VBA, la fonction Dir utilise avec le paramtre 16 renvoie uniquement les sous-rpertoires d'un dossier (dans VBA, la fonction renvoie galement les noms des fichiers standard, ce qui oblige oprer un traitement supplmentaire pour n'obtenir que les rpertoires).

Les options proposes par VBA pour rechercher dans des rpertoires uniquement les fichiers possdant les proprits cach, fichier systme, archive et nom de volume n'existent pas dans StarOffice Basic car les fonctions de systme de fichiers correspondantes n'existent pas dans tous les systmes d'exploitation.

Les indications de chemin utilises avec la fonction Dir peuvent contenir les substituants * et ? dans VBA comme dans StarOffice Basic. Cependant, dans StarOffice Basic, le substituant * ne peut tre que le dernier caractre du nom d'un fichier ou de son extension, ce qui n'est pas le cas dans VBA.

Cration et suppression de rpertoires


StarOffice Basic dispose de la fonction MkDir pour crer des rpertoires.
MkDir ("C:\SubDir1")

Cette fonction cre des rpertoires et des sous-rpertoires. Tous les rpertoires ncessaires la hirarchie sont galement crs, le cas chant. Par exemple, si seul le rpertoire C:\SubDir1 existe, un appel
MkDir ("C:\SubDir1\SubDir2\SubDir3\")

cre la fois le rpertoire C:\SubDir1\SubDir2 et le rpertoire C:\SubDir1\SubDir2\SubDir3. La fonction RmDir supprime des rpertoires.

62 StarOffice 7 Manuel de programmation Basic

RmDir ("C:\SubDir1\SubDir2\SubDir3\")

Si le rpertoire contient des sous-rpertoires ou des fichiers, ceux-ci sont galement supprims. Utilisez donc la fonction RmDir avec prudence.
Dans VBA, les fonctions MkDir et RmDir ne s'appliquent qu'au rpertoire actif. En revanche, dans StarOffice Basic, les fonctions MkDir et RmDir peuvent servir crer ou supprimer plusieurs niveaux de rpertoires.

Dans VBA, RmDir gnre un message d'erreur lorsqu'un rpertoire contient un fichier. Dans StarOffice Basic, le rpertoire ainsi que tous ses fichiers sont supprims.

Copie, attribution d'un nouveau nom, suppression et vrification de l'existence de fichiers


L'appel
FileCopy(Source, Destination)

cre une copie du fichier Source sous le nom de Destination. Grce la fonction
Name OldName As NewName

vous pouvez renommer le fichier OldName en NewName. Le mot cl As et l'absence de virgule remontent aux origines du langage Basic. L'appel
Kill(Filename)

supprime le fichier Filename. Pour supprimer un rpertoire (avec tous ses fichiers), utilisez la fonction RmDir. La fonction FileExists peut tre utilise pour vrifier l'existence d'un fichier :
If FileExists(Filename) Then MsgBox "Le fichier existe." End If

Lecture et modification des proprits d'un fichier


Lorsque vous utilisez des fichiers, il peut tre important de pouvoir en connatre les proprits, comme leur date de dernire modification et leur longueur. L'appel
Dim Attr As Integer Attr = GetAttr(Filename)

Chapitre 3 La bibliothque d'excution de StarOffice Basic 63

renvoie certaines des proprits d'un fichier. La valeur de retour est fournie sous la forme d'un masque de bits qui peut avoir les valeurs suivantes :

1 : fichier en lecture seule 16 : nom d'un rpertoire

L'exemple
Dim FileMask As Integer Dim FileDescription As String FileMask = GetAttr("test.txt") If (FileMask AND 1) > 0 Then FileDescription = FileDescription & " lecture seule " End IF If (FileMask AND 16) > 0 Then FileDescription = FileDescription & " rpertoire " End IF If FileDescription = "" Then FileDescription = " normal " End IF MsgBox FileDescription

dtermine le masque de bits du fichier test.txt et vrifie s'il est en lecture seule et s'il s'agit d'un rpertoire. Si aucun de ces deux cas ne s'applique, FileDescription reoit la chane "normal".
Les drapeaux utiliss dans VBA pour obtenir les proprits de fichier cach, fichier systme, archive et nom de volume ne sont pas supports par StarOffice Basic car ils sont propres Windows et ne sont pas, ou pas compltement, disponibles dans les autres systmes d'exploitation.

La fonction SetAttr permet de modifier les proprits d'un fichier. L'appel


SetAttr("test.txt", 1)

peut donc tre utilis pour passer un fichier en lecture seule. Il est possible de supprimer un statut de lecture avec l'appel suivant :
SetAttr("test.txt", 0)

La date et l'heure de la dernire modification d'un fichier peuvent tre obtenues avec la fonction FileDateTime. La date est formate ici selon les paramtres nationaux utiliss sur le systme.
FileDateTime("test.txt") fichier. ' Renvoie la date et l'heure de la dernire modification du

La fonction FileLen dtermine la longueur d'un fichier en octets (au format entier long).
FileLen("test.txt") ' Renvoie la longueur du fichier en octets.

64 StarOffice 7 Manuel de programmation Basic

criture et lecture de fichiers texte


StarOffice Basic propose un large ventail de mthodes pour lire et crire des fichiers. Les explications qui suivent portent sur l'utilisation de fichiers texte (et non de documents texte).

criture de fichiers texte


Pour pouvoir accder un fichier texte, vous devez l'avoir ouvert au pralable. Pour ce faire, il faut un descripteur de fichier libre, qui identifie clairement le fichier pour les accs ultrieurs. La fonction FreeFile sert crer un descripteur de fichier libre. Ce descripteur est pass comme paramtre l'instruction Open, qui ouvre le fichier. Pour ouvrir un fichier de manire pouvoir le spcifier comme fichier texte, l'appel Open est :
Open Filename For Output As #FileNo

Filename est une chane de caractres contenant le nom du fichier. FileNo est le descripteur cr par la fonction FreeFile. Une fois le fichier ouvert, vous pouvez dcrire l'instruction Print ligne par ligne :
Print #FileNo, "Ceci est une ligne de test."

FileNo dsigne ici aussi le descripteur de fichier. Le second paramtre spcifie le texte enregistrer comme ligne du fichier texte. Une fois le processus d'criture achev, le fichier doit tre referm avec un appel Close :
Close #FileNo

L encore, il faut spcifier le descripteur du fichier. L'exemple suivant montre comment ouvrir, dcrire et refermer un fichier texte :
Dim FileNo As Integer Dim CurrentLine As String Dim Filename As String Filename = "c:\data.txt" FileNo = Freefile libre Open Filename For Output As #FileNo Print #FileNo, "Ceci est une ligne de texte" Close #FileNo ' Ouvre le fichier (en mode criture) ' Enregistre une ligne ' Ferme le fichier ' Dfinit le nom du fichier ' Gnre un descripteur de fichier

Print #FileNo, "Ceci est une autre ligne de texte" ' Enregistre une ligne

Lecture de fichiers texte


Les fichiers texte sont lus de la mme manire qu'ils sont crits. L'instruction Open utilise pour ouvrir le fichier contient l'expression For Input la place de l'expression For Output, et au

Chapitre 3 La bibliothque d'excution de StarOffice Basic 65

lieu de la commande Print permettant d'crire des donnes, c'est la commande Line Input qui est utilise pour lire les donnes. Enfin, lorsque vous accdez un fichier texte, l'instruction
eof(FileNo)

sert vrifier si vous avez atteint la fin du fichier. L'exemple suivant montre comment lire un fichier texte :
Dim FileNo As Integer Dim CurrentLine As String Dim File As String Dim Msg as String ' Dfinit le nom du fichier Filename = "c:\data.txt" ' Gnre un descripteur de fichier libre FileNo = Freefile ' Ouvre le fichier (en mode lecture) Open Filename For Input As FileNo ' Vrifie si la fin du fichier a t atteinte Do While not eof(FileNo) ' Lit la ligne Line Input #FileNo, CurrentLine If CurrentLine <>"" then Msg = Msg & CurrentLine & Chr(13) end if Loop ' Ferme le fichier Close #FileNo Msgbox Msg

Les diffrentes lignes sont extraites dans Do While une boucle, enregistres dans la variable Msg puis affiches la fin dans une bote de message.

Botes de message et zones de saisie


StarOffice Basic dispose des fonctions MsgBox et InputBox pour communiquer facilement avec l'utilisateur.

66 StarOffice 7 Manuel de programmation Basic

Affichage de messages
MsgBox affiche une simple bote d'information, qui peut possder un ou plusieurs boutons. Dans sa version la plus simple
MsgBox "Voici une information !"

la bote de message MsgBox ne contient que du texte et un bouton OK. Vous pouvez modifier l'apparence de la bote d'information avec un paramtre permettant d'ajouter des boutons supplmentaires, de dfinir un bouton par dfaut et d'ajouter un symbole informatif. Les valeurs pour slectionner les boutons sont :

0 Bouton OK 1 Boutons OK et Annuler 2 Boutons Annuler et Ressayer 3 Boutons Oui, Non et Annuler 4 Boutons Oui et Non 5 Boutons Ressayer et Annuler

Pour dfinir un bouton par dfaut, ajoutez une des valeurs suivantes la valeur du paramtre choisie dans la liste de slection des boutons. Par exemple, pour crer trois boutons Oui, Non et Annuler (valeur 3), o Annuler est le bouton par dfaut, le paramtre doit avoir une valeur de 3 + 512 = 515.

0 Le premier bouton est slectionn par dfaut 256 Le deuxime bouton est slectionn par dfaut 512 Le troisime bouton est slectionn par dfaut

Enfin, les symboles informatifs suivants sont disponibles et peuvent galement tre affichs en ajoutant les valeurs appropries au paramtre :

16 Signe stop 32 Point d'interrogation 48 Point d'exclamation 64 Icne Astuce

L'appel
MsgBox "Souhaitez-vous continuer ?", 292

affiche une bote d'information avec les boutons Oui et Non (valeur 4), dont le second (Non) est slectionn par dfaut (valeur 256), et contenant galement un point d'interrogation (valeur 32), 4 + 256 + 32 = 292 Si une bote d'information contient plusieurs boutons, il faut utiliser une valeur de retour pour dterminer celui sur lequel l'utilisateur a cliqu. Les valeurs de retour possibles dans ce cas sont les suivantes :
Chapitre 3 La bibliothque d'excution de StarOffice Basic 67

1 Ok 2 Annuler 4 Ressayer 5 Ignorer 6 Oui 7 Non

Pour l'exemple prcdent, le contrle de la valeur de retour peut se faire de la manire suivante :
If MsgBox ("Souhaitez-vous continuer ?", ' Clic sur le bouton Oui Else ' Clic sur le bouton Non End IF 292) = 6 Then

En plus du texte d'information et du paramtre d'organisation de la bote d'information, MsgBox propose un troisime paramtre pour dfinir le titre de la bote de message :
MsgBox "Souhaitez-vous continuer ?", 292, "Titre de la fentre"

Si aucun titre n'est indiqu pour la bote de message, la valeur par dfaut est "soffice".

Zone de saisie pour demander des chanes simples


La fonction InputBox demande l'utilisateur de saisir une chane simple. Elle constitue donc une alternative simple pour configurer des botes de dialogue. InputBox rclame trois paramtres standard :

un texte d'information, un titre pour la bote de message, une valeur par dfaut pouvant tre ajoute dans la zone de saisie.
InputVal = InputBox("Saisissez une valeur :", "Test", "default value")

Comme valeur de retour, la fonction InputBox renvoie la chane saisie par l'utilisateur.

Autres fonctions
Beep
La fonction Beep fait mettre un son au systme pour avertir l'utilisateur d'une action incorrecte. Beep ne rclame aucun paramtre :
Beep ' produit un son d'avertissement

68 StarOffice 7 Manuel de programmation Basic

Shell
Il est possible de lancer des programmes externes grce la fonction Shell.
Shell(Pathname, Windowstyle, Param)

Pathname dfinit le chemin du programme excuter. Windowstyle dfinit la fentre dans laquelle le programme est lanc. Les valeurs possibles sont les suivantes :

0 Le programme est mis en focus et lanc dans une fentre cache. 1 Le programme est mis en focus et lanc dans une fentre de taille normale. 2 Le programme est mis en focus et lanc dans une fentre rduite. 3 Le programme est mis en focus et lanc dans une fentre agrandie. 4 Le programme est lanc dans une fentre de taille normale, sans tre mis en focus. 6 Le programme est lanc dans une fentre rduite, la fentre active reste en focus. 10 Le programme est lanc en mode plein cran.

Le troisime paramtre, Param, permet d'indiquer des paramtres de ligne de commande passer au programme lancer.

Wait
La fonction Wait suspend l'excution du programme pour une dure donne. La dure d'attente est spcifie en millisecondes. La commande
Wait 2000

spcifie d'attendre 2 secondes (2 000 millisecondes).

Environ
La fonction Environ renvoie les variables d'environnement du systme d'exploitation. Ces variables dpendent du systme et de sa configuration. L'appel
Dim TempDir TempDir=Environ ("TEMP")

dtermine les variables d'environnement du rpertoire temporaire du systme d'exploitation.

Chapitre 3 La bibliothque d'excution de StarOffice Basic 69

70 StarOffice 7 Manuel de programmation Basic

CHAPITRE

Introduction l'API StarOffice


L'API StarOffice est une interface de programmation universelle pour accder StarOffice. Vous pouvez utiliser l'API StarOffice pour crer, ouvrir, modifier et imprimer des documents StarOffice. Elle permet d'tendre la porte fonctionnelle de StarOffice grce des macros personnelles et d'crire des botes de dialogue personnalises. L'API StarOffice peut tre utilise non seulement avec StarOffice Basic, mais galement avec d'autres langages de programmation comme Java et C++. Cela est rendu possible grce une technique nomme Universal Network Objects (UNO) qui fournit une interface avec diffrents langages de programmation. Ce chapitre se concentre sur la manire d'utiliser StarOffice dans StarOffice Basic avec l'aide d'UNO. Il dcrit les principaux concepts d'UNO du point de vue d'un programmeur StarOffice Basic. Vous trouverez dans les chapitres suivants des dtails sur la faon de travailler avec les diffrentes parties de l'API StarOffice.

Universal Network Objects (UNO)


StarOffice propose une interface de programmation sous la forme d'Universal Network Objects (UNO, objets rseau universels). Il s'agit d'une interface de programmation oriente objet que StarOffice subdivise en diffrents objets qui assurent un accs programmable au paquetage Office. Comme StarOffice Basic est un langage de programmation procdural, il a fallu lui ajouter plusieurs constructions linguistiques pour pouvoir utiliser UNO. Pour pouvoir utiliser un Universal Network Object dans StarOffice Basic, vous devez dclarer une variable pour l'objet associ. Cette dclaration se fait avec l'instruction Dim (voir le chapitre 2). Il faut employer le type Object pour dclarer une variable objet :
Dim Obj As Object

Cet appel dclare une variable objet nomme Obj. La variable objet ainsi cre doit ensuite tre initialise pour pouvoir tre utilise. Cela peut tre accompli avec la fonction createUnoService :
Obj = createUnoService("com.sun.star.frame.Desktop")

Cet appel assigne la variable Obj une rfrence l'objet qui vient d'tre cr. com.sun.star.frame.Desktop ressemble un type d'objet, mais dans la terminologie UNO, on parle plus volontiers de "service" que de type. Selon la philosophie UNO, un Obj est dcrit
71

comme tant une rfrence un objet qui supporte le service com.sun.star.frame.Desktop. Le terme "service" employ dans StarOffice Basic correspond donc aux termes de type et de classe employs dans d'autres langages de programmation. Il existe cependant une diffrence principale : un Universal Network Object peut supporter plusieurs services en mme temps. Certains services UNO supportent leur tour d'autres services, si bien qu' travers un seul objet, vous pouvez accder tout un ventail de services. Il est possible, par exemple, que l'objet mentionn prcdemment, bas sur le service com.sun.star.frame.Desktop, inclue galement d'autres services pour charger des documents et terminer le programme.
Alors que dans VBA la structure d'un objet est dfinie par la classe laquelle il appartient, dans StarOffice Basic sa structure est dfinie par les services qu'il supporte. Un objet VBA est toujours assign une classe unique. Un objet StarOffice Basic peut, lui, supporter plusieurs services.

Proprits et mthodes
Un objet dans StarOffice Basic dispose d'une gamme de proprits et de mthodes qui peuvent tre appeles par son intermdiaire.

Proprits
Les proprits sont comme les proprits d'un objet ; par exemple Filename et Title pour un
objet Document. Les proprits sont dfinies grce une simple assignation :
Document.Title = "Manuel de programmation StarOffice 7.0" Document.Filename = "progman.sxv"

Une proprit, tout comme une variable normale, possde un type dfinissant les valeurs qu'elle peut enregistrer. Les proprits cites prcdemment Filename et Title sont du type chane de caractres.

Proprits relles et proprits imites


La plupart des proprits d'un objet dans StarOffice Basic sont dfinies comme telles dans la description UNO du service. En plus de ces proprits "relles", il existe galement dans StarOffice Basic des proprits constitues de deux mthodes au niveau UNO. L'une sert obtenir la valeur de la proprit et l'autre la dfinir (mthodes get et set). La proprit a t virtuellement imite partir de deux mthodes. Les objets caractre dans UNO, par exemple, proposent les mthodes getPosition et setPosition qui permettent de connatre et de modifier le point cl associ. Le programmeur StarOffice Basic peut accder ces valeurs via la proprit Position. Indpendamment de cela, les mthodes d'origine sont galement disponibles (dans notre exemple, getPosition et setPosition).

72 StarOffice 7 Manuel de programmation Basic

Mthodes
On peut considrer les mthodes comme des fonctions directement lies un objet et qui permettent de l'appeler. L'objet Document prcdent, par exemple, propose une mthode Save, pouvant tre appele de la manire suivante :
Document.Save()

Les mthodes, tout comme les fonctions, peuvent contenir des paramtres et des valeurs de retour. La syntaxe de ces appels de mthode est oriente vers les fonctions classiques. L'appel
Ok = Document.Save(True)

indique galement le paramtre True pour l'objet Document en invoquant la mthode Save. Une fois la mthode termine, Save enregistre une valeur de retour dans la variable Ok.

Modules, services et interfaces


StarOffice dispose de centaines de services. Afin que l'utilisateur en ait une meilleure vue gnrale, ils ont t regroups en modules. Ces modules n'ont aucun autre intrt fonctionnel pour les programmeurs StarOffice Basic. Lorsque vous spcifiez le nom d'un service, seul le nom du module importe, puisqu'il doit aussi apparatre dans le nom indiqu. Le nom complet d'un service est constitu de l'expression com.sun.star , qui spcifie qu'il s'agit d'un service StarOffice, suivie du nom du module, comme frame, par exemple et enfin du nom du service en lui-mme, comme Desktop. Le nom complet dans ce cas serait alors :
com.sun.star.frame.Desktop

En plus des termes de module et de service, UNO utilise celui d'"interface". Ce terme est sans doute familier aux programmeurs Java, mais n'apparat pas en Basic. Une interface combine plusieurs mthodes. Au sens le plus strict du mot, un service dans UNO ne supporte pas des mthodes, mais des interfaces, qui, elles, proposent diffrentes mthodes. En d'autres termes, les mthodes sont assignes (sous forme de combinaisons) au service dans des interfaces. Ce dtail peut tre intressant en particulier pour les programmeurs Java ou C++, car dans ces langages, il faut une interface pour appeler une mthode. Dans StarOffice Basic, cela n'a aucune importance. Ici, les mthodes sont appeles directement via l'objet concern. Pour bien comprendre le fonctionnement de l'API, il est cependant utile de matriser l'assignation de mthodes diffrentes interfaces, car un grand nombre d'interfaces sont utilises dans les diffrents services. Si vous tes familier avec une interface, vous pourrez appliquer les connaissances acquises avec un service un autre. Certaines interfaces centrales sont utilises si frquemment qu'elles ont t indiques nouveau la fin de ce chapitre, appeles par diffrents services.

Chapitre 4 Introduction l'API StarOffice 73

Outils pour l'utilisation d'UNO


Il reste savoir quels objets ou services, pour employer la terminologie UNO supportent quelles proprits, mthodes et interfaces et comment le dterminer. En plus de ce manuel, vous pouvez vous rfrer aux sources suivantes pour obtenir des informations complmentaires sur les objets : la mthode supportsService, les mthodes de dbogage ainsi que le Developer's Guide et la rfrence de l'API.

La mthode supportsService
Un grand nombre d'objets UNO supportent la mthode supportsService, grce laquelle il est possible de dterminer si un objet supporte un service donn ou non. L'appel
Ok = TextElement.supportsService("com.sun.star.text.Paragraph")

par exemple, dtermine si l'objet TextElement supporte le service com.sun.star.text.Paragraph.

Proprits de dbogage
Chaque objet UNO de StarOffice Basic connat les proprits, les mthodes et les interfaces qu'il contient dj. Il dispose de proprits qui permettent d'en renvoyer la liste. Les proprits correspondantes sont : DBG_properties - renvoie une chane contenant toutes les proprits d'un objet. DBG_methods - renvoie une chane contenant toutes les mthodes d'un objet. DBG_supportetInterfaces - renvoie une chane contenant toutes les interfaces supportant un objet. Le code suivant montre comment utiliser DBG_properties et DBG_methods dans des applications relles. Il commence par crer le service com.sun.star.frame.Desktop puis affiche les proprits et les mthodes supportes dans des botes de message.
Dim Obj As Object Obj = createUnoService("com.sun.star.frame.Desktop") MsgBox Obj.DBG_Propierties MsgBox Obj.DBG_methods

Lorsque vous utilisez DBG_properties, faites attention au fait que la fonction renvoie l'ensemble des proprits qu'un service donn peut supporter en thorie. Vous n'avez cependant aucune assurance que l'objet concern peut galement les utiliser. Avant d'appeler une proprit, vous devez donc utiliser la fonction IsEmpty pour vrifier qu'elle est effectivement disponible.

74 StarOffice 7 Manuel de programmation Basic

Rfrence de l'API
Vous trouverez plus d'informations sur les services disponibles ainsi que sur leurs interfaces, mthodes et proprits dans la rfrence pour l'API StarOffice. Elle se trouve sur le site www.openoffice.org :
http://api.openoffice.org/common/ref/com/sun/star/module-ix.html

Prsentation de quelques interfaces centrales


Certaines interfaces de StarOffice se retrouvent dans de nombreuses parties de l'API StarOffice. Elles dfinissent des ensembles de mthodes pour des tches abstraites pouvant s'appliquer diffrents types de problmes. Voici une prsentation des plus courantes d'entre elles. L'origine des objets est explique plus loin dans ce manuel. Pour l'instant, nous nous contentons de traiter certains aspects abstraits des objets pour lesquels l'API StarOffice propose certaines interfaces centrales.

Cration d'objets contextuels


L'API StarOffice propose deux options pour crer des objets. La premire se trouve dans la fonction createUnoService mentionne au dbut de ce chapitre. createUnoService cre un objet qui peut tre utilis de manire universelle. De tels objets et services sont galement connus sous le nom de services indpendants du contexte . ct de ces services indpendants du contexte, il existe galement des services contextuels dont les objets sont destins tre utiliss avec d'autres objets. Un objet de dessin d'un classeur, par exemple, ne peut exister que conjointement avec ce document prcis.

Interface com.sun.star.lang.XMultiServiceFactory
Les objets contextuels sont gnralement crs par une mthode d'objet dont l'objet dpend. La mthode createInstance, dfinie dans l'interface XMultiServiceFactory, est utilise en particulier dans les objets Document. L'objet de dessin mentionn prcdemment peut, par exemple, tre cr de la manire suivante en utilisant un objet Spreadsheet :
Dim RectangleShape As Object RectangleShape = _ Spreadsheet.createInstance("com.sun.star.drawing.RectangleShape")

Un modle de paragraphe dans un document texte se cre de la mme manire :


Dim Style as Object Style = Textdocument.createInstance("com.sun.star.style.ParagraphStyle")

Chapitre 4 Introduction l'API StarOffice 75

Accs par nom aux objets subordonns


Les interfaces XNameAccess et XNameContainer sont utilises dans les objets contenant des objets subordonns, qui peuvent tre adresss avec un nom en langage naturel. Alors que XNamedAccess permet d'accder aux objets individuels, XNameContainer se charge d'insrer, de modifier et de supprimer des lments.

L'interface com.sun.star.container.XNameAccess
L'objet Sheet d'un classeur fournit un bon exemple d'utilisation de XNameAccess. Il combine les diffrentes pages du classeur. Il accde aux diffrentes pages grce la mthode getByName de XNameAccess :
Dim Sheets As Object Dim Sheet As Object Sheets = Spreadsheet.Sheets Sheet = Sheets.getByName("Feuille1")

La mthode getElementNames permet d'obtenir un aperu des noms de tous les lments. Elle renvoie comme rsultat un champ de donnes contenant les diffrents noms. L'exemple suivant montre comment dterminer de cette manire les noms de tous les lments d'un classeur et les afficher avec une boucle :
Dim Sheets As Object Dim SheetNames Dim I As Integer Sheets = Spreadsheet.Sheets SheetNames = Sheets.getElementNames For I=LBound(SheetNames) To UBound(SheetNames) MsgBox SheetNames(I) Next I

La mthode hasByName de l'interface XNameAccess indique si un objet subordonn portant un nom donn existe dans l'objet de base. L'exemple suivant affiche un message indiquant l'utilisateur si l'objet Spreadsheet contient une page nomme Feuille1.
Dim Sheets As Object Sheets = Spreadsheet.Sheets If Sheets.HasByName("Feuille1") Then MsgBox " Feuille 1 existe" Else MsgBox "Feuille1 n'existe pas" End If

76 StarOffice 7 Manuel de programmation Basic

L'interface com.sun.star.container.XNameContainer
L'interface XNameContainer permet d'insrer, de supprimer et de modifier des lments subordonns dans un objet de base. Les fonctions concernes sont insertByName, removeByName et replaceByName. L'exemple suivant met cela en pratique. Il appelle un document texte contenant un objet StyleFamilies qu'il utilise pour rendre les modles de paragraphe (ParagraphStyles) du document disponibles.
Dim StyleFamilies As Objects Dim ParagraphStyles As Objects Dim NewStyle As Object StyleFamilies = Textdoc.StyleFamilies ParagraphStyles = StyleFamilies.getByName("ParagraphStyles") ParagraphStyles.insertByName("NewStyle", NewStyle) ParagraphStyles.replaceByName("ChangingStyle", NewStyle) ParagraphStyles.removeByName("OldStyle")

La ligne insertByName insre le style NewStyle sous le mme nom dans l'objet ParagraphStyles. La ligne replaceByName change l'objet derrire ChangingStyle en NewStyle. Enfin, l'appel removeByName supprime l'objet derrire OldStyle de ParagraphStyles.

Accs par indice aux objets subordonns


Les interfaces XIndexAccess et XIndexContainer sont utilises dans les objets contenant des objets subordonns et qui peuvent tre adresss avec un indice. XIndexAccess fournit les mthodes pour accder aux diffrents objets. XIndexContainer fournit les mthodes pour insrer et supprimer des lments.

L'interfacecom.sun.star.container.XIndexAccess
XIndexAccess propose les mthodes getByIndex et getCount pour appeler les objets subordonns. getByIndex renvoie un objet avec un indice donn. getCount renvoie le nombre d'objets disponibles.
Dim Sheets As Object Dim Sheet As Object Dim I As Integer Sheets = Spreadsheet.Sheets For I = 0 to Sheets.getCount() - 1 Sheet = Sheets.getByIndex(I) ' dition de la feuille Next I

Chapitre 4 Introduction l'API StarOffice 77

L'exemple montre une boucle parcourant toutes feuilles d'un classeur l'une aprs l'autre et enregistrant une rfrence chacune dans la variable objet Sheet. Notez que lorsque vous travaillez avec des indices, getCount renvoie le nombre d'lments. Les lments de getByIndex sont numrots partir de 0. La variable servant de compteur la boucle varie donc de 0 getCount()-1.

L'interface com.sun.star.container.XIndexContainer
L'interface XIndexContainer propose les fonctions insertByIndex et removeByIndex. Les paramtres sont structurs de la mme manire que dans les fonctions correspondantes dans XNameContainer.

Accs itratif aux objets subordonns


Dans certains cas, il se peut qu'un objet contienne une liste d'objets subordonns ne pouvant tre adresss ni par nom ni par index. C'est ce type de situations que sont destines les interfaces XEnumeration et XenumerationAccess. Elles proposent un mcanisme permettant d'atteindre tous les diffrents lments subordonns d'un objet, l'un aprs l'autre, sans recourir une mthode d'adressage direct.

Les interfaces com.sun.star.container.XEnumeration et XenumerationAccess


L'objet de base doit proposer l'interface XEnumerationAccess, qui contient uniquement la mthode createEnumeration. Elle renvoie un objet auxiliaire, qui fournit son tour l'interface XEnumeration avec les mthodes hasMoreElements et nextElement. Celles-ci permettent d'accder aux objets subordonns. L'exemple suivant parcourt les diffrents paragraphes d'un texte :
Dim ParagraphEnumeration As Object Dim Paragraph As Object ParagraphEnumeration = Textdoc.Text.createEnumeration While ParagraphEnumeration.hasMoreElements() Paragraph = ParagraphElements.nextElement() Wend

L'exemple commence par crer un objet auxiliaire ParagraphEnumeration. Il renvoie les paragraphes du texte un par un, dans une boucle. La boucle se termine ds que la mthode hasMoreElements renvoie la valeur False, qui signale que la fin du texte a t atteinte.

78 StarOffice 7 Manuel de programmation Basic

CHAPITRE

Utilisation de documents StarOffice


L'API StarOffice a t structure de manire qu'un maximum de ses parties puissent tre utilises universellement pour diffrentes tches. Cela concerne les interfaces et les services pour crer, ouvrir, enregistrer, convertir et imprimer des documents ainsi que pour l'administration des modles. Comme les fonctions de ce type sont disponibles dans tous les types de documents, elles sont expliques en premier dans ce chapitre.

StarDesktop
Il existe deux services trs frquemment appels pour travailler sur des documents :

Le service com.sun.star.frame.Desktop, similaire au service principal de StarOffice. Il fournit les fonctions pour l'objet cadre de StarOffice, sous lequel sont classes toutes les fentres de document. Ce service permet galement de crer, d'ouvrir et d'importer des documents. Les fonctions de base pour les objets Document individuels sont fournis par le service com.sun.star.document.OfficeDocument. Il propose les mthodes pour l'enregistrement, l'export et l'impression des documents.

Le service com.sun.star.frame.Desktop s'ouvre automatiquement au lancement de StarOffice. Pour ce faire, StarOffice cre un objet accessible par le nom global StarDesktop. L'interface la plus importante de StarDesktop est com.sun.star.frame. XComponentLoader. Elle comprend principalement la mthode loadComponentFromURL, qui sert crer, importer et ouvrir des documents.
Le nom de l'objet StarDesktop remonte StarOffice 5, o toutes les fentres de document taient incluses dans une application commune nomme StarDesktop. Dans la version actuelle de StarOffice, StarDesktop ne correspond plus aucun objet visible. Le nom StarDesktop a cependant t conserv pour l'objet cadre de StarOffice car il indique clairement qu'il s'agit d'un objet de base pour l'ensemble de l'application. L'objet StarDesktop fait office de successeur de l'objet Application de StarOffice 5 qui servait auparavant d'objet racine. Mais contrairement l'ancien objet Application, il est surtout destin l'ouverture de nouveaux documents. Les fonctions de l'ancien objet Application pour l'affichage l'cran de StarOffice (par exemple, FullScreen, FunctionBarVisible, Height, Width, Top, Visible) ne sont plus utilises.

79

Alors qu'on accde au document actif dans Word via Application.ActiveDocument et dans Excel via Application.ActiveWorkbook, dans StarOffice, c'est StarDesktop qui se charge de cette tche. L'objet Document actif est accessible dans StarOffice 7 via la proprit StarDesktop.CurrentComponent.

Informations de base sur les documents dans StarOffice


Lors de l'utilisation de documents StarOffice, il est trs utile de pouvoir grer les questions de base de leur administration dans StarOffice. Cela comprend la manire dont les noms de fichiers sont structurs pour les documents StarOffice, ainsi que le format dans lequel les fichiers sont enregistrs.

Noms de fichier en notation URL


Comme StarOffice a t conue pour tre une application indpendante de la plate-forme sur laquelle elle s'excute, elle utilise la notation URL (qui est indpendante des diffrents systmes d'exploitation), selon le standard Internet RFC 1738 pour les noms de fichier. Les noms de fichier standard utilisant ce systme commencent par le prfixe file:/// suivi du chemin local. Si le nom du fichier contient des sous-rpertoires, ceux-ci sont indiqus par une barre oblique unique, et non une barre oblique inverse comme sous Windows. Le chemin suivant fait rfrence au fichier test.sxw dans le rpertoire doc sur l'unit C:. file:///C:/doc/test.sxw Pour convertir les noms de fichier locaux en URL, StarOffice dispose de la fonction ConvertToUrl. Pour convertir un URL en nom de fichier local, StarOffice dispose de la fonction ConvertFromUrl :
MsgBox ConvertToUrl("C:\doc\test.sxw") ' donne file:///C:/doc/test.sxw MsgBox ConvertFromUrl("file:///C:/doc/test.sxw") ' donne (sous Windows) c:\doc\test.sxw

Cet exemple convertit un nom de fichier local en URL et l'affiche dans une bote de message. Il convertit ensuite l'URL en nom de fichier local et affiche galement le rsultat. Le standard Internet RFC 1738, utilis ici, autorise l'emploi des caractres 0-9, a-z et A-Z. Tous les autres caractres sont insrs dans les URL sous forme de codes d'chappement. Pour ce faire, ils sont convertis en leur valeur hexadcimale dans le jeu de caractres ISO 8859-1 (ISO-Latin) et prcds du signe pour cent. Un espace dans un nom de fichier local, par exemple, devient un %20 dans l'URL.

Format de fichier XML


Depuis la version 6.0, StarOffice dispose d'un format de fichier XML. Grce l'emploi de XML, l'utilisateur a la possibilit d'ouvrir et d'diter les fichiers dans d'autres programmes.
80 StarOffice 7 Manuel de programmation Basic

Compression des fichiers


Comme XML utilise des fichiers texte standard, les fichiers obtenus sont gnralement trs volumineux. Pour cette raison, StarOffice compresse les fichiers et les enregistre sous forme de fichier ZIP. Grce une option de la mthode storeAsURL, l'utilisateur peut enregistrer directement les fichiers XML d'origine. Voir Options de la mthode storeAsURL page 85.

Cration, ouverture et import de documents


Les documents peuvent tre ouverts, imports et crs avec la mthode
StarDesktop.loadComponentFromURL(URL, Frame, _ SearchFlags, FileProperties)

Le premier paramtre de la mthode loadComponentFromURL spcifie l'URL du fichier associ. Comme second paramtre, loadComponentFromURL attend un nom pour l'objet cadre de la fentre que StarOffice cre en interne pour son administration. Le nom prdfini _blank est gnralement utilis ici, et indique StarOffice de crer une nouvelle fentre. Il est galement possible de spcifier _hidden, qui permet de charger le document correspondant mais de le garder invisible. L'utilisateur peut ouvrir un document StarOffice avec ces seuls paramtres, les deux derniers pouvant ne contenir que des substituants (des valeurs factices) :
Dim Doc As Object Dim Url As String Dim Dummy() Url = "file:///C:/test.sxw" Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, Dummy())

L'appel ci-dessus ouvre le fichier test.sxw et l'affiche dans une nouvelle fentre. Il est possible d'ouvrir autant de documents que vous le voulez avec cette mthode et de les modifier en utilisant les objets Document retourns.
StarDesktop.loadComponentFromURL remplace les mthodes Documents.Add et Documents.Open de l'ancienne API de StarOffice.

Chapitre 5 Utilisation de documents StarOffice 81

Remplacement du contenu de la fentre de document


Les valeurs cites plus haut _blank et _hidden du paramtre Frame garantissent la cration par StarOffice d'une nouvelle fentre pour chaque appel de loadComponentFromURL. Dans certaines situations, il peut tre utile de remplacer le contenu d'une fentre existante. Dans ce cas, l'objet cadre de la fentre doit contenir un nom explicite. Notez que ce nom ne doit pas commencer par un caractre de soulignage. De plus, le paramtre SearchFlags doit tre activ pour que le framework correspondant soit cr au cas o il n'existerait pas. La constante correspondante pour SearchFlags est :
SearchFlags = com.sun.star.frame.FrameSearchFlag.CREATE + _ com.sun.star.frame.FrameSearchFlag.ALL

L'exemple suivant montre comment remplacer le contenu d'une fentre ouverte grce au paramtre Frame et SearchFlags :
Dim Doc As Object Dim Dummy() Dim Url As String Dim SearchFlags As Long SearchFlags = com.sun.star.frame.FrameSearchFlag.CREATE + _ com.sun.star.frame.FrameSearchFlag.ALL Url = "file:///C:/test.sxw" Doc = StarDesktop.loadComponentFromURL(Url, "MyFrame", _ SearchFlags, Dummy) MsgBox "Cliquez sur OK pour afficher le second document." Url = "file:///C:/test2.sxw" Doc = StarDesktop.loadComponentFromURL(Url, "MyFrame", _ SearchFlags, Dummy)

L'exemple commence par ouvrir le fichier test.sxw dans une nouvelle fentre avec le nom de cadre MyFrame. Lorsque l'utilisateur clique sur OK dans la bote de message, le contenu de la fentre est remplac par le fichier test2.sxw.

Options de la mthode loadComponentFromURL


Le quatrime paramtre de la fonction loadComponentFromURL est un champ de donnes PropertyValue fournissant StarOffice diverses options pour l'ouverture et la cration de documents. Le champ de donnes doit contenir une structure PropertyValue pour chaque option, et le nom de l'option y est enregistr sous forme de chane, tout comme sa valeur associe. loadComponentFromURL supporte les options suivantes :

AsTemplate (Boolean) s'il vaut true, la mthode charge un nouveau document sans titre depuis l'URL donn. S'il vaut false, la mthode charge les fichiers de modle pour dition.

82 StarOffice 7 Manuel de programmation Basic

CharacterSet (String) dfinit le jeu de caractres utilis par un document. FilterName (String) spcifie un filtre spcial pour la fonction loadComponentFromURL. Les noms des filtres disponibles sont dfinis dans le fichier
\share\config\registry\instance\org\ openoffice\office\TypeDetection.xml.

FilterOptions (String) dfinit des options supplmentaires pour les filtres. JumpMark (String) aprs avoir ouvert un document, le programme passe la position dfinie dans JumpMark. Password (String) transmet un mot de passe pour un fichier protg. ReadOnly (Boolean) charge un document en lecture seule.

L'exemple suivant montre comment un fichier texte spar par des virgules dans StarOffice Calc peut tre ouvert avec l'option Filtername.
Dim Doc As Object Dim FileProperties(0) As New com.sun.star.beans.PropertyValue Dim Url As String Url = "file:///C:/csv.doc" FileProperties(0).Name = "FilterName" FileProperties(0).Value ="scalc: Text - txt - csv (StarOffice Calc)" Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, FileProperties())

Le champ de donnes FileProperties couvre une seule valeur car il contient une seule option. La proprit Filtername dfinit si StarOffice utilise un filtre de texte StarOffice Calc pour ouvrir les fichiers.

Cration de nouveaux documents


StarOffice cre automatiquement un nouveau document si celui indiqu dans l'URL est un modle. Il est galement possible de spcifier, si seul un document vide sans aucune adaptation est ncessaire, un URL private:factory :
Dim Dummy() Dim Url As String Dim Doc As Object Url = "private:factory/swriter" Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, Dummy())

Cet appel cre un document StarOffice writer vide.

Chapitre 5 Utilisation de documents StarOffice 83

Objets Document
La fonction loadComponentFromURL prsente dans la section prcdente renvoie un objet Document. Elle supporte le service com.sun.star.document.OfficeDocument, qui fournit son tour deux interfaces centrales :

l'interface com.sun.star.frame.XStorable, charge d'enregistrer les documents, et l'interface com.sun.star.view.XPrintable, qui contient les mthodes ncessaires l'impression des documents.
En passant StarOffice 7, vous constaterez que la porte des objets Document est reste sensiblement la mme. On y retrouve, par exemple, des mthodes pour enregistrer ou imprimer des documents. Les noms et les paramtres de ces mthodes ont, en revanche, t modifis.

Enregistrement et export de documents


Les documents StarOffice sont enregistrs directement via l'objet Document. La mthode store de l'interface com.sun.star.frame.XStorable a t prvue pour cela :
Doc.store()

Cet appel fonctionne condition qu'un espace mmoire ait dj t attribu au document. Ce n'est pas le cas des nouveaux documents. Dans ce cas, la mthode utilise est storeAsURL. Cette mthode est galement dfinie dans com.sun.star.frame.XStorable et peut servir dfinir l'emplacement du document :
Dim URL As String Dim Dummy() Url = "file:///C:/test3.sxw" Doc.storeAsURL(URL, Dummy())

En plus des mthodes ci-dessus, com.sun.star.frame.XStorable contient galement certaines mthodes d'aide utiles lors de l'enregistrement des documents. Ces mthodes sont les suivantes :

hasLocation() spcifie si un URL a dj t assign au document. isReadonly() - spcifie si un document est dot d'une protection en lecture seule. isModified() - spcifie si un document a t modifi depuis son dernier enregistrement.

Le code permettant d'enregistrer un document peut tre complt par ces options afin que celui-ci ne soit enregistr que si l'objet a vraiment t modifi et que le nom de fichier ne soit demand que si cela est rellement ncessaire :
If (Doc.isModified) Then If (Doc.hasLocation And (Not Doc.isReadOnly)) Then Doc.store() Else

84 StarOffice 7 Manuel de programmation Basic

Doc.storeAsURL(URL, Dummy()) End If End If

Cet exemple commence par vrifier si le document concern a t modifi depuis son dernier enregistrement. Il ne poursuit le processus d'enregistrement que si tel est le cas. Si un URL a dj t assign au document et s'il ne s'agit pas d'un document en lecture seule, il est enregistr sous l'URL existant. S'il n'a pas d'URL ou s'il a t ouvert en lecture seule, il est enregistr sous un nouvel URL.

Options de la mthode storeAsURL


Comme pour la mthode loadComponentFromURL, certaines options peuvent tre spcifies sous la forme d'un champ de donnes PropertyValue l'aide de la mthode storeAsURL. Elles dterminent la procdure utilise par StarOffice pour enregistrer un document. storeAsURL comporte les options suivantes :

CharacterSet (String) dfinit le jeu de caractres utilis par un document. FilterName (String) spcifie un filtre spcial pour la fonction loadComponentFromURL. Les noms des filtres disponibles sont dfinis dans le fichier
\share\config\registry\instance\org\ openoffice\office\TypeDetection.xml.

FilterOptions (String) dfinit des options supplmentaires pour les filtres. Overwrite (Boolean) permet d'craser un fichier existant sans confirmation. Password (String) transmet un mot de passe pour un fichier protg. Unpacked (Boolean) enregistre le document (non compress) dans des sous-rpertoires.

L'exemple suivant montre comment l'option Overwrite peut tre associe storeAsURL :
Dim Doc As Object Dim FileProperties(0) As New com.sun.star.beans.PropertyValue Dim Url As String ' ... Initialisation de Doc Url = "file:///C:/test3.sxw" FileProperties(0).Name = "Overwrite" FileProperties(0).Value = True Doc.storeAsURL(sUrl, mFileProperties())

L'exemple enregistre ensuite Doc sous le nom de fichier spcifi si un fichier existant porte dj ce nom.

Chapitre 5 Utilisation de documents StarOffice 85

Impression de documents
Comme pour l'enregistrement, les documents sont imprims directement via l'objet Document. La mthode Print de l'interface com.sun.star.view.Xprintable est fournie cet effet. Sous sa forme la plus simple, l'appel de print est le suivant :
Dim Dummy() Doc.print(Dummy())

Comme pour la mthode loadComponentFromURL, le paramtre Dummy est un champ de donnes PropertyValue permettant StarOffice de spcifier plusieurs options d'impression.

Options de la mthode print


La mthode print attend en argument un champ de donnes PropertyValue correspondant au paramtrage de la bote de dialogue de StarOffice :

CopyCount (Integer) spcifie le nombre d'exemplaires imprimer. FileName (String) imprime le document dans le fichier spcifi. Collate (Boolean) indique l'imprimante de rassembler les pages de chaque exemplaire. Sort (Boolean) tri les pages lors de l'impression de plusieurs exemplaires (CopyCount > 1). Pages (String) comporte la liste des pages imprimer (selon la syntaxe indique dans la bote de dialogue d'impression).

L'exemple suivant montre comment plusieurs pages d'un document peuvent tre imprimes l'aide de l'option Pages :
Dim Doc As Object Dim PrintProperties(0) As New com.sun.star.beans.PropertyValue PrintProperties(0).Name="Pages" PrintProperties(0).Value="1-3; 7; 9" Doc.print(PrintProperties())

Slection et paramtrage de l'imprimante


L'interface com.sun.star.view.XPrintable fournit la proprit Printer, qui slectionne l'imprimante. Cette proprit reoit un champ de donnes PropertyValue avec les paramtres suivants :

Name (String) spcifie le nom de l'imprimante. PaperOrientation (Enum) spcifie l'orientation du papier (valeur com.sun.star.view.PaperOrientation.PORTRAIT pour l'orientation portrait, com.sun.star.view.PaperOrientation.LANDSCAPE pour l'orientation paysage).

86 StarOffice 7 Manuel de programmation Basic

PaperFormat (Enum) spcifie le format du papier (com.sun.star.view.PaperFormat.A4 pour le format DIN A4 ou com.sun.star.view.PaperFormat.Letter pour le format US Letter, par exemple).

PaperSize (Size) spcifie la taille du papier en centimes de millimtre.

L'exemple suivant montre comment changer d'imprimante et dfinir le format du papier l'aide de la proprit Printer.
Dim Doc As Object Dim PrinterProperties(1) As New com.sun.star.beans.PropertyValue Dim PaperSize As New com.sun.star.awt.Size PaperSize.Width = 20000 PaperSize.Height = 20000 ' Correspond 20 cm ' Correspond 20 cm

PrinterProperties (0).Name="Name" PrinterProperties (0).Value="Ma Laserjet HP" PrinterProperties (1).Name="PaperSize" PrinterProperties (1).Value=PaperSize Doc.Printer = PrinterProperties()

L'exemple dfinit un objet nomm PaperSize avec le type com.sun.star.awt.Size. Cet objet est ncessaire pour spcifier le format de papier. De plus, il cre un champ de donnes pour deux entres PropertyValue nomm PrinterProperties. Il est ensuite initialis avec les valeurs dfinir et assign la proprit Printer. Du point de vue d'UNO, l'imprimante n'est pas une proprit relle, mais en imite une.

Chapitre 5 Utilisation de documents StarOffice 87

Modles
Les modles sont des listes nommes contenant des attributs de formatage. Ils couvrent toutes les applications de StarOffice et contribuent largement simplifier le formatage. Si l'utilisateur modifie l'un des attributs d'un modle, StarOffice modifie automatiquement toutes les sections du document en fonction de l'attribut. L'utilisateur peut donc, par exemple, modifier le type de police de tous les titres de niveau un par une modification centrale dans le document. Selon le type de documents concern, StarOffice reconnat toute une gamme de types de modles diffrents. StarOffice Writer supporte

des modles de caractre, des modles de paragraphe, des modles de cadre, des modles de page des modles de numrotation

StarOffice Calc supporte


des modles de cellule des modles de page

StarOffice Impress supporte


des modles d'lment de caractres des modles de prsentation

Dans la terminologie de StarOffice, les diffrents types de modles sont appels StyleFamilies selon le service com.sun.star.style.StyleFamily sur lequel ils sont bass. Les objets StyleFamilies sont accessibles par l'objet Document :
Dim Doc As Object Dim Sheet As Object Dim StyleFamilies As Object Dim CellStyles As Object Doc = StarDesktop.CurrentComponent StyleFamilies = Doc.StyleFamilies CellStyles = StyleFamilies.getByName("CellStyles")

Cet exemple utilise la proprit StyleFamilies d'un classeur pour tablir une liste de tous les modles de cellules disponibles.

88 StarOffice 7 Manuel de programmation Basic

Il est possible d'accder sparment chaque modle par un indice :


Dim Doc As Object Dim Sheet As Object Dim StyleFamilies As Object Dim CellStyles As Object Dim CellStyle As Object Dim I As Integer Doc = StarDesktop.CurrentComponent StyleFamilies = Doc.StyleFamilies CellStyles = StyleFamilies.getByName("CellStyles") For I = 0 To CellStyles.Count - 1 CellStyle = CellStyles(I) MsgBox CellStyle.Name Next I

La boucle ajoute par rapport l'exemple prcdent affiche successivement les noms de tous les modles de cellule dans une bote de message.

dtails sur diverses options de formatage


Chaque type de modle comporte une gamme complte de proprits individuelles de formatage. Les proprits de formatage les plus importantes sont expliques aux emplacements suivants :

Proprits de caractre, chapitre 6, Documents texte, service com.sun.star.style.CharacterProperties

Proprits de paragraphe, chapitre 6, Documents texte, service com.sun.star.text.Paragraph Proprits de cellule, chapitre 7, Classeurs, service com.sun.star.table.CellProperties

Proprits de page, chapitre 7, Classeurs, service com.sun.star.style.PageStyle

Proprits d'lment de caractre, chapitre 7, Classeurs, services divers

Les proprits de format ne se limitent en aucun cas aux applications dans lesquelles elles sont expliques, mais peuvent tre utilises universellement. Par exemple, la plupart des proprits de page dcrites au chapitre 7 peuvent tre utilises non seulement dans StarOffice Calc, mais galement dans StarOffice Writer. Sur l'utilisation des modles, vous trouverez davantage d'informations au paragraphe Valeurs par dfaut des proprits de caractre et de paragraphe du chapitre 6, Documents texte.

Chapitre 5 Utilisation de documents StarOffice 89

90 StarOffice 7 Manuel de programmation Basic

CHAPITRE

Documents texte
Outre les chanes pures, les documents texte peuvent galement contenir des informations de formatage. Ces informations peuvent apparatre un emplacement quelconque du texte. La structure est rendue encore plus complexe par les tableaux. En effet, ces derniers ne comportent pas seulement des chanes unidimensionnelles, mais galement des champs deux dimensions. La plupart des programmes de traitement de texte offrent maintenant la possibilit d'insrer des objets de dessin, des cadres texte et d'autres objets l'intrieur d'un texte. Ceux-ci peuvent se trouver en dehors des enchanements et se situer un emplacement quelconque sur la page. Ce chapitre prsente les interfaces et services centraux des documents texte. La premire section, qui traite de la structure des documents texte, dcrit la manire dont un programme StarOffice Basic peut tre utilis pour procder des itrations dans un document StarOffice. Elle est axe sur les paragraphes, les portions de paragraphe et leur formatage. La deuxime section traite de la manire de travailler efficacement avec des documents texte. Pour cela, StarOffice fournit plusieurs objets d'aide, tels que l'objet TextCursor, dont le champ d'application dpasse ceux spcifis dans la premire section. La troisime section va au-del du travail sur le texte. Elle traite, entre autres, des tableaux, des cadres texte, des champs texte, des repres de texte et des rpertoires de contenu. La cration, l'ouverture, l'enregistrement et l'impression des documents sont dcrits au chapitre 5, car ils s'appliquent tout type de document et pas seulement aux documents texte.

Structure des documents texte


Un document texte peut contenir essentiellement quatre types d'informations :

le texte proprement dit des modles de formatage des caractres, des paragraphes et des pages des lments non textuels tels que des tableaux, des images et des objets de dessin des paramtres globaux pour le document texte

Cette section se concentre particulirement sur le texte et les options de formatage associes.
La conception de l'API de StarOffice 7 pour StarOffice Writer diffre de celle de la version prcdente. L'ancienne version de l'API tait axe sur l'utilisation de l'objet Selection, trs oriente sur l'ide d'interface utilisateur pour l'utilisateur final, axe sur la mise en vidence l'aide de la souris. L'API de StarOffice 7 a remplac ces connexions entre interface utilisateur et interface programmeur. Le programmeur peut ainsi accder paralllement toutes les parties d'une application et travailler avec des 91

objets simultanment partir de diffrentes subdivisions d'un document. L'ancien objet Selection n'est plus disponible.

Paragraphes et portions de paragraphe


La partie essentielle d'un document texte est constitue d'une suite de paragraphes. Ceux-ci ne sont ni nomms ni indexs, et il n'est donc pas possible d'accder directement des paragraphes individuels. Ils peuvent nanmoins tre parcourus de manire squentielle l'aide de l'objet Enumeration dcrit au chapitre 4. C'est ainsi que les paragraphes peuvent tre dits. Dans l'utilisation de l'objet Enumeration, une particularit doit nanmoins tre note : il ne renvoie pas uniquement des paragraphes, mais galement des tableaux ( strictement parler, dans StarOffice Writer, un tableau est un type spcial de paragraphe). C'est pourquoi, avant d'accder un objet renvoy, vous devez vrifier qu'il supporte le service com.sun.star.text. Paragraph pour les paragraphes ou le service com.sun.star.text.TextTable pour les tableaux. L'exemple qui suit parcourt le contenu d'un document texte dans une boucle et utilise un message dans chaque cas pour informer l'utilisateur si l'objet en question est un paragraphe ou un tableau.
Dim Doc As Object Dim Enum As Object Dim TextElement As Object ' Cration d'un objet Document Doc = StarDesktop.CurrentComponent ' Cration d'un objet Enumeration Enum = Doc.Text.createEnumeration ' Boucle parcourant tous les lments du texte While Enum.hasMoreElements TextElement = Enum.nextElement If TextElement.supportsService("com.sun.star.text.TextTable") Then MsgBox "Le bloc actif contient un tableau." End If If TextElement.supportsService("com.sun.star.text.Paragraph") Then MsgBox "Le bloc actif contient un paragraphe." End If Wend

Cet exemple cre un objet Document Doc qui rfrence le document StarOffice actif. l'aide de Doc, l'exemple cre ensuite un objet Enumeration qui parcourt chaque partie du texte (paragraphes et tableaux) et assigne l'lment actif l'objet TextElement. L'exemple utilise la mthode supportsService pour vrifier si l'objet TextElement est un paragraphe ou un tableau et afficher le message correspondant.

92 StarOffice 7 Manuel de programmation Basic

Paragraphes
Le service com.sun.star.text.Paragraph donne accs au contenu d'un paragraphe. Le texte du paragraphe peut tre extrait et modifi l'aide de la proprit String :
Dim Doc As Object Dim Enum As Object Dim TextElement As Object Doc = StarDesktop.CurrentComponent Enum = Doc.Text.createEnumeration While Enum.hasMoreElements TextElement = Enum.nextElement If TextElement.supportsService("com.sun.star.text.Paragraph") Then TextElement.String = Replace(TextElement.String, "you", "U") TextElement.String = Replace(TextElement.String, "too", "2") TextElement.String = Replace(TextElement.String, "for", "4") End If Wend

Cet exemple ouvre le document texte actif et le parcourt l'aide de l'objet Enumeration. Il utilise la proprit TextElement.String dans tous les paragraphes pour accder aux paragraphes concerns et remplace les chanes you, too et for respectivement par les caractres U, 2 et 4. La fonction Replace utilise pour la substitution n'entre pas dans le domaine linguistique standard de StarOffice Basic. Il s'agit d'une nouvelle utilisation de la fonction d'exemple dcrite au chapitre 3 dans la section Recherche et remplacement.

Le contenu de la procdure dcrite ici pour accder aux paragraphes d'un texte est comparable la liste Paragraphs utilise dans VBA et situe dans les objets Range et Document de VBA. Mais contrairement VBA, o les paragraphes sont accessibles par leur indice (par l'appel Paragraph(1), par exemple), il est ncessaire, dans StarOffice Basic, d'utiliser l'objet Enumeration dcrit ci-dessus. StarOffice Basic ne comporte aucun quivalent des listes Characters, Sentences et Words fournies dans VBA. En revanche, vous pouvez utiliser un objet TextCursor permettant la navigation l'chelle des caractres, des phrases et des mots (voir TextCursor).

Portions de paragraphe
L'exemple prcdent peut effectuer les substitutions souhaites dans le texte, mais il peut galement parfois dtruire le formatage. En effet, un paragraphe est constitu de sous-objets individuels. Chacun de ces sous-objets contient ses propres informations de formatage. Si un paragraphe contient en son milieu un mot en gras, par exemple, il est reprsent dans StarOffice par trois portions de paragraphe : la portion prcdant le gras, le mot en gras et la portion situe aprs le gras, dfinie de nouveau comme normale.

Chapitre 6 Documents texte 93

Si le texte du paragraphe est modifi l'aide de la proprit String du paragraphe, StarOffice commence par supprimer les anciennes portions du paragraphe et en insre une nouvelle. Le formatage des sections prcdentes est alors perdu. Pour viter cela, l'utilisateur peut accder aux portions concernes du paragraphe au lieu du paragraphe entier. Pour cela, les paragraphes comportent leur propre objet Enumeration. L'exemple suivant montre une double boucle qui parcourt tous les paragraphes d'un document texte et les portions de paragraphes qu'ils contiennent, puis applique les remplacements de l'exemple prcdent :
Dim Doc As Object Dim Enum1 As Object Dim Enum2 As Object Dim TextElement As Object Dim TextPortion As Object Doc = StarDesktop.CurrentComponent Enum1 = Doc.Text.createEnumeration ' Boucle parcourant tous les paragraphes While Enum1.hasMoreElements TextElement = Enum1.nextElement If TextElement.supportsService("com.sun.star.text.Paragraph") Then Enum2 = TextElement.createEnumeration ' Boucle parcourant tous les sous-paragraphes While Enum2.hasMoreElements TextPortion = Enum2.nextElement MsgBox "'" & TextPortion.String & "'" TextPortion.String = Replace(TextPortion.String, "you", "U") TextPortion.String = Replace(TextPortion.String, "too", "2") TextPortion.String = Replace(TextPortion.String, "for", "4") Wend End If Wend

L'exemple parcourt un document texte par une double boucle. La boucle externe se rapporte aux paragraphes du texte. La boucle interne traite les portions de paragraphe l'intrieur de ces paragraphes. L'exemple de code modifie le contenu de chacune de ces portions de paragraphe l'aide de la proprit String de la chane, comme l'exemple prcdent le faisait pour les paragraphes. Mais les portions de paragraphe tant modifies directement, leurs informations de formatage sont conserves lors du remplacement de la chane.

Formatage
Le texte peut tre format de diffrentes manires . La manire la plus simple consiste assigner les proprits de format directement la squence de texte. On parle dans ce cas de formatage direct. Le formatage direct est particulirement utilis dans les documents courts, car les formats peuvent tre assigns par l'utilisateur l'aide de la souris. Vous pouvez, par exemple, mettre en valeur un mot l'intrieur du texte en le mettant en gras ou centrer une ligne.
94 StarOffice 7 Manuel de programmation Basic

En plus du formatage direct, vous pouvez galement formater le texte l'aide de modles. On parle alors de formatage indirect. Avec le formatage indirect, l'utilisateur assigne un modle prdfini la portion de texte concerne. Si la prsentation du texte est modifie par la suite, il suffit l'utilisateur de modifier le modle. StarOffice modifie alors la manire dont toutes les portions de texte utilisant ce modle sont reprsentes.
Dans VBA, les proprits de formatage d'un objet se rpartissent gnralement sur toute une gamme de sousobjets (par exemple Range.Font, Range.Borders, Range.Shading, Range.ParagraphFormat). On accde ces proprits par des expressions en cascade (par exemple Range.Font.AllCaps). Dans StarOffice Basic, en revanche, les proprits de formatage sont accessibles directement, l'aide des objets concerns (TextCursor, Paragraph, etc.). Les proprits de caractre et de paragraphe disponibles dans StarOffice sont prsentes dans les deux sections suivantes.

Dans l'ancienne API de StarOffice, un texte tait essentiellement format l'aide de l'objet Selection et ses objets subordonns (Selection.Font, Selection.Paragraph et Selection.Border, par exemple). Dans la nouvelle API, les proprits de formatage figurent dans chaque objet (Paragraph, TextCursor, etc.) et peuvent tre appliques directement. Une liste des proprits de caractre et de paragraphe disponibles figure dans les paragraphes suivants.

Proprits de caractre
Les proprits de format se rapportant individuellement aux caractres sont dcrites comme proprits de caractre. Elles comprennent notamment le type de gras et le type de police. Les objets permettant de dfinir des proprits de caractre doivent supporter le service com.sun.star.style.CharacterProperties. StarOffice reconnat une gamme tendue de services supportant ce service. C'est le cas des services com.sun.star.text.Paragraph pour les paragraphes et de com.sun.star.text.TextPortion pour les portions de paragraphes. Le service com.sun.star.style.CharacterProperties ne fournit aucune interface, mais une gamme de proprits permettant de dfinir et d'appeler des proprits de caractre. Une liste complte des proprits de caractre se trouve dans la rfrence de l'API de StarOffice. La liste suivante dcrit les plus importantes :

CharFontName (String) le nom du type de police slectionn. CharColor (Long) la couleur du texte. CharHeight (Float) CharHeight (Float) la hauteur du caractre en points (pt). CharUnderline (Constant group) le type de soulignage (constantes selon com.sun.star.awt.FontUnderline).

CharWeight (Constant group) la graisse de la police (constantes selon com.sun.star.awt.FontWeight).

CharBackColor (Long) la couleur d'arrire-plan. CharKeepTogether (Boolean) suppression des retours la ligne automatiques. CharStyleName (String) le nom du modle de caractre.

Chapitre 6 Documents texte 95

Proprits de paragraphe
Les informations de formatage qui ne se rapportent pas des caractres individuels, mais un paragraphe entier, sont considres comme des proprits de paragraphe. Cela inclut la distance entre le paragraphe et le bord de la page ou l'interligne. Les proprits de paragraphe sont accessibles par le service com.sun.star.style.ParagraphProperties. Mme les proprits de paragraphe sont disponibles dans divers objets. Tous les objets supportant le service com.sun.star.text.Paragraph supportent galement les proprits de paragraphe dans com.sun.star.style.ParagraphProperties. Une liste complte des proprits de paragraphe se trouve dans la rfrence de l'API de StarOffice. Les plus courantes sont les suivantes :

ParaAdjust (enum) orientation verticale du texte (constantes selon com.sun.star.style.ParagraphAdjust).

ParaLineSpacing (struct) l'interligne (structure selon com.sun.star.style.LineSpacing).

ParaBackColor (Long) la couleur d'arrire-plan. ParaLeftMargin (Long) la marge gauche en centimes de millimtre. ParaRightMargin (Long) la marge droite en centimes de millimtre. ParaTopMargin (Long) la marge suprieure en centimes de millimtre. ParaBottomMargin (Long) la marge infrieure en centimes de millimtre. ParaTabStops (Array of struct) le type et la position des tabulations (tableau avec des structures du type com.sun.star.style.TabStop).

ParaStyleName (String) le nom du modle de paragraphe.

96 StarOffice 7 Manuel de programmation Basic

Exemple : export HTML simple


L'exemple suivant montre comment manipuler des informations de formatage. Il procde par itrations l'intrieur d'un document texte et cre un fichier HTML simple. Dans ce but, chaque paragraphe est enregistr dans son propre lment HTML <P>. Les portions de paragraphe affiches en gras sont marques d'un lment HTML <B> lors de leur export.
Dim FileNo As Integer, Filename As String, CurLine As String Dim Doc As Object Dim Enum1 As Object, Enum2 As Object Dim TextElement As Object, TextPortion As Object Filename = "c:\text.html" FileNo = Freefile Open Filename For Output As #FileNo Print #FileNo, "<HTML><BODY>" Doc = StarDesktop.CurrentComponent Enum1 = Doc.Text.createEnumeration ' Boucle parcourant tous les paragraphes While Enum1.hasMoreElements TextElement = Enum1.nextElement If TextElement.supportsService("com.sun.star.text.Paragraph") Then Enum2 = TextElement.createEnumeration CurLine = "<P>" ' Boucle parcourant toutes les portions de paragraphe While Enum2.hasMoreElements TextPortion = Enum2.nextElement If TextPortion.CharWeight = com.sun.star.awt.FontWeight.BOLD THEN CurLine = CurLine & "<B>" & TextPortion.String & "</B>" Else CurLine = CurLine & TextPortion.String End If Wend ' Export de la ligne CurLine = CurLine & "</P>" Print #FileNo, CurLine End If Wend ' criture des balises HTML de fin Print #FileNo, "</BODY></HTML>" Close #FileNo

Chapitre 6 Documents texte 97

La structure de base de cet exemple reprend celle des exemples parcourant les portions de paragraphe d'un texte, dj aborde plus haut. Les fonctions d'criture du fichier HTML, ainsi qu'un bloc test vrifiant la graisse des portions de texte correspondantes et mettant en gras des portions de paragraphe par une balise HTML correspondante, ont t ajoutes.

Valeurs par dfaut des proprits de caractre et de paragraphe


Le formatage direct est toujours prioritaire sur le formatage indirect. Autrement dit, une priorit infrieure est attribue au formatage l'aide de modles par rapport au formatage direct dans un texte. Il n'est pas facile d'tablir si une section d'un document a t formate directement ou indirectement. Les barres de symboles fournies par StarOffice affichent les proprits de texte courantes telles que le type de police, la graisse et la taille. Mais elles n'indiquent pas si ces proprits ont t dfinies par un modle ou directement dans le texte. StarOffice Basic comporte la mthode getPropertyState, permettant aux programmeurs de vrifier comment une proprit a t formate. Elle prend le nom de la proprit en argument et renvoie une constante indiquant l'origine du formatage. Les rponses possibles, dfinies dans l'numration com.sun.star.beans.PropertyState, sont les suivantes :

com.sun.star.beans.PropertyState.DIRECT_VALUE la proprit est dfinie directement dans le texte (formatage direct), com.sun.star.beans.PropertyState.DEFAULT_VALUE la proprit est dfinie via un modle (formatage indirect) com.sun.star.beans.PropertyState.AMBIGUOUS_VALUE l'origine du formatage est inconnue. Cet tat apparat, par exemple, lorsque la mthode interroge la proprit graisse d'un paragraphe comportant des mots en gras et d'autres en maigre.

L'exemple suivant montre comment les proprits de format peuvent tre dites dans StarOffice. Il recherche dans un texte les portions de paragraphe qui ont t dfinies en gras par formatage direct. S'il trouve une portion de paragraphe correspondante, il supprime le formatage direct l'aide de la mthode setPropertyToDefault et assigne un modle de caractre MyBold la portion de paragraphe correspondante.

98 StarOffice 7 Manuel de programmation Basic

Dim Doc As Object Dim Enum1 As Object Dim Enum2 As Object Dim TextElement As Object Dim TextPortion As Object Doc = StarDesktop.CurrentComponent Enum1 = Doc.Text.createEnumeration ' Boucle parcourant tous les paragraphes While Enum1.hasMoreElements TextElement = Enum1.nextElement If TextElement.supportsService("com.sun.star.text.Paragraph") Then Enum2 = TextElement.createEnumeration ' Boucle parcourant toutes les portions de paragraphe While Enum2.hasMoreElements TextPortion = Enum2.nextElement If TextPortion.CharWeight = _ com.sun.star.awt.FontWeight.BOLD AND _ TextPortion.getPropertyState("CharWeight") = _ com.sun.star.beans.PropertyState.DIRECT_VALUE Then TextPortion.setPropertyToDefault("CharWeight") TextPortion.CharStyleName = "MyBold" End If Wend End If Wend

Chapitre 6 Documents texte 99

dition de documents texte


La section prcdente traitait d'un vaste ensemble d'options permettant l'dition de documents texte axes sur les services com.sun.star.text.TextPortion et com.sun.star.text.Paragraph, permettant d'accder aux portions de paragraphe et aux paragraphes. Ces services sont adapts aux applications dans lesquelles le contenu du texte doit tre dit par un passage dans une boucle. En revanche, ils ne suffisent pas pour rsoudre de nombreux problmes. Pour les tches plus complexes, StarOffice comporte le service com.sun.star.text.TextCursor, notamment pour le parcours d'un document en sens inverse, phrase par phrase ou mot par mot, plutt que par objets TextPortions.

TextCursor
Un objet TextCursor dans l'API de StarOffice est comparable au curseur visible utilis dans un document StarOffice. Il marque un certain point l'intrieur d'un document texte et peut tre dplac dans diverses directions au moyen de commandes. Toutefois, les objets TextCursor disponibles dans StarOffice Basic ne doivent pas tre confondus avec le curseur visible. Ils correspondent deux choses diffrentes.
Attention ! La terminologie diffre de celle de VBA : en ce qui concerne la porte de la fonction, l'objet Range de VBA peut tre compar l'objet TextCursor de StarOffice et non comme son nom porterait le croire l'objet Range de StarOffice. L'objet TextCursor de StarOffice, par exemple, fournit des mthodes de navigation et de modification du texte qui sont incluses dans l'objet Range de VBA (par exemple MoveStart, MoveEnd, InsertBefore et InsertAfter). Les quivalents correspondants de l'objet TextCursor de StarOffice sont dcrits dans les sections suivantes.

Navigation l'intrieur d'un texte


L'objet TextCursor de StarOffice Basic agit indpendamment du curseur visible dans un document texte. Un dplacement d'un objet TextCursor command par le programme n'a aucune incidence sur le curseur visible. Plusieurs objets TextCursor peuvent mme tre ouverts pour le mme document et utiliss divers emplacements indpendamment les uns des autres. Un objet TextCursor est cr par l'appel createTextCursor :
Dim Doc As Object Dim Cursor As Object Doc = StarDesktop.CurrentComponent Cursor = TextDocument.Text.createTextCursor()

L'objet Cursor cr de cette manire supporte le service com.sun.star.text.TextCursor, qui comporte toute une gamme de mthodes de navigation dans les documents texte. L'exemple qui suit commence par dplacer l'objet TextCursor de dix caractres vers la gauche, et le dplace ensuite de trois caractres vers la droite :
Cursor.goLeft(10, False)

100 StarOffice 7 Manuel de programmation Basic

Cursor.goRight(3, False)

Un objet TextCursor peut mettre en vidence toute une zone. On peut comparer cela la mise en vidence d'un emplacement du texte l'aide de la souris. Le paramtre False dans la fonction cidessus spcifie si la zone traverse par le curseur doit ou non tre mise en vidence. Par exemple, dans l'exemple suivant, l'objet TextCursor
Cursor.goLeft(10, False) Cursor.goRight(3, True)

commence par se dplacer de dix caractres vers la droite sans mise en vidence, puis revient trois caractres en arrire et met ces caractres en vidence. La zone mise en vidence par l'objet TextCursor commence donc aprs le septime caractre du texte et se termine aprs le dixime. Les mthodes centrales offertes par le service com.sun.star.text.TextCursor pour la navigation sont les suivantes :

goLeft (Count, Expand) dplacement de Count caractres vers la gauche. goRight (Count, Expand) dplacement de Count caractres vers la droite. gotoStart (Expand) dplacement au dbut du document texte. gotoEnd (Expand) dplacement la fin du document texte. gotoRange (TextRange, Expand) dplacement l'objet TextRange spcifi. gotoStartOfWord (Expand) dplacement au dbut du mot actif. gotoEndOfWord (Expand) dplacement la fin du mot actif. gotoNextWord (Expand) dplacement au dbut du mot suivant. gotoPreviousWord (Expand) dplacement au dbut du mot prcdent. isStartOfWord () - renvoie True si le TextCursor est au dbut d'un mot. isEndOfWord () - renvoie True si le TextCursor est la fin d'un mot. gotoStartOfSentence (Expand) dplacement au dbut de la phrase active. gotoEndOfSentence (Expand) dplacement la fin de la phrase active. gotoNextSentence (Expand) dplacement au dbut de la phrase suivante. gotoPreviousSentence (Expand) dplacement au dbut de la phrase prcdente. isStartOfSentence () - renvoie True si le TextCursor est au dbut d'une phrase. isEndOfSentence () - renvoie True si le TextCursor est la fin d'une phrase. gotoStartOfParagraph (Expand) dplacement au dbut du paragraphe actif. gotoEndOfParagraph (Expand) dplacement la fin du paragraphe actif. gotoNextParagraph (Expand) dplacement au dbut du paragraphe suivant. gotoPreviousParagraph (Expand) dplacement au dbut du paragraphe prcdent. isStartOfParagraph () renvoie True si le TextCursor est au dbut d'un paragraphe.

Chapitre 6 Documents texte 101

isEndOfParagraph () renvoie True si le TextCursor est la fin d'un paragraphe.

Le texte est dcoup en phrases en fonction des symboles de phrase. Par exemple, les points sont interprts comme des symboles indiquant la fin des phrases. Le paramtre Expand est une valeur de type Boolean indiquant si la zone traverse lors du dplacement doit tre ou non mise en vidence. Toutes les mthodes de navigation renvoient un paramtre indiquant si la navigation a russi ou si l'action s'est termine faute de texte. Voici une liste de plusieurs mthodes d'dition de zones en vidence l'aide d'un objet TextCursor et supportant galement le service com.sun.star.text.TextCursor :

collapseToStart () rinitialise la mise en vidence et positionne le TextCursor au dbut de la zone prcdemment mise en vidence. collapseToEnd () rinitialise la mise en vidence et positionne le TextCursor la fin de la zone prcdemment mis en vidence. isCollapsed () renvoie True si l'objet TextCursor ne recouvre aucune zone mise en vidence.

Formatage du texte avec TextCursor


Le service com.sun.star.text.TextCursor toutes les proprits de caractre et de paragraphe prsentes au dbut de ce chapitre. L'exemple suivant montre comment ces proprits peuvent tre associes un objet TextCursor. Il parcourt un document complet et met en gras le premier mot de chaque phrase.
Dim Doc As Object Dim Cursor As Object Dim Proceed As Boolean Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor Do Cursor.gotoEndOfWord(True) Cursor.CharWeight = com.sun.star.awt.FontWeight.BOLD Proceed = Cursor.gotoNextSentence(False) Cursor.gotoNextWord(False) Loop While Proceed

L'exemple commence par crer un objet Document pour le texte qui vient d'tre ouvert. Il parcourt ensuite par itrations le texte entier, phrase par phrase, met en vidence le premier mot et le formate en gras.

102 StarOffice 7 Manuel de programmation Basic

Extraction et modification du contenu d'un texte


Si un objet TextCursor contient une zone mise en vidence, ce texte est accessible par la proprit String de TextCursor. L'exemple suivant utilise la proprit String pour afficher les premiers mots d'une phrase dans une bote de message :
Dim Doc As Object Dim Cursor As Object Dim Proceed As Boolean Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor Do Cursor.gotoEndOfWord(True) MsgBox Cursor.String Proceed = Cursor.gotoNextSentence(False) Cursor.gotoNextWord(False) Loop While Proceed

Le premier mot de chaque phrase peut tre modifi de la mme manire l'aide de la proprit String :
Dim Doc As Object Dim Cursor As Object Dim Proceed As Boolean Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor Do Cursor.gotoEndOfWord(True) Cursor.String = "Ups" Proceed = Cursor.gotoNextSentence(False) Cursor.gotoNextWord(False) Loop While Proceed

Si l'objet TextCursor contient une zone en surbrillance, une assignation de la proprit String la remplace par le nouveau texte. Si aucune zone n'est mise en vidence, le texte est insr la position de l'objet TextCursor.

Chapitre 6 Documents texte 103

Insertion de codes de contrle


Dans certaines situations, la partie modifier n'est pas le texte du document mais sa structure. StarOffice fournit des codes de contrle cet usage. Ces codes s'insrent dans le texte et influent sur sa structure. Les codes de contrle sont dfinis dans le groupe de constantes com.sun.star.text.ControlCharacter. Les codes de contrle disponibles dans StarOffice sont les suivants :

PARAGRAPH_BREAK un saut de paragraphe. LINE_BREAK un retour la ligne l'intrieur d'un paragraphe. SOFT_HYPHEN un point possible de coupure de mot. HARD_HYPHEN un point obligatoire de coupure de mot. HARD_SPACE un espace protg qui ne sera ni tendu, ni compress dans un texte justifi.

Pour insrer des codes de contrle, non seulement le curseur, mais galement les objets de document texte associs sont ncessaires. L'exemple suivant insre un saut de paragraphe aprs le 20e caractre d'un texte :
Dim Doc As Object Dim Cursor As Object Dim Proceed As Boolean Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor Cursor.goRight(20, False) Doc.Text.insertControlCharacter(Cursor, _ com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)

Le paramtre False pass dans l'appel de la mthode insertControlCharacter assure que la zone mise en vidence par l'objet TextCursor est conserve aprs l'opration d'insertion. Si le paramtre True est transmis ici, insertControlCharacter remplace le texte actif.

Recherche de portions de texte


Il est souvent ncessaire de rechercher un terme particulier dans un texte et de l'diter. Tous les documents StarOffice fournissent pour cela une interface spciale qui fonctionne toujours selon le mme principe : avant chaque recherche, il faut crer ce que l'on appelle communment un objet SearchDescriptor. Il dfinit ce que StarOffice recherche dans un document. Un objet SearchDescriptor supporte le service com.sun.star.util.SearchDescriptor et peut tre cr l'aide de la mthode createSearchDescriptor d'un document :
Dim SearchDesc As Object SearchDesc = Doc.createSearchDescriptor

Lorsque l'objet SearchDescriptor a t cr, il reoit le texte rechercher :

104 StarOffice 7 Manuel de programmation Basic

SearchDesc.searchString="tout texte"

Du points de vue de son fonctionnement, l'objet SearchDescriptor est comparable la bote de dialogue de recherche de StarOffice. Comme dans cette bote de dialogue, les paramtres ncessaires une recherche peuvent tre dfinis dans l'objet SearchDescriptor. Les proprits sont fournies par le service com.sun.star.util.SearchDescriptor :

SearchBackwards (Boolean) - effectue la recherche en parcourant le texte en arrire et non en avant. SearchCaseSensitive (Boolean) - distingue les majuscules des minuscules lors de la recherche. SearchRegularExpression (Boolean) - traite la chane rechercher comme une expression contenant des caractres gnriques. SearchStyles (Boolean) - recherche dans le texte le modle de paragraphe spcifi. SearchWords (Boolean) - ne recherche que des mots entiers.

La fonction SearchSimilarity de StarOffice (ou "correspondance floue") est galement disponible dans StarOffice Basic. Avec cette fonction, StarOffice recherche une expression similaire, mais pas ncessairement exactement semblable l'expression spcifie. Le nombre de caractres supplmentaires, supprims ou modifis de ces expressions peut tre dfini individuellement. Les proprits associes au service com.sun.star.util.SearchDescriptor sont les suivantes :

SearchSimilarity (Boolean) - effectue une recherche de similarit. SearchSimilarityAdd (Short) - le nombre de caractres pouvant tre ajouts dans une recherche de similarit. SearchSimilarityExchange (Short) - le nombre de caractres pouvant tre diffrents dans une recherche de similarit. SearchSimilarityRemove (Short) - le nombre de caractres pouvant tre absents dans une recherche de similarit. SearchSimilarityRelax (Boolean) - tient compte simultanment de toutes les rgles de dviation pour l'expression de recherche.

Une fois que l'objet SearchDescriptor a t paramtr de faon approprie, il peut tre appliqu au document texte. Pour cela, les documents StarOffice disposent des mthodes findFirst et findNext :
Found = Doc.findFirst (SearchDesc) Do While Found ' Traitement du rsultat de la recherche Found = Doc.findNext( Found.End, Search) Loop

Chapitre 6 Documents texte 105

Cet exemple recherche toutes les correspondances l'intrieur d'une boucle et renvoie un objet TextRange, qui se rapporte au passage de texte trouv.

Exemple : Recherche de similarit


Cet exemple montre comment le terme "chiffre d'affaires" peut tre recherch dans un texte et comment le rsultat peut tre mis en gras. Une recherche de similarit est utilise pour que le terme "chiffre d'affaires", mais galement sa forme plurielle "chiffres d'affaires" et ses variantes comme "chiffre daffaires" soient recherches. Les expressions trouves diffrent au maximum de deux lettres de l'expression recherche :
Dim SearchDesc As Object Dim Doc As Object Doc = StarDesktop.CurrentComponent SearchDesc = Doc.createSearchDescriptor SearchDesc.SearchString="chiffre d'affaires" SearchDesc.SearchSimilarity = True SearchDesc.SearchSimilarityAdd = 2 SearchDesc.SearchSimilarityExchange = 2 SearchDesc.SearchSimilarityRemove = 2 SearchDesc.SearchSimilarityRelax = False Found = Doc.findFirst (SearchDesc) Do While Found Found.CharWeight = com.sun.star.awt.FontWeight.BOLD Found = Doc.findNext( Found.End, Search) Loop

Le concept de base de la recherche et remplacement dans StarOffice est comparable celui utilis dans VBA. Les deux interfaces fournissent un objet, permettant de dfinir les proprits de recherche et de remplacement. Cet objet est ensuite appliqu la zone de texte approprie pour effectuer l'action. Alors que, dans VBA, l'objet auxiliaire charg de cela est accessible par la proprit Find de l'objet Range, il est cr dans StarOffice Basic par un appel createSearchDescriptor ou createReplaceDescriptor de l'objet Document. Mme les proprits et mthodes de recherche disponibles sont diffrentes.

Comme dans l'ancienne API de StarOffice, la recherche et le remplacement de texte dans la nouvelle API sont galement effectus l'aide de l'objet Document. Mais alors qu'il existait prcdemment un objet SearchSettings destin spcialement dfinir les options de recherche, dans la nouvelle API, les recherches sont dsormais effectues l'aide d'un objet SearchDescriptor ou ReplaceDescriptor pour le remplacement automatique de texte. Ces objets ne couvrent pas uniquement les options, mais galement le texte recherch et, le cas chant, le texte de remplacement associ. Les objets Descriptor sont crs l'aide de l'objet Document, complts selon les requtes concernes, puis transfrs de nouveau l'objet Document sous forme de paramtres passs dans les mthodes de recherche.

106 StarOffice 7 Manuel de programmation Basic

Remplacement de portions de texte


Tout comme la fonction de recherche, la fonction de remplacement de StarOffice est galement disponible dans StarOffice Basic. Les deux fonctions sont traites de manire identique. Un objet spcial stockant les paramtres du processus est tout d'abord ncessaire au processus de remplacement. Il s'appelle ReplaceDescriptor et supporte le service com.sun.star.util.ReplaceDescriptor. Toutes les proprits de l'objet SearchDescriptor dcrites dans le paragraphe prcdent sont galement supportes par ReplaceDescriptor. Par exemple, la distinction entre majuscules et minuscules peut galement tre active et dsactive dans un processus de remplacement, et les recherches de similarit sont galement possibles. L'exemple suivant montre l'utilisation d'objets ReplaceDescriptor dans une recherche sur un document StarOffice.
Dim I As Long Dim Doc As Object Dim Replace As Object Dim BritishWords(5) As String Dim USWords(5) As String BritishWords() = Array("colour", "neighbour", "centre", "behaviour", _ "metre", "through") USWords() = Array("color", "neighbor", "center", "behavior", _ "meter", "thru") Doc = StarDesktop.CurrentComponent Replace = Doc.createReplaceDescriptor For I = 0 To 5 Replace.SearchString = BritishWords(I) Replace.ReplaceString = USWords(I) Doc.replaceAll(Replace) Next I

Les expressions de recherche et de remplacement sont dfinies l'aide des proprits SearchString et ReplaceString des objets ReplaceDescriptor. Le processus rel de remplacement est finalement implment l'aide de la mthode replaceAll de l'objet Document, qui remplace toutes les occurrences de l'expression recherche.

Exemple : recherche et remplacement de texte avec des caractres gnriques


La fonction de remplacement de StarOffice est particulirement efficace lorsqu'elle est associe des caractres gnriques. Ces derniers permettent de dfinir une expression de recherche variable avec des substituants et des caractres spciaux au lieu d'une valeur fixe. Les caractres gnriques supports par StarOffice sont dcrits en dtail dans la section de l'aide en ligne de StarOffice. Voici quelques exemples :

Chapitre 6 Documents texte 107

Un point l'intrieur d'une expression rechercher remplace tout caractre. L'expression rais.n peut ainsi s'appliquer la fois raison et raisin.

Le caractre ^ marque le dbut d'un paragraphe. Toutes les occurrences du nom Pierre situes au dbut d'un paragraphe peuvent ainsi tre trouves l'aide de l'expression de recherche ^Pierre.

Le caractre $ marque la fin d'un paragraphe. Toutes les occurrences du nom Pierre situes la fin d'un paragraphe peuvent ainsi tre trouves l'aide de l'expression de recherche Pierre$.

Un * indique que le caractre prcdent peut tre rpt un nombre de fois quelconque. Il peut tre combin avec le point en tant que substituant de tout caractre. L'expression tempr.*e peut par exemple, permettre de rechercher les expressions temprance et temprature.

L'exemple suivant montre comment toutes les lignes vides d'un document texte peuvent tre supprimes l'aide de caractres gnriques ^$ :
Dim Doc As Object Dim Replace As Object Dim I As Long Doc = StarDesktop.CurrentComponent Replace = Doc.createReplaceDescriptor Replace.SearchRegularExpression = True Replace.SearchString = "^$" Replace.ReplaceString = "" Doc.replaceAll(Replace)

Documents texte : plus que du texte


Jusqu' prsent, ce chapitre ne traitait que des paragraphes de texte et de portions de paragraphe. Mais les documents texte peuvent galement contenir d'autres objets. Il peut s'agir de tableaux, de dessins, de champs texte et de rpertoires. Tous ces objets peuvent tre ancrs un point quelconque du texte. Grce ces fonctions communes, tous ces objets de StarOffice supportent un service de base commun appel com.sun.star.text.TextContent. Ce dernier fournit les proprits suivantes :

AnchorType (Enum) dtermine le type d'ancre de l'objet TextContent (valeurs par dfaut selon l'numration com.sun.star.text.TextContentAnchorType). AnchorTypes (sequence of Enum) l'numration de tous les AnchorTypes qui supportent un objet TextContent spcial. TextWrap (Enum) dtermine le type d'habillage d'un objet TextContent (valeurs par dfaut selon l'numration com.sun.star.text.WrapTextMode).

108 StarOffice 7 Manuel de programmation Basic

Les objets TextContent partagent galement certaines mthodes notamment celles permettant de crer, d'insrer et de supprimer des objets.

Un nouvel objet TextContent est cr l'aide de la mthode createInstance de l'objet Document. Un objet est insr l'aide de la mthode insertTextContent de l'objet Text. TextContent sont supprims l'aide de la mthode removeTextContent.

Ces mthodes sont utilises dans les exemples des sections suivantes.

Tableaux
L'exemple suivant cre un tableau l'aide de la mthode createInstance dcrite plus haut.
Dim Doc As Object Dim Table As Object Dim Cursor As Object Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor() Table = Doc.createInstance("com.sun.star.text.TextTable") Table.initialize(5, 4) Doc.Text.insertTextContent(Cursor, Table, False)

Lorsqu'il est cr, son nombre de lignes et de colonnes est dfini l'aide d'un appel initialize, puis insr dans le document texte l'aide de insertTextContent. Comme le montre cet exemple, la mthode insertTextContent attend non seulement l'insertion de l'objet Content, mais galement celle de deux autres paramtres :

un objet Cursor dterminant la position d'insertion une variable de type Boolean indiquant si l'objet Content doit remplacer la slection active du curseur (valeur True) ou tre insr dans le texte devant la slection active (False)
Lors de la cration et de l'insertion de tableaux dans un document texte, les objets utiliss dans StarOffice Basic sont similaires ceux disponibles dans VBA : l'objet Document et un objet TextCursor dans StarOffice Basic ou son quivalent Range dans VBA. Alors que la mthode Document.Tables.Add gre la cration et le paramtrage du tableau dans VBA, dans StarOffice Basic, celui-ci est cr l'aide de la mthode createInstance puis initialis et insr dans le document via insertTextContent, comme dans l'exemple ci-dessus.

Il est possible de dterminer les tableaux insrs dans un document texte l'aide d'une simple boucle. On utilise pour cela la mthode getTextTables() de l'objet document texte :
Dim Doc As Object Dim TextTables As Object Dim Table As Object Dim I As Integer Doc = StarDesktop.CurrentComponent

Chapitre 6 Documents texte 109

TextTables = Doc.getTextTables() For I = 0 to TextTables.count - 1 Table = TextTables(I) ' dition du tableau Next I

Les tableaux de texte sont disponibles dans StarOffice 7 via la liste TextTables de l'objet Document. Celle-ci remplace la liste de tableaux fournie prcdemment dans l'objet Selection. L'exemple prcdent montre comment crer un tableau de texte. Les options permettant d'accder aux tableaux de texte sont dcrites dans la section suivante.

dition des tableaux


Un tableau est constitu de cellules individuelles. Ces cellules peuvent leur tour contenir diverses autres cellules. strictement parler, les colonnes de tableau n'existent pas dans StarOffice. Elles sont produites implicitement par la juxtaposition des cellules l'une en dessous de l'autre. Pour simplifier l'accs aux tableaux, StarOffice fournit nanmoins certaines mthodes fonctionnant avec des colonnes. Elles peuvent tre utiles si aucune cellule du tableau n'a t fusionne. Commenons par examiner les proprits du tableau lui-mme. Elles sont dfinies dans le service com.sun.star.text.TextTable. Les proprits les plus importantes de l'objet Table sont les suivantes :

BackColor (Long) la couleur d'arrire-plan du tableau. BottomMargin (Long) la marge infrieure en centimes de millimtre. LeftMargin (Long) la marge gauche en centimes de millimtre. RightMargin (Long) la marge droite en centimes de millimtre. TopMargin (Long) la marge suprieure en centimes de millimtre. RepeatHeadline (Boolean) rptition ou non de l'en-tte du tableau sur chaque page. Width (Long) la largeur absolue du tableau en centimes de millimtre.

Lignes
Un tableau est constitu d'une liste de lignes. L'exemple suivant montre comment il est possible d'accder aux lignes d'un tableau et de le formater.
Dim Doc As Object Dim Table As Object Dim Cursor As Object Dim Rows As Object Dim Row As Object Dim I As Integer Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor()

110 StarOffice 7 Manuel de programmation Basic

Table = Doc.createInstance("com.sun.star.text.TextTable") Table.initialize(5, 4) Doc.Text.insertTextContent(Cursor, Table, False) Rows = Table.getRows For I = 0 To Rows.getCount() - 1 Row = Rows.getByIndex(I) Row.BackColor = &HFF00FF Next

Cet exemple commence par crer une liste contenant toutes les lignes utilisant un appel Table.getRows. Les mthodes getCount et getByIndex permettent de poursuivre le traitement de la liste et appartiennent l'interface com.sun.star.table.XtableRows. La mthode getByIndex renvoie un objet Row, supportant le service com.sun.star.text.TextTableRow. Les mthodes centrales de l'interface com.sun.star.table.XtableRows sont les suivantes :

getByIndex(Integer) renvoie un objet Row pour l'indice spcifi. getCount() renvoie le nombre d'objets Row. insertByIndex(Index, Count) insre Count lignes dans le tableau partir de la position Index.

removeByIndex(Index, Count) supprime Count lignes du tableau partir de la position Index.

Alors que les mthodes getByIndex et getCount sont disponibles dans tous les tableaux, les mthodes insertByIndex et removeByIndex ne peuvent tre utilises que dans les tableaux qui ne contiennent pas de cellules fusionnes. Le service com.sun.star.text.TextTableRow fournit les proprits suivantes :

BackColor (Long) la couleur d'arrire-plan de la ligne. Height (Long) la hauteur de la ligne en centimes de millimtre. IsAutoHeight (Boolean) la hauteur de la ligne s'adapte automatiquement au contenu. VertOrient (const) orientation verticale du cadre texte dtails sur l'orientation verticale du texte l'intrieur du tableau (valeurs selon com.sun.star.text.VertOrientation)

Colonnes
Comme pour les lignes, on accde aux colonnes en appliquant les mthodes getByIndex, getCount, insertByIndex et removeByIndex l'objet Column, accessible via getColumns. Ces mthodes ne peuvent nanmoins tre utilises que dans des tableaux ne contenant pas de cellules fusionnes. Les cellules ne peuvent pas tre formates par colonne dans StarOffice Basic. Pour arriver ce rsultat, il faut appliquer les mthodes de formatage des cellules individuelles.

Chapitre 6 Documents texte 111

Cellules
Chaque cellule d'un document StarOffice porte un nom unique. Si le curseur de StarOffice se trouve dans une cellule, le nom de cette cellule apparat dans la barre d'tat. La cellule suprieure gauche est habituellement appele A1 et la cellule infrieure droite Xn, o X reprsente la lettre de la dernire colonne et n le numro de la dernire ligne. Les objets Cell sont accessibles par la mthode getCellByName() de l'objet Table. L'exemple suivant montre une boucle qui parcourt toutes les cellules d'un tableau et y insre les numros de ligne et lettres de colonne correspondants.
Dim Doc As Object Dim Table As Object Dim Cursor As Object Dim Rows As Object Dim RowIndex As Integer Dim Cols As Object Dim ColIndex As Integer Dim CellName As String Dim Cell As Object Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor() Table = Doc.createInstance("com.sun.star.text.TextTable") Table.initialize(5, 4) Doc.Text.insertTextContent(Cursor, Table, False) Rows = Table.getRows Cols = Table.getColumns For RowIndex = 1 To Rows.getCount() For ColIndex = 1 To Cols.getCount() CellName = Chr(64 + ColIndex) & RowIndex Cell = Table.getCellByName(CellName) Cell.String = "ligne : " & CStr(RowIndex) + ", column: " & CStr(ColIndex) Next Next

Une cellule de tableau est comparable du texte standard. Elle supporte l'interface createTextCursor permettant la cration d'un objet TextCursor associ.
CellCursor = Cell.createTextCursor()

Toutes les options de formatage pour les caractres individuels et les paragraphes sont donc automatiquement disponibles. L'exemple qui suit effectue une recherche dans tous les tableaux d'un document texte et aligne droite toutes les cellules comportant des valeurs numriques l'aide de la proprit de paragraphe correspondante.
Dim Doc As Object

112 StarOffice 7 Manuel de programmation Basic

Dim TextTables As Object Dim Table As Object Dim CellNames Dim Cell As Object Dim CellCursor As Object Dim I As Integer Dim J As Integer Doc = StarDesktop.CurrentComponent TextTables = Doc.getTextTables() For I = 0 to TextTables.count - 1 Table = TextTables(I) CellNames = Table.getCellNames() For J = 0 to UBound(CellNames) Cell = Table.getCellByName(CellNames(J)) If IsNumeric(Cell.String) Then CellCursor = Cell.createTextCursor() CellCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.RIGHT End If Next Next

Cet exemple cre une liste TextTables contenant tous les tableaux d'un texte, qui sont parcourus dans une boucle. StarOffice cre ensuite une liste des noms des cellules associes pour chacun de ces tableaux. Ces cellules sont ensuite parcourues leur tour dans une boucle. Si une cellule contient une valeur numrique, l'exemple modifie le formatage en consquence. Pour ce faire, il commence par crer un objet TextCursor renvoyant au contenu de la cellule, puis modifiant les proprits de paragraphe de cette dernire.

Cadres texte
Les cadres texte sont considrs comme des objets TextContent, tout comme les tableaux et les images. Ils consistent gnralement en texte standard, mais peuvent tre placs un emplacement quelconque sur la page et ne sont pas inclus dans l'enchanement. Comme pour tous les objets TextContent, la cration d'un cadre texte est distincte de son insertion dans le document.
Dim Doc As Object Dim TextTables As Object Dim Cursor As Object Dim Frame As Object Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor() Frame = Doc.createInstance("com.sun.star.text.TextFrame") Doc.Text.insertTextContent(Cursor, Frame, False)

Chapitre 6 Documents texte 113

Le cadre texte est cr l'aide de la mthode createInstance de l'objet Document. Le cadre texte cr de cette manire peut ensuite tre insr dans le document l'aide de la mthode insertTextContent de l'objet Text. Pour cela, le nom du service appropri com.sun.star.text.TextFrame doit tre spcifi. L'emplacement d'insertion du cadre texte est dtermin par un objet Cursor, galement excut lors de son insertion.
Les cadres texte sont l'quivalent pour StarOffice des cadres de position utiliss dans Word. Alors que VBA utilise la mthode Document.Frames.Add cet effet, la cration dans StarOffice Basic est effectue par la procdure ci-dessus l'aide d'un objet TextCursor ainsi que la mthode

createInstance de l'objet Document. Les objets cadres texte fournissent toute une gamme de proprits permettant d'influer sur l'emplacement et le comportement du cadre. La plupart de ces proprits sont dfinies dans le service com.sun.star.text.BaseFrameProperties, support galement par chaque service TextFrame. Les proprits centrales sont les suivantes :

BackColor (Long) la couleur d'arrire-plan du cadre texte. BottomMargin (Long) la marge infrieure en centimes de millimtre. LeftMargin (Long) la marge gauche en centimes de millimtre. RightMargin (Long) la marge droite en centimes de millimtre. TopMargin (Long) la marge suprieure en centimes de millimtre. Height (Long) la hauteur du cadre texte en centimes de millimtre. Width (Long) la largeur du cadre texte en centimes de millimtre. HoriOrient (const) l'orientation horizontale du cadre texte (selon com.sun.star.text.HoriOrientation).

VertOrient (const) l'orientation verticale du cadre texte (selon com.sun.star.text.VertOrientation).

114 StarOffice 7 Manuel de programmation Basic

L'exemple suivant cre un cadre texte l'aide des proprits ci-dessus :


Dim Doc As Object Dim TextTables As Object Dim Cursor As Object Dim Frame As Object Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor() Cursor.gotoNextWord(False) Frame = Doc.createInstance("com.sun.star.text.TextFrame") Frame.Width = 3000 Frame.Height = 1000 Frame.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER Frame.TopMargin = 0 Frame.BottomMargin = 0 Frame.LeftMargin = 0 Frame.RightMargin = 0 Frame.BorderDistance = 0 Frame.HoriOrient = com.sun.star.text.HoriOrientation.NONE Frame.VertOrient = com.sun.star.text.VertOrientation.LINE_TOP Doc.Text.insertTextContent(Cursor, Frame, False)

Cet exemple cre un objet TextCursor servant de marque d'insertion pour le cadre texte. Ce dernier est positionn entre le premier et le deuxime mot du texte. Le cadre texte est cr l'aide de Doc.createInstance. Les proprits des objets cadres texte sont dfinies aux valeurs initiales ncessaires. Il convient de noter ici l'interaction entre les proprits AnchorType (du service TextContent) et VertOrient (du service BaseFrameProperties). AnchorType reoit la valeur AS_CHARACTER. Le cadre texte est donc insr directement dans l'enchanement et se comporte comme un caractre. Il peut ainsi tre dplac la ligne suivante en cas de retour la ligne, par exemple. La valeur LINE_TOP de la proprit VertOrient garantit que le bord suprieur du cadre texte se trouve la mme hauteur que le bord suprieur du caractre. Lorsque l'initialisation est termine, le cadre texte est finalement insr dans le document texte l'aide d'un appel de la mthode insertTextContent.

Chapitre 6 Documents texte 115

Pour diter le contenu d'un cadre texte, l'utilisateur fait appel l'objet TextCursor, dj mentionn de nombreuses reprises et galement disponible pour les cadres texte.
Dim Doc As Object Dim TextTables As Object Dim Cursor As Object Dim Frame As Object Dim FrameCursor As Object Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor() Frame = Doc.createInstance("com.sun.star.text.TextFrame") Frame.Width = 3000 Frame.Height = 1000 Doc.Text.insertTextContent(Cursor, Frame, False) FrameCursor = Frame.createTextCursor() FrameCursor.charWeight = com.sun.star.awt.FontWeight.BOLD FrameCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.CENTER FrameCursor.String = "Ceci est un petit test !"

Cet exemple cre un cadre texte, l'insre dans le document actif et ouvre un objet TextCursor pour le cadre. Ce curseur est utilis pour dfinir en gras la police du cadre et centrer le paragraphe. La chane "Ceci est un petit test !" est enfin assigne au cadre texte.

Champs texte
Les champs texte sont des objets TextContent, car ils ajoutent une extension logique au-del du texte pur. Des champs texte peuvent tre insrs dans un document texte par les mmes mthodes que celles utilises pour les autres objets TextContent :
Dim Doc As Object Dim DateTimeField As Object Dim Cursor As Object Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor() DateTimeField = Doc.createInstance("com.sun.star.text.TextField.DateTime") DateTimeField.IsFixed = False DateTimeField.IsDate = True Doc.Text.insertTextContent(Cursor, DateTimeField, False)

Cet exemple insre un champ texte correspondant la date du jour au dbut du document texte actif. La valeur True de la proprit IsDate entrane l'affichage de la date uniquement et non de l'heure. La valeur False pour IsFixed garantit que la date est actualise automatiquement l'ouverture du document.
Alors que le type d'un champ est spcifi dans VBA par un paramtre de la mthode

Document.Fields.Add, il est dfini dans StarOffice Basic par le nom du service responsable de ce

116 StarOffice 7 Manuel de programmation Basic

type de champ.

Autrefois, on accdait aux champs texte par tout un ensemble de mthodes que StarOffice rendait disponibles dans l'ancien objet Selection (InsertField, DeleteUserField, SetCurField, par exemple). Dans StarOffice 7, les champs sont administrs l'aide d'un concept orient objet. Pour crer un champ texte, il faut d'abord crer un champ texte du type requis et l'initialiser avec les proprits adquates. Ce champ texte est ensuite insr dans le document l'aide de la mthode insertTextContent. Un texte source correspondant est illustr dans l'exemple prcdent. Les types de champ les plus importants et leurs proprits sont dcrits dans les sections suivantes.

Outre l'insertion de champs texte, la recherche des champs dans un document peut galement tre une tche importante. L'exemple suivant montre comment tous les champs texte d'un document texte peuvent tre parcourus dans une boucle et comment leur type peut tre contrl.
Dim Doc As Object Dim TextFieldEnum As Object Dim TextField As Object Dim I As Integer Doc = StarDesktop.CurrentComponent TextFieldEnum = Doc.getTextFields.createEnumeration While TextFieldEnum.hasMoreElements() TextField = TextFieldEnum.nextElement() If TextField.supportsService("com.sun.star.text.TextField.DateTime") Then MsgBox "Date/heure" ElseIf TextField.supportsService("com.sun.star.text.TextField.Annotation") Then MsgBox "Annotation" Else MsgBox "inconnu" End If Wend

Le point de dpart dans la dtermination des champs texte prsents est la liste TextFields de l'objet Document. Cet exemple cre un objet Enumeration bas sur cette liste, par lequel tous les champs texte peuvent tre interrogs successivement dans une boucle. Pour chaque champ texte trouv, le service support est consult l'aide de la mthode supportsService. Si le champ s'avre tre un champ de date/heure ou une annotation, le type de champ correspondant s'affiche dans une bote d'information. S'il s'agit d'un autre champ, l'exemple affiche l'information "inconnu". La liste ci-dessous rpertorie les champs texte les plus importants et leurs proprits associes. Une liste complte de tous les champs texte est fournie dans la rfrence de l'API dans le module com.sun.star.text.TextField. (Lorsque vous rpertoriez le nom du service d'un champ
Chapitre 6 Documents texte 117

texte, des majuscules et des minuscules doivent tre utilises dans StarOffice Basic, comme dans l'exemple prcdent.)

Nombre de pages, de mots et de caractres


Les champs texte

com.sun.star.text.TextField.PageCount com.sun.star.text.TextField.WordCount com.sun.star.text.TextField.CharacterCount

renvoient le nombre de pages, de mots ou de caractres d'un texte. Ils supportent la proprit suivante :

NumberingType (const) - le format de numrotation (constantes selon com.sun.star.style.NumberingType).

Page active
Le numro de la page active peut tre insr dans un document l'aide du champ texte com.sun.star.text.TextField.PageNumber. Vous pouvez spcifier les proprits suivantes :

NumberingType (const) - le format de numrotation (instructions selon les constantes de com.sun.star.style.NumberingType).

Offset (short) dcalage ajout au nombre de pages (ce nombre peut tre ngatif).

L'exemple qui suit montre comment insrer le nombre de pages dans le pied de page d'un document.
Dim Doc As Object Dim DateTimeField As Object Dim PageStyles As Object Dim StdPage As Object Dim FooterCursor As Object Dim PageNumber As Object Doc = StarDesktop.CurrentComponent PageNumber = Doc.createInstance("com.sun.star.text.TextField.PageNumber") PageNumber.NumberingType = com.sun.star.style.NumberingType.ARABIC PageStyles = Doc.StyleFamilies.getByName("PageStyles") StdPage = PageStyles("Default") StdPage.FooterIsOn = True FooterCursor = StdPage.FooterTextLeft.Text.createTextCursor() StdPage.FooterTextLeft.Text.insertTextContent(FooterCursor, PageNumber, False)

L'exemple commence par crer un champ texte supportant le service com.sun.star.text.TextField.PageNumber. Les lignes de l'en-tte et du pied de page tant

118 StarOffice 7 Manuel de programmation Basic

dfinies l'intrieur des modles de page de StarOffice, elles sont initialement tablies l'aide de la liste de tous les objets PageStyles. Pour garantir que la ligne du pied de page est visible, la proprit FooterIsOn est dfinie True. Le champ texte est alors insr dans le document l'aide de l'objet Text associ de la ligne de pied de page gauche.

Annotations
Dans le texte, les champs d'annotation (com.sun.star.text.TextField.Annotation) sont reprables un petit symbole jaune. Un clic sur ce symbole ouvre un champ texte dans lequel il est possible d'enregistrer un commentaire cet emplacement du texte. Un champ d'annotation comporte les proprits suivantes.

Author (String) - le nom de l'auteur. Content (String) - un texte de commentaire. Date (Date) - la date laquelle a t crite l'annotation.

Date / heure
Un champ de date / heure (com.sun.star.text.TextField.DateTime) reprsente la date du jour ou l'heure qu'il est. Il supporte les proprits suivantes :

IsFixed (Boolean) s'il est dfini True, l'heure de l'insertion reste inchange ; s'il est dfini False, elle est actualise chaque ouverture du document. IsDate (Boolean) si elle est dfinie True, le champ affiche la date du jour, sinon il affiche l'heure actuelle. DateTimeValue (struct) le contenu actif du champ (structure com.sun.star.util.DateTime)

NumberFormat (const) le format dans lequel la date ou l'heure sont dcrites.

Nom / Numro de chapitre


Le nom du chapitre actif est accessible par un champ texte du type com.sun.star.text.TextField.Chapter. Sa forme peut tre dfinie l'aide de deux proprits.

ChapterFormat (const) dfinit si l'lment reprsent est le nom du chapitre ou son numro (selon com.sun.star.text.ChapterFormat)

Level (Integer) dtermine le niveau du chapitre dont le nom et/ou le numro est affich. La valeur 0 reprsente le plus haut niveau disponible.

Chapitre 6 Documents texte 119

Repres de texte
Les repres de texte (service com.sun.star.text.Bookmark) sont des objets TextContent. Leur cration et leur insertion fait appel un concept dj dcrit plus haut :
Dim Doc As Object Dim Bookmark As Object Dim Cursor As Object Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor() Bookmark = Doc.createInstance("com.sun.star.text.Bookmark") Bookmark.Name = "Mes repres de texte" Doc.Text.insertTextContent(Cursor, Bookmark, True)

L'exemple cre un objet Cursor, qui marque la position d'insertion du repre de texte, puis cre l'objet repre de texte proprement dit (Bookmark). Un nom est ensuite assign au repre de texte et ce dernier est insr dans le document par la mthode insertTextContent l'emplacement du curseur. Les repres de texte d'un texte sont accessibles par une liste appele Bookmarks. Il est possible d'accder aux repres de texte par leur numro ou par leur nom. L'exemple qui suit montre comment trouver un repre de texte l'intrieur d'un texte et insrer du texte son emplacement.
Dim Doc As Object Dim Bookmark As Object Dim Cursor As Object Doc = StarDesktop.CurrentComponent Bookmark = Doc.Bookmarks.getByName("Mes repres de texte") Cursor = Doc.Text.createTextCursorByRange(Bookmark.Anchor) Cursor.String = "Emplacement du repre de texte"

Dans cet exemple, la mthode getByName est utilise pour trouver le repre de texte requis au moyen de son nom. L'appel createTextCursorByRange cre ensuite un objet Cursor, qui est plac la position d'ancrage du repre de texte. Le curseur insre ensuite le texte requis cet endroit.

120 StarOffice 7 Manuel de programmation Basic

CHAPITRE

Classeurs
StarOffice Basic fournit une interface complte pour la cration et l'dition des classeurs commandes par un programme. Ce chapitre dcrit comment piloter les services, mthodes et proprits concernes des classeurs. La premire section aborde la structure de base des classeurs et indique comment accder au contenu de chaque cellule et l'diter. La seconde section, axe sur les zones de cellules et sur les options de recherche et de remplacement du contenu des cellules, se concentre sur la manire d'diter efficacement les classeurs.
L'objet Range, qui permet d'accder toutes les zones d'une feuille, a t tendu dans la nouvelle API.

Structure des documents base de tables (classeurs)


L'objet Document d'un classeur est bas sur le service com.sun.star.sheet.SpreadsheetDocument. Chacun de ces documents peut comporter plusieurs feuilles de calcul. Dans ce manuel, un document base de tables ou classeur dsigne le document entier, tandis qu'une feuille de calcul (ou, de faon abrge, une feuille ) est une feuille (table) du document.
La terminologie des feuilles de calcul et de leur contenu est diffrente dans VBA et dans StarOffice Basic. Alors que l'objet Document est appel Workbook dans VBA et les pages qu'il contient Worksheet, ces objets sont respectivement appels SpreadsheetDocument et Sheet dans StarOffice Basic.

Classeurs
On peut accder chaque feuille de calcul d'un classeur par la liste Sheets. Les exemples qui suivent indiquent comment accder une feuille par son numro ou par son nom.

121

Exemple 1 : accs par le numro (la numrotation commence 0)


Dim Doc As Object Dim Sheet As Object Doc = StarDesktop.CurrentComponent Sheet = Doc. Sheets (0)

Exemple 2 : accs par le nom


Dim Doc As Object Dim Sheet As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets.getByName("Feuille 1")

Dans le premier exemple, on accde la feuille par son numro (la numrotation commenant 0). Dans le second, on y accde par son nom et par la mthode getByName. L'objet Sheet obtenu par la mthode getByName supporte le service com.sun.star.sheet.Spreadsheet. Outre les diffrentes interfaces qu'il propose pour l'dition du contenu, ce service dispose des proprits suivantes :

IsVisible (Boolean) la feuille de calcul est visible. PageStyle (String) le nom du modle de page pour la feuille de calcul.

Cration, suppression et attribution d'un nouveau des feuilles


La liste Sheets d'un classeur permet galement de crer, de supprimer et de renommer des feuilles individuelles. L'exemple qui suit utilise la mthode hasByName pour vrifier si une feuille nomme MaFeuille existe. Si c'est le cas, la mthode dtermine une rfrence d'objet correspondante l'aide de la mthode getByName, puis enregistre cette rfrence dans une variable dans Sheet. Si la feuille correspondante n'existe pas, elle est cre par l'appel createInstance et insre dans le classeur par la mthode insertByName.
Dim Doc As Object Dim Sheet As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) If Doc.Sheets.hasByName("MaFeuille") Then Sheet = Doc.Sheets.getByName("MaFeuille") Else Sheet = Doc.createInstance("com.sun.star.sheet.Spreadsheet") Doc.Sheets.insertByName("MaFeuille", Sheet) End If

Les mthodes getByName et insertByName proviennent de l'interface com.sun.star.container.XnameContainer dcrite au chapitre 4.

122 StarOffice 7 Manuel de programmation Basic

Lignes et colonnes
Chaque feuille contient une liste de ses lignes et de ses colonnes. Ces listes sont accessibles par les proprits Rows et Columns de l'objet Spreadsheet et supportent les services com.sun.star.table.TableColumns et/ou com.sun.star.table.TableRows. L'exemple qui suit cre deux objets qui renvoient la premire ligne et la premire colonne d'une feuille et stocke les rfrences dans les variables objet FirstCol et FirstRow.
Dim Doc As Object Dim Sheet As Object Dim FirstRow As Object Dim FirstCol As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) FirstCol = Sheet.Columns(0) FirstRow = Sheet.Rows(0)

Les objets Column supportent le service com.sun.star.table.TableColumn, dont les proprits sont les suivantes :

Width (long) la largeur de la colonne en centimes de millimtre. OptimalWidth (Boolean) dfinit la largeur d'une colonne sa valeur optimale. IsVisible (Boolean) affiche une colonne. IsStartOfNewPage (Boolean) l'impression, cre un saut de page avant une colonne.

La largeur de la colonne n'est optimise que lorsque la proprit OptimalWidth est rgle sur True. Si la largeur d'une cellule individuelle est modifie, celle de la colonne qui la contient ne change pas. Sur un plan pratique, OptimalWidth est davantage une mthode qu'une proprit. Les objets Row sont bass sur le service com.sun.star.table.RowColumn, dont les proprits sont les suivantes :

Height (long) la hauteur de la ligne en centimes de millimtre. OptimalHeight (Boolean) dfinit la hauteur de la ligne sa valeur optimale. IsVisible (Boolean) affiche la ligne. IsStartOfNewPage (Boolean) l'impression, cre un saut de page avant la ligne.

Si la proprit OptimalHeight d'une ligne est dfinie True, sa hauteur change automatiquement lorsque celle d'une cellule qu'elle contient est modifie. L'optimisation automatique continue jusqu' ce qu'une hauteur absolue soit assigne la ligne par la proprit Height.

Chapitre 7 Classeurs 123

L'exemple suivant active l'optimisation automatique de la hauteur de ligne pour les cinq premires lignes de la feuille et rend la deuxime colonne invisible.
Dim Doc As Object Dim Sheet As Object Dim Row As Object Dim Col As Object Dim I As Integer Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) For I = 0 To 4 Row = Sheet.Rows(I) Row.OptimalHeight = True Next I Col = Sheet.Columns(1) Col.IsVisible = False

Les listes Rows et Columns sont accessibles par un indice dans StarOffice Basic. Contrairement VBA, la premire colonne a l'indice 0 et non 1.

Insertion et suppression de lignes et de colonnes


Les objets Rows et Columns d'une feuille peuvent accder des lignes et colonnes existantes, mais galement en insrer et en supprimer.
Dim Doc As Object Dim Sheet As Object Dim NewColumn As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Sheet.Columns.insertByIndex(3, 1) Sheet.Columns.removeByIndex(5, 1)

Cet exemple utilise la mthode insertByIndex pour insrer une nouvelle colonne l'emplacement de la quatrime colonne dans la feuille (indice 3, la numrotation commenant 0). Le second paramtre spcifie le nombre de colonnes insrer (dans cet exemple : un). La mthode removeByIndex supprime la sixime colonne (indice 5). L aussi, le second paramtre spcifie le nombre de colonnes supprimer. Les mthodes d'insertion et de suppression des lignes utilisent l'objet Rows de la mme manire que l'dition des colonnes utilisait l'objet Columns.

124 StarOffice 7 Manuel de programmation Basic

Cellules
Une feuille de calcul est constitue d'une liste bidimensionnelle de cellules. Chaque cellule est dfinie par ses positions X et Y par rapport la cellule suprieure gauche, dont la position est (0,0). L'exemple qui suit cre un objet qui renvoie la cellule suprieure gauche et insre du texte dans cette cellule :
Dim Doc As Object Dim Sheet As Object Dim Cell As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(0, 0) Cell.String = "Test"

En plus de ses coordonnes numriques, chaque cellule d'une feuille porte un nom : par exemple, la cellule suprieure gauche d'une feuille est nomme A1. La lettre A reprsente la colonne et le numro 1 la ligne. Il est important de ne pas confondre le nom et la position d'une cellule, car la numrotation de la ligne commence 1 pour le nom et 0 pour la position. Dans StarOffice, une cellule peut contenir du texte, des nombres ou des formules. Le type de cellule n'est pas dtermin par le contenu qui y est enregistr, mais par la proprit de l'objet utilis pour son entre. Les nombres peuvent tre insrs et appels l'aide de la proprit Value, le texte l'aide de la proprit String et les formules l'aide de la proprit Formula.
Dim Doc As Object Dim Sheet As Object Dim Cell As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(0, 0) Cell.Value = 100 Cell = Sheet.getCellByPosition(0, 1) Cell.String = "Test" Cell = Sheet.getCellByPosition(0, 2) Cell.Formula = "=A1"

Cet exemple insre un nombre, un texte et une formule dans les champs A1 A3.
Les proprits Value, String et Formula prennent le pas sur la mthode PutCell pour dfinir les valeurs d'une cellule de tableau.

StarOffice traite le contenu saisi par la proprit String dans les cellules comme du texte, mme si ce contenu est un nombre. Les nombres saisis ainsi sont aligns gauche dans la cellule au lieu

Chapitre 7 Classeurs 125

d'tre aligns droite. Il convient galement de diffrencier le texte et les nombres dans l'utilisation des formules :
Dim Doc As Object Dim Sheet As Object Dim Cell As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(0, 0) Cell.Value = 100 Cell = Sheet.getCellByPosition(0, 1) Cell.String = 1000 Cell = Sheet.getCellByPosition(0, 2) Cell.Formula = "=A1+A2" MsgBox Cell.Value

Bien que la cellule A1 contienne la valeur 100 et la cellule A2 la valeur 1000, la formule A1+A2 renvoie la valeur 100. En effet, le contenu de la cellule A2 a t saisi comme chane et non comme un nombre. Pour vrifier si le contenu d'une cellule contient un nombre ou une chane, utilisez la proprit Type :
Dim Doc As Object Dim Sheet As Object Dim Cell As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(1,1) Cell.Value = 1000 Select Case Cell.Type Case com.sun.star.table.CellContentType.EMPTY MsgBox "Contenu : Vide" Case com.sun.star.table.CellContentType.VALUE MsgBox "Contenu : Valeur" Case com.sun.star.table.CellContentType.TEXT MsgBox "Contenu : Texte" Case com.sun.star.table.CellContentType.FORMULA MsgBox "Contenu : Formule" End Select

La proprit Cell.Type renvoie une valeur pour l'numration com.sun.star.table. CellContentType qui identifie le type de contenu d'une cellule. Les valeurs possibles sont les suivantes :

126 StarOffice 7 Manuel de programmation Basic

EMPTY pas de valeur VALUE un nombre TEXT une chane FORMULA une formule

Insertion, suppression, copie et dplacement de cellules


Outre la modification directe du contenu d'une cellule, StarOffice Calc offre galement une interface permettant d'insrer, de supprimer, de copier ou de fusionner des cellules. L'interface (com.sun.star.sheet.XRangeMovement), accessible par l'objet Spreadsheet, fournit quatre mthodes de modification du contenu des cellules. La mthode insertCell sert insrer des cellules dans une feuille.
Dim Doc As Object Dim Sheet As Object Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) CellRangeAddress.Sheet = 0 CellRangeAddress.StartColumn = 1 CellRangeAddress.StartRow = 1 CellRangeAddress.EndColumn = 2 CellRangeAddress.EndRow = 2 Sheet.insertCells(CellRangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)

Cet exemple insre une plage de cellules de deux lignes par deux colonnes dans la seconde colonne et la deuxime ligne (portant toutes deux le numro 1) de la premire feuille (numro 0) du classeur. Toutes les valeurs existantes de la plage de cellules spcifie sont dplaces en dessous de cette dernire. Pour dfinir la plage de cellules insrer, utilisez la structure com.sun.star.table. CellRangeAddress. Cette structure comporte les valeurs suivantes :

Sheet (short) le numro de la feuille (la numrotation commenant 0). StartColumn (long) la premire colonne de la plage de cellules (la numrotation commenant 0). StartRow (long) la premire ligne de la plage de cellules (la numrotation commenant 0). EndColumn (long) la dernire colonne de la plage de cellules (la numrotation commenant 0). EndRow (long) la dernire ligne de la plage de cellules (la numrotation commenant 0).

Chapitre 7 Classeurs 127

La structure CellRangeAddress complte doit tre passe comme premier paramtre de la mthode insertCells. Le second paramtre de insertCells contient une valeur de l'numration com.sun. star.sheet.CellInsertMode et dfinit le traitement rserv aux valeurs situes devant l'emplacement d'insertion. L'numration CellInsertMode reconnat les valeurs suivantes :

NONE les valeurs actives restent leur emplacement actuel. DOWN les cellules situes l'emplacement de l'insertion et en dessous sont dplaces vers le bas. RIGHT les cellules situes l'emplacement de l'insertion et droite de celui-ci sont dplaces vers la droite. ROWS les lignes suivant l'emplacement de l'insertion sont dplaces vers le bas. COLUMNS les colonnes situes aprs l'emplacement d'insertion sont dplaces vers la droite.

La mthode removeRange est l'quivalent de la mthode insertCells. Cette mthode supprime de la feuille la plage de cellules dfinie dans la structure CellRangeAddress.
Dim Doc As Object Dim Sheet As Object Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) CellRangeAddress.Sheet = 0 CellRangeAddress.StartColumn = 1 CellRangeAddress.StartRow = 1 CellRangeAddress.EndColumn = 2 CellRangeAddress.EndRow = 2 Sheet.removeRange(CellRangeAddress, com.sun.star.sheet.CellDeleteMode.UP)

Cet exemple supprime la plage de cellules B2:C3 de la feuille et dplace de deux colonnes vers le haut les cellules situes en dessous . Ce type de suppression est dfini par l'une des valeurs suivantes de l'numration com.sun.star.sheet.CellDeleteMode :

NONE les valeurs actives restent leur emplacement actuel. UP les cellules situes l'emplacement de l'insertion et en dessous sont dplaces vers le haut. LEFT les cellules situes l'emplacement de l'insertion et droite de celui-ci sont dplaces vers la gauche. ROWS les lignes suivant l'emplacement de l'insertion sont dplaces vers le haut. COLUMNS les colonnes situes aprs l'emplacement d'insertion sont dplaces vers la gauche.

L'interface XRangeMovement comporte deux mthodes supplmentaires pour dplacer (moveRange) ou copier (copyRange) des plages de cellules. L'exemple suivant dplace la plage B2:C3 de manire qu'elle commence l'emplacement A6 :
128 StarOffice 7 Manuel de programmation Basic

Dim Doc As Object Dim Sheet As Object Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress Dim CellAddress As New com.sun.star.table.CellAddress Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) CellRangeAddress.Sheet = 0 CellRangeAddress.StartColumn = 1 CellRangeAddress.StartRow = 1 CellRangeAddress.EndColumn = 2 CellRangeAddress.EndRow = 2 CellAddress.Sheet = 0 CellAddress.Column = 0 CellAddress.Row = 5 Sheet.moveRange(CellAddress, CellRangeAddress)

En plus de la structure CellRangeAdress, la mthode moveRange attend une structure com.sun.star.table.CellAddress pour dfinir l'origine de la rgion de destination du dplacement. La mthode CellAddress fournit les valeurs suivantes :

Sheet (short) le numro de la feuille de calcul (la numrotation commenant 0). Column (long) le numro de la colonne concerne (la numrotation commenant 0). Row (long) le numro de la ligne concerne (la numrotation commenant 0).

Le contenu des cellules de la plage cible est toujours cras par la mthode moveRange. Contrairement la mthode InsertCells, removeRange ne fournit pas de paramtre permettant des dplacements automatiques. La mthode copyRange fonctionne de la mme manire que moveRange, ceci prs que copyRange insre une copie de la plage de cellules au lieu de dplacer cette dernire.
En ce qui concerne leur fonctionnement, les mthodes insertCell, removeRange et copyRange de StarOffice Basic sont comparables aux mthodes Range.Insert, Range.Delete et

Range.Copy de VBA. Alors que dans VBA, les mthodes sont appliques l'objet Range correspondant, dans StarOffice Basic, elles sont appliques l'objet Sheet associ.

Chapitre 7 Classeurs 129

Formatage
Un classeur fournit des proprits et des mthodes pour formater les cellules et les pages.

Proprits de cellules
De nombreuses options existent pour formater les cellules, telles que la spcification du type de police et de la taille du texte. Chaque cellule supporte les services com.sun.star.style.CharacterProperties et com.sun.star.style.ParagraphProperties, dont les principales proprits sont dcrites au chapitre 6 (Documents texte ). Le formatage spcial des cellules est trait par le service com.sun.star.table.CellProperties. Les principales proprits de ce service sont dcrites dans les sections qui suivent. Vous pouvez appliquer toutes les proprits cites des cellules individuelles et des plages de cellules.
L'objet CellProperties de l'API de StarOffice est comparable l'objet Interior de VBA, qui dfinit galement des proprits spcifiques aux cellules.

Couleur d'arrire-plan et ombres


Le service com.sun.star.table.CellProperties fournit les proprits suivantes pour la dfinition des couleurs d'arrire-plan et des ombres :

CellBackColor (Long) - la couleur d'arrire-plan de la cellule de tableau. IsCellBackgroundTransparent (Boolean) - dfinit la couleur d'arrire-plan comme transparente. ShadowFormat (struct) spcifie l'ombre des cellules (structure selon com.sun.star.table.ShadowFormat).

La structure com.sun.star.table.ShadowFormat et les spcifications dtailles des ombres de cellule ont la structure suivante :

Location (enum) - position de l'ombre (valeur dans la structure com.sun.star.table.ShadowLocation).

ShadowWidth (Short) - taille de l'ombre en centimes de millimtre. IsTransparent (Boolean) - dfinit l'ombre comme transparente. Color (Long) - la couleur de l'ombre.

L'exemple suivant inscrit le nombre 1 000 dans la cellule B2, met en rouge la couleur d'arrire-plan l'aide de la proprit CellBackColor, puis cre une ombre gris clair pour la cellule, qu'il dplace de 1 mm vers la gauche et vers le bas.

130 StarOffice 7 Manuel de programmation Basic

Dim Doc As Object Dim Sheet As Object Dim Cell As Object Dim ShadowFormat As New com.sun.star.table.ShadowFormat Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(1,1) Cell.Value = 1000 Cell.CellBackColor = RGB(255, 0, 0) ShadowFormat.Location = com.sun.star.table.ShadowLocation.BOTTOM_RIGHT ShadowFormat.ShadowWidth = 100 ShadowFormat.Color = RGB(160, 160, 160) Cell.ShadowFormat = ShadowFormat

Justification
StarOffice fournit diverses fonctions permettant de modifier la justification d'un texte dans une cellule de tableau. Les proprits suivantes dfinissent la justification horizontale et verticale d'un texte :

HoriJustify (enum) - justification horizontale du texte (valeur dans com.sun.star.table.CellHoriJustify) VertJustify (enum) - justification verticale du texte (valeur dans com.sun.star.table.CellVertJustify) Orientation (enum) - l'orientation du texte (valeur selon com.sun.star.table.CellOrientation) IsTextWrapped (Boolean) - autorise les retours la ligne automatiques l'intrieur de la cellule RotateAngle (Long) - angle de rotation du texte en centimes de degrs

L'exemple suivant montre comment "empiler" le contenu d'une cellule pour que chaque caractre s'imprime l'un en dessous de l'autre dans le coin suprieur gauche de la cellule. Les caractres ne subissent aucune rotation.
Dim Doc As Object Dim Sheet As Object Dim Cell As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(1,1) Cell.Value = 1000

Chapitre 7 Classeurs 131

Cell.HoriJustify = com.sun.star.table.CellHoriJustify.LEFT Cell.VertJustify = com.sun.star.table.CellVertJustify.TOP Cell.Orientation = com.sun.star.table.CellOrientation.STACKED

Formats de nombre, de date et de texte


StarOffice fournit toute une gamme de formats de date et d'heure prdfinis. Chacun de ces formats comporte un numro interne utilis pour assigner le format des cellules l'aide de la proprit NumberFormat. StarOffice fournit les mthodes queryKey et addNew pour l'accs des formats numriques existants et la cration de vos propres formats numriques. Ces mthodes sont accessibles par l'appel d'objet suivant :
NumberFormats = Doc.NumberFormats

Un format est spcifi l'aide d'une chane de format structure d'une manire similaire la fonction de format de StarOffice Basic. Il existe toutefois une diffrence importante : alors que la fonction Format requiert des abrviations, points dcimaux et caractres sparateurs de milliers anglais, les abrviations spcifiques au pays doivent tre utilises dans la structure d'une commande format de l'objet NumberFormats. L'exemple suivant formate la cellule B2 pour que les nombres soient affiches avec trois dcimales et qu'ils utilisent les virgules comme sparateurs de milliers.
Dim Doc As Object Dim Sheet As Object Dim Cell As Object Dim NumberFormats As Object Dim NumberFormatString As String Dim NumberFormatId As Long Dim LocalSettings As New com.sun.star.lang.Locale Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(1,1) Cell.Value = 23400.3523565 LocalSettings.Language = "en" LocalSettings.Country = "us" NumberFormats = Doc.NumberFormats NumberFormatString = "#,##0.000" NumberFormatId = NumberFormats.queryKey(NumberFormatString, LocalSettings, True) If NumberFormatId = -1 Then NumberFormatId = NumberFormats.addNew(NumberFormatString, LocalSettings) End If MsgBox NumberFormatId Cell.NumberFormat = NumberFormatId

132 StarOffice 7 Manuel de programmation Basic

La bote de dialogue Formatage des cellules de StarOffice Calc prsente un aperu des diffrentes options de formatage des cellules.

Proprits de page
Les proprits de page sont les options de formatage permettant de positionner le contenu d'un document sur la page, ainsi que des lments visuels qui se rptent d'une page l'autre. Il s'agit notamment des lments suivants :

Formats de papier Marges En-ttes et pieds de page.

La procdure dfinissant les formats de page diffre des autres formes de formatage. Alors que les formats des cellules, des paragraphes et des caractres peuvent tre appliqus directement, les formats de page peuvent galement tre dfinis et appliqus indirectement l'aide des styles de page. Par exemple, les en-ttes ou les pieds de page sont ajouts au style de page. Les sections qui suivent dcrivent les principales options de formatage des pages de feuilles de calcul. La plupart des styles dcrits peuvent galement tre appliqus aux documents texte. Les proprits de page valides pour les deux types de documents sont dfinies dans le service com.sun.star.style.PageProperties. Les proprits de page qui ne s'appliquent qu'aux classeurs sont dfinies dans le service com.sun.star.sheet.TablePageStyle.
Les proprits de page (marges, bordures, etc.) d'un document Microsoft Office sont dfinies par un objet PageSetup au niveau de l'objet Worksheet (Excel) ou Document (Word). Dans StarOffice, ces proprits sont dfinies l'aide d'un style de page li au document associ.

Arrire-plan de page
Le service com.sun.star.style.PageProperties dfinit les proprits d'arrire-plan de page suivantes :

BackColor (long) la couleur de l'arrire-plan BackGraphicURL (String) l'URL de l'image d'arrire-plan utiliser BackGraphicFilter (String) le nom du filtre pour interprter les images d'arrire-plan BackGraphicLocation (Enum) la position de l'image d'arrire-plan (valeur selon l'numration com.sun.star.style.GraphicLocation)

BackTransparent (Boolean) - rend l'arrire-plan transparent

Format de page
Le format de page est dfini l'aide des proprits suivantes du service com.sun.star.style.PageProperties :

IsLandscape (Boolean) format paysage Width (long) la largeur de page en centimes de millimtre

Chapitre 7 Classeurs 133

Height (long) la hauteur de page en centimes de millimtre PrinterPaperTray (String) le nom du bac d'alimentation d'imprimante utiliser

L'exemple suivant rgle le format de page du style de page "Standard" sur DIN A5 en orientation paysage (hauteur 14,8 cm, largeur 21 cm) :
Dim Doc As Object Dim Sheet As Object Dim StyleFamilies As Object Dim PageStyles As Object Dim DefPage As Object Doc = StarDesktop.CurrentComponent StyleFamilies = Doc.StyleFamilies PageStyles = StyleFamilies.getByName("PageStyles") DefPage = PageStyles.getByName("Default") DefPage.IsLandscape = True DefPage.Width = 21000 DefPage.Height = 14800

Marge, bordure et ombre


Le service com.sun.star.style.PageProperties fournit les proprits suivantes pour le rglage des marges, des bordures et des ombres :

LeftMargin (long) la largeur de la marge gauche en centimes de millimtre RightMargin (long) la largeur de la marge droite en centimes de millimtre TopMargin (long) la largeur de la marge suprieure en centimes de millimtre BottomMargin (long) la largeur de la marge infrieure en centimes de millimtre LeftBorder (struct) spcifications du trait gauche de la bordure de page (structure com.sun.star.table.BorderLine)

RightBorder (struct) Spcifications du trait droit de la bordure de page (structure com.sun.star.table.BorderLine)

TopBorder (struct) Spcifications du trait suprieur de la bordure de page (structure com.sun.star.table.BorderLine)

BottomBorder (struct) Spcifications du trait infrieur de la bordure de page (structure com.sun.star.table.BorderLine)

LeftBorderDistance (long) la distance entre la bordure gauche et le contenu de la page en centimes de millimtre RightBorderDistance (long) la distance entre la bordure droite et le contenu de la page en centimes de millimtre TopBorderDistance (long) la distance entre la bordure suprieure et le contenu de la page en centimes de millimtre

134 StarOffice 7 Manuel de programmation Basic

BottomBorderDistance (long) la distance entre la bordure infrieure et le contenu de la page en centimes de millimtre ShadowFormat (struct) spcifications pour l'ombre du contenu de la page (structure com.sun.star.table.ShadowFormat)

L'exemple suivant dfinit les bordures gauche et droite du style de page "Standard" 1 centimtre.
Dim Doc As Object Dim Sheet As Object Dim StyleFamilies As Object Dim PageStyles As Object Dim DefPage As Object Doc = StarDesktop.CurrentComponent StyleFamilies = Doc.StyleFamilies PageStyles = StyleFamilies.getByName("PageStyles") DefPage = PageStyles.getByName("Default") DefPage.LeftMargin = 1000 DefPage.RightMargin = 1000

En-ttes et pieds de page


Les en-ttes et pieds de page d'un document font partie des proprits de la page et sont dfinis l'aide du service com.sun.star.style.PageProperties. Les proprits permettant de formater les en-ttes sont les suivantes :

HeaderIsOn (Boolean) l'en-tte est activ HeaderLeftMargin (long) la distance entre l'en-tte et la marge gauche en centimes de millimtre. HeaderRightMargin (long) la distance entre l'en-tte et la marge droite en centimes de millimtre. HeaderBodyDistance (long) la distance entre l'en-tte et le corps du document en centimes de millimtre. HeaderHeight (long) la hauteur de l'en-tte en centimes de millimtre HeaderIsDynamicHeight (Boolean) la hauteur de l'en-tte s'adapte automatiquement au contenu HeaderLeftBorder (struct) - dtails de la bordure gauche du cadre autour de l'en-tte (structure com.sun.star.table.BorderLine)

HeaderRightBorder (struct) - dtails de la bordure droite du cadre entourant l'en-tte (structure com.sun.star.table.BorderLine)

HeaderTopBorder (struct) - dtails de la bordure suprieure du cadre entourant l'en-tte (structure com.sun.star.table.BorderLine)

Chapitre 7 Classeurs 135

HeaderBottomBorder (struct) - dtails de la bordure infrieure du cadre entourant l'entte (structure com.sun.star.table.BorderLine)

HeaderLeftBorderDistance (long) la distance entre la bordure gauche et le contenu de l'en-tte en centimes de millimtre HeaderRightBorderDistance (long) la distance entre la bordure droite et le contenu de l'en-tte en centimes de millimtre HeaderTopBorderDistance (long) la distance entre la bordure suprieure et le contenu de l'en-tte en centimes de millimtre HeaderBottomBorderDistance (long) la distance entre la bordure infrieure et le contenu de l'en-tte en centimes de millimtre HeaderIsShared (Boolean) les en-ttes des pages paires et impaires ont un contenu identique (voir HeaderText, HeaderTextLeft et HeaderTextRight)

HeaderBackColor (long) la couleur d'arrire-plan de l'en-tte HeaderBackGraphicURL (String) l'URL de l'image d'arrire-plan utiliser HeaderBackGraphicFilter (String) le nom du filtre pour interprter les images d'arrire-plan pour l'en-tte HeaderBackGraphicLocation (Enum) la position de l'image d'arrire-plan pour l'en-tte (valeur selon l'numration com.sun.star.style.GraphicLocation)

HeaderBackTransparent (Boolean) transparence de l'arrire-plan de l'en-tte HeaderShadowFormat (struct) dtails de l'ombre de l'en-tte (structure com.sun.star.table.ShadowFormat)

Les proprits permettant de formater les pieds de page sont les suivantes :

FooterIsOn (Boolean) le pied de page est activ FooterLeftMargin (long) la distance entre le pied de page et la marge gauche en centimes de millimtre. FooterRightMargin (long) la distance entre le pied de page et la marge droite en centimes de millimtre. FooterBodyDistance (long) la distance entre le pied de page et le corps du document en centimes de millimtre. FooterHeight (long) la hauteur du pied de page en centimes de millimtre FooterIsDynamicHeight (Boolean) la hauteur du pied de page s'adapte automatiquement au contenu FooterLeftBorder (struct) - dtails de la bordure gauche du cadre entourant le pied de page (structure com.sun.star.table.BorderLine)

FooterRightBorder (struct) - dtails de la bordure droite entourant le pied de page (structure com.sun.star.table.BorderLine)

136 StarOffice 7 Manuel de programmation Basic

FooterTopBorder (struct) - dtails de la bordure suprieure entourant le pied de page (structure com.sun.star.table.BorderLine)

FooterBottomBorder (struct) - dtails de la bordure infrieure entourant le pied de page (structure com.sun.star.table.BorderLine)

FooterLeftBorderDistance (long) la distance entre la bordure gauche et le contenu du pied de page en centimes de millimtre FooterRightBorderDistance (long) la distance entre la bordure droite et le contenu du pied de page en centimes de millimtre FooterTopBorderDistance (long) la distance entre la bordure suprieure et le contenu du pied de page en centimes de millimtre FooterBottomBorderDistance (long) la distance entre la bordure infrieure et le contenu du pied de page en centimes de millimtre FooterIsShared (Boolean) les pieds de page des pages paires et impaires ont un contenu identique (voir FooterText, FooterTextLeft et FooterTextRight).

FooterBackColor (long) la couleur d'arrire-plan du pied de page FooterBackGraphicURL (String) l'URL de l'image d'arrire-plan utiliser FooterBackGraphicFilter (String) le nom du filtre pour interprter les images d'arrire-plan pour le pied de page FooterBackGraphicLocation (Enum) la position de l'image d'arrire-plan pour le pied de page (valeur selon l'numration com.sun.star.style.GraphicLocation)

FooterBackTransparent (Boolean) rend l'arrire-plan du pied de page transparent FooterShadowFormat (struct) dtails de l'ombre du pied de page (structure com.sun.star.table.ShadowFormat)

Modification du texte des en-ttes et pieds de pages


Le contenu des en-ttes et pieds de pages d'un classeur est accessible par les proprits suivantes :

LeftPageHeaderContent (Objet) contenu des en-ttes des pages paires (service com.sun.star.sheet.HeaderFooterContent) RightPageHeaderContent (Objet) contenu des en-ttes des pages impaires (service com.sun.star.sheet.HeaderFooterContent)

LeftPageFooterContent (Objet) contenu des pieds de pages des pages paires (service com.sun.star.sheet.HeaderFooterContent)

RightPageHeaderContent (Objet) contenu des pieds de pages des pages impaires (service com.sun.star.sheet.HeaderFooterContent)

Si vous n'avez pas besoin de faire la diffrence entre les pages paires et impaires pour les en-ttes ou les pieds de page (la proprit FooterIsShared vaut False), dfinissez les proprits des enttes et des pieds de page sur les pages impaires.

Chapitre 7 Classeurs 137

Tous les objets cits renvoient un objet supportant le service com.sun.star.sheet. HeaderFooterContent. l'aide des proprits (non authentiques) LeftText, CenterText et RightText, ce service fournit trois lments de texte aux en-ttes et pieds de page de StarOffice Calc. L'exemple qui suit crit la valeur "Ce n'est qu'un test." dans le champ texte de gauche de l'en-tte partir du modle "Par dfaut".
Dim Doc As Object Dim Sheet As Object Dim StyleFamilies As Object Dim PageStyles As Object Dim DefPage As Object Dim HText As Object Dim HContent As Object Doc = StarDesktop.CurrentComponent StyleFamilies = Doc.StyleFamilies PageStyles = StyleFamilies.getByName("PageStyles") DefPage = PageStyles.getByName("Par dfaut") DefPage.HeaderIsOn = True HContent = DefPage.RightPageHeaderContent HText = HContent.LeftText HText.String = "Ce n'est qu'un test." DefPage.RightPageHeaderContent = HContent

Notez bien la dernire ligne de l'exemple : lorsque le texte a t modifi, l'objet TextContent doit tre attribu une nouvelle fois l'en-tte pour que la modification prenne effet. Un autre mcanisme de modification du texte des en-ttes et pieds de page existe pour les documents texte (StarOffice Writer), car ils sont constitus d'un bloc de texte unique. Les proprits suivantes sont dfinies dans le service com.sun.star.style.PageProperties :

HeaderText (Object) objet Text avec le contenu de l'en-tte (service com.sun.star.text.XText)

HeaderTextLeft (Object) objet Text avec le contenu des en-ttes des pages de gauche (service com.sun.star.text.XText)

HeaderTextRight (Object) objet Text avec le contenu des en-ttes des pages de droite (service com.sun.star.text.XText)

FooterText (Object) objet Text avec le contenu des pieds de page (service com.sun.star.text.XText)

FooterTextLeft (Object) objet Text avec le contenu des pieds de page des pages de gauche (service com.sun.star.text.XText)

FooterTextRight (Object) objet Text avec le contenu des pieds de page des pages de droite (service com.sun.star.text.XText)

138 StarOffice 7 Manuel de programmation Basic

L'exemple suivant cre un en-tte dans le style de page "Standard" des documents texte et ajoute le texte "Ce n'est qu'un test" cet en-tte.
Dim Doc As Object Dim Sheet As Object Dim StyleFamilies As Object Dim PageStyles As Object Dim DefPage As Object Dim HText As Object Doc = StarDesktop.CurrentComponent StyleFamilies = Doc.StyleFamilies PageStyles = StyleFamilies.getByName("PageStyles") DefPage = PageStyles.getByName("Standard") DefPage.HeaderIsOn = True HText = DefPage.HeaderText HText.String = "Ce n'est qu'un test."

Dans cet exemple, l'accs est fourni directement par la proprit HeaderText du style de page plutt que par l'objet HeaderFooterContent.

Centrage (feuilles de calcul uniquement)


Le service com.sun.star.sheet.TablePageStyle, utilis uniquement dans les styles de page de StarOffice Calc, permet de centrer sur la page les plages de cellules souhaites. Ce service fournit les proprits suivantes :

CenterHorizontally (Boolean) le contenu du tableau est centr horizontalement CenterVertically (Boolean) le contenu du tableau est centr verticalement

Dfinition des lments imprimer (feuilles de calcul uniquement)


Lorsque vous formatez des feuilles, vous pouvez dfinir si les lments de la page sont visibles ou non. Pour cela, le service com.sun.star.sheet.TablePageStyle propose les proprits suivantes :

PrintAnnotations (Boolean) imprime les commentaires des cellules PrintGrid (Boolean) imprime les lignes de la grille PrintHeaders (Boolean) imprime les en-ttes de lignes et de colonnes PrintCharts (Boolean) imprime les diagrammes contenus dans une feuille PrintObjects (Boolean) imprime les objets incorpors PrintDrawing (Boolean) imprime les objets de dessin PrintDownFirst (Boolean) si le contenu d'une feuille s'tend sur plusieurs pages, les cellules sont d'abord imprimes verticalement du haut vers le bas, puis de la gauche vers la droite. PrintFormulas (Boolean) imprime les formules la place des valeurs calcules

Chapitre 7 Classeurs 139

PrintZeroValues (Boolean) imprime les valeurs zro

dition efficace des classeurs


Alors que la section prcdente dcrivait la structure principale des classeurs, celle-ci est consacre aux services permettant d'accder facilement des cellules individuelles ou des plages de cellules.

Plages de cellules
En plus de l'objet pour les cellules individuelles (le service com.sun.star.table.Cell), StarOffice propose galement des objets reprsentant des plages de cellules. Les objets comme CellRange sont crs avec l'appel getCellRangeByName de l'objet Spreadsheet :
Dim Doc As Object Dim Sheet As Object Dim CellRange As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets.getByName("Feuille 1") CellRange = Sheet.getCellRangeByName("A1:C15")

Le signe deux-points (:) sert spcifier une plage de cellules dans une feuille de calcul. Par exemple, A1:C15 reprsente l'ensemble des cellules entre les lignes 1 15 dans les colonnes A, B et C. L'emplacement des cellules individuelles dans une plage de cellules peut tre dtermin avec la mthode getCellByPosition, o les coordonnes de la cellule du coin suprieur gauche de la plage sont (0, 0). L'exemple suivant utilise cette mthode pour crer un objet partir de la cellule C3.
Dim Doc As Object Dim Sheet As Object Dim CellRange As Object Dim Cell As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets.getByName("Feuille 1") CellRange = Sheet.getCellRangeByName("B2:D4") Cell = CellRange.GetCellByPosition(1, 1)

Formatage de plages de cellules


Tout comme pour les cellules individuelles, vous pouvez appliquer un formatage des plages de cellules en utilisant le service com.sun.star.table.CellProperties. Pour plus d'informations et d'autres exemples de ce service, consultez la section Formatage .

Calculs avec des places de cellules


Vous pouvez utiliser la mthode computeFunction pour effectuer des oprations mathmatiques sur des plages de cellules. La mthode computeFunction attend une constante
140 StarOffice 7 Manuel de programmation Basic

comme paramtre pour dcrire la fonction mathmatique utiliser. Les constantes associes sont dfinies dans l'numration com.sun.star.sheet.GeneralFunction. Les valeurs disponibles sont les suivantes :

SUM - la somme de toutes les valeurs numriques COUNT - nombre total de valeurs (y compris les valeurs qui ne sont pas numriques) COUNTNUMS - nombre total de valeurs numriques AVERAGE - la moyenne de toutes les valeurs numriques MAX - la valeur numrique la plus leve MIN - la valeur numrique la plus basse PRODUCT - le produit de toutes les valeurs numriques STDEV - l'cart type VAR - la variance STDEVP - l'cart type calcul sur la population totale VARP - la variance calcule sur la population totale

L'exemple suivant calcule la valeur moyenne de la plage A1:C3 et affiche le rsultat dans une bote de message :
Dim Doc As Object Dim Sheet As Object Dim CellRange As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets.getByName("Feuille 1") CellRange = Sheet.getCellRangeByName("A1:C3") MsgBox CellRange.computeFunction(com.sun.star.sheet.GeneralFunction.AVERAGE)

Suppression du contenu des cellules


La mthode clearContents simplifie le processus de suppression du contenu de cellules ou de plages de cellules car elle permet de supprimer un type de contenu particulier d'une plage de cellules. L'exemple suivant supprime toutes les chanes et les informations de formatage direct de la plage B2:C3.
Dim Doc As Object Dim Sheet As Object Dim CellRange As Object Dim Flags As Long Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0)

Chapitre 7 Classeurs 141

CellRange = Sheet.getCellRangeByName("B2:C3") Flags = com.sun.star.sheet.CellFlags.STRING + _ com.sun.star.sheet.CellFlags.HARDATTR CellRange.clearContents(Flags)

Les drapeaux spcifis dans clearContents viennent de la liste de constantes com.sun.star.sheet.CellFlags. Cette liste fournit les lments suivants :

VALUE les valeurs numriques qui ne sont pas formates sous forme de date ou d'heure DATETIME les valeurs numriques formates sous forme de date ou d'heure STRING - les chanes ANNOTATION les commentaires lis aux cellules FORMULA les formules HARDATTR le formatage direct des cellules STYLES le formatage indirect OBJECTS les objets de dessin connects aux cellules EDITATTR le formatage des caractres ne s'appliquant qu' des parties des cellules

Vous pouvez galement combiner les constantes pour supprimer diffrentes informations avec un appel de clearContents.

Recherche et remplacement du contenu des cellules


Les classeurs, comme les documents texte, proposent une fonction de recherche et remplacement. Les objets Descriptor pour la recherche et le remplacement dans les classeurs ne sont pas crs directement au moyen de l'objet Document, mais plutt avec la liste Sheets. L'exemple suivant indique un processus de recherche et remplacement :
Dim Doc As Object Dim Sheet As Object Dim ReplaceDescriptor As Object Dim I As Integer Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) ReplaceDescriptor = Sheet.createReplaceDescriptor() ReplaceDescriptor.SearchString = "est" ReplaceDescriptor.ReplaceString = "tait" For I = 0 to Doc.Sheets.Count - 1 Sheet = Doc.Sheets(I) Sheet.ReplaceAll(ReplaceDescriptor) Next I

142 StarOffice 7 Manuel de programmation Basic

Cet exemple utilise la premire page du document pour crer un objet ReplaceDescriptor puis l'applique aux diffrentes pages dans une boucle.

Chapitre 7 Classeurs 143

144 StarOffice 7 Manuel de programmation Basic

CHAPITRE

Dessins et prsentations
Ce chapitre propose une introduction la cration et l'dition de dessins partir de macros. La premire section dcrit la structure des dessins, et notamment les lments de base contenus dans les dessins. La seconde section concerne les fonctions d'dition plus complexes, comme le groupement, la rotation et la mise l'chelle d'objets. Vous trouverez des informations sur la cration, l'ouverture et l'enregistrement de dessins dans le chapitre 5, Utilisation de documents StarOffice.

Structure des dessins


StarOffice ne limite pas le nombre de pages des documents de dessin. Vous pouvez concevoir chaque page sparment. Il n'y a pas de limite non plus sur le nombre d'lments de dessin que vous pouvez ajouter une page. La situation est rendue lgrement plus complexe par la prsence de couches. Par dfaut, chaque document contient les couches Mise en page , Contrles et Lignes de cote , tous les lments de dessin tant ajouts la couche Mise en page . Vous avez galement la possibilit d'ajouter de nouvelles couches. Consultez le Developer's Guide de StarOffice pour plus d'informations sur les couches de dessin.

Pages
Les pages d'un document de dessin sont accessibles par la liste DrawPages. Vous pouvez accder aux diffrentes pages soit par leur numro, soit par leur nom. Si un document contient une seule page, nomme Page 1, les exemples suivants sont quivalents. Exemple 1 :
Dim Doc As Object Dim Page As Object Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0)

145

Exemple 2 :
Dim Doc As Object Dim Page As Object Doc = StarDesktop.CurrentComponent Page = Doc.drawPages.getByName("Page 1")

Dans le premier exemple, on accde la page par son numro (la numrotation commenant 0). Dans le second, on y accde par son nom et la mthode getByName.
Dim sUrl As String, sFilter As String Dim sOptions As String Dim oSheets As Object, oSheet As Object oSheets = oDocument.Sheets If oSheets.hasByName("Lien") Then oSheet = oSheets.getByName("Lien") Else oSheet = oDocument.createInstance("com.sun.star.sheet.Spreadsheet") oSheets.insertByName("Lien", oSheet) oSheet.IsVisible = False End If

L'appel ci-dessus renvoie un objet Page supportant le service com.sun.star.drawing.DrawPage. Ce service reconnat les proprits suivantes :

BorderLeft (Long) la bordure gauche en centimes de millimtre BorderRight (Long) la bordure droite en centimes de millimtre BorderTop (Long) la bordure suprieure en centimes de millimtre BorderBottom (Long) la bordure infrieure en centimes de millimtre Width (Long) la largeur de page en centimes de millimtre Height (Long) la hauteur de page en centimes de millimtre Number (Short) le nombre de pages (la numrotation commenant 1), lecture seule Orientation (Enum) l'orientation de la page (selon l'numration com.sun.star.view.PaperOrientation)

Si ces paramtres sont modifis, c'est l'ensemble des pages du document qui sont affectes.

146 StarOffice 7 Manuel de programmation Basic

L'exemple suivant dfinit la taille de page d'un document de dessin qui vient d'tre ouvert 20 20 centimtres, avec une marge de 0,5 centimtres :
Dim Doc As Object Dim Page As Object Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) Page.BorderLeft = 500 Page.BorderRight = 500 Page.BorderTop = 500 Page.BorderBottom = 500 Page.Width = 20000 Page.Height = 20000

Proprits lmentaires des objets de dessin


Les objets de dessin comprennent des formes (rectangles, cercles, etc.), des lignes et des objets texte. Ils partagent tous un certain nombre de caractristiques communes et supportent le service com.sun.star.drawing.Shape. Ce service dfinit les proprits Size et Position d'un objet de dessin. StarOffice Basic propose galement plusieurs autres services permettant de modifier de telles proprits comme le formatage ou d'appliquer des remplissages. Les options de formatage disponibles dpendent du type d'objet de dessin. L'exemple suivant cre et insre un rectangle dans un document de dessin :
Dim Doc As Object Dim Page As Object Dim RectangleShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape") RectangleShape.Size = Size RectangleShape.Position = Point Page.add(RectangleShape)

Chapitre 8 Dessins et prsentations 147

Cet exemple utilise l'appel StarDesktop.CurrentComponent pour dterminer quel document est ouvert. L'objet Document dtermin de cette manire renvoie la premire page du dessin par l'appel drawPages(0). Les structures Point et Size sont ensuite initialises avec le point d'origine (angle suprieur gauche) et la taille de l'objet de dessin. Les longueurs sont spcifies en centimes de millimtre. Le code utilise ensuite l'appel Doc.createInstance pour crer l'objet de dessin rectangulaire comme spcifi par le service com.sun.star.drawing.RectangleShape. Enfin, l'objet de dessin est assign une page avec un appel Page.add.

Proprits Fill
Cette section dcrit quatre services, et pour chacun, le code d'exemple utilise un lment de forme rectangulaire combin diffrents types de formatage. Les proprits de remplissage sont combines dans le service com.sun.star.drawing.FillProperties. StarOffice reconnat quatre types de formatage principaux pour une zone remplir. Le cas le plus simple est celui d'un remplissage uni. Les options dfinissant des dgrads de couleurs et des hachures permettent de faire appel d'autres couleurs. La quatrime variante consiste projeter des images existantes dans la zone remplir. Le mode de remplissage d'un objet de dessin se dfinit avec la proprit FillStyle. Les valeurs autorises sont dfinies dans com.sun.star.drawing.FillStyle.

Remplissages unis
La principale proprit des remplissages unis est

FillColor (Long) la couleur de remplissage de la zone.

Pour utiliser ce mode de remplissage, vous devez dfinir la proprit FillStyle sur le mode de remplissage SOLID.

148 StarOffice 7 Manuel de programmation Basic

L'exemple suivant cre une forme rectangulaire et la remplit de rouge (valeur RVB 255, 0, 0) :
Dim Doc As Object Dim Page As Object Dim RectangleShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape") RectangleShape.Size = Size RectangleShape.Position = Point RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.SOLID RectangleShape.FillColor = RGB(255,0,0) Page.add(RectangleShape)

Dgrad de couleurs
Si vous dfinissez la proprit FillStyle sur GRADIENT, vous pouvez appliquer un dgrad de couleurs n'importe quelle zone remplir d'un document StarOffice. Pour appliquer un dgrad de couleurs prdfini, il suffit d'assigner le nom associ de la proprit FillTransparenceGradientName. Pour dfinir votre propre dgrad de couleurs, vous devez constituer une structure com.sun.star.awt.Gradient assigner la proprit FillGradient. Cette proprit propose les options suivantes :

Style (Enum) - le type du dgrad, par exemple, linaire ou radial (valeurs par dfaut selon com.sun.star.awt.GradientStyle) StartColor (Long) - la couleur initiale du dgrad de couleurs StartColor (Long) - la couleur finale du dgrad de couleurs Angle (Short) - l'angle du dgrad de couleurs en diximes de degr XOffset (Short) - la coordonne en X laquelle le dgrad de couleur commence, en centimes de millimtre XOffset (Short) - la coordonne en Y laquelle le dgrad de couleur commence, en centimes de millimtre StartIntensity (Short) - l'intensit de StartColor en pourcentage (dans StarOffice Basic, vous pouvez galement spcifier des valeurs suprieures 100 pour cent)

Chapitre 8 Dessins et prsentations 149

EndIntensity (Short) - l'intensit de EndColor en pourcentage (dans StarOffice Basic, vous pouvez galement spcifier des valeurs suprieures 100 pour cent) StepCount (Short) - le nombre de couleurs intermdiaires utilises par StarOffice pour calculer les dgrads

L'exemple suivant montre l'utilisation de dgrads avec la structure com.sun.star.awt.Gradient :


Dim Doc As Object Dim Page As Object Dim RectangleShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Dim Gradient As New com.sun.star.awt.Gradient Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape") RectangleShape.Size = Size RectangleShape.Position = Point Gradient.Style = com.sun.star.awt.GradientStyle.LINEAR Gradient.StartColor = RGB(255,0,0) Gradient.EndColor = RGB(0,255,0) Gradient.StartIntensity = 150 Gradient.EndIntensity = 150 Gradient.Angle = 450 Gradient.StepCount = 100 RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.GRADIENT RectangleShape.FillGradient = Gradient Page.add(RectangleShape)

Cet exemple cre un dgrad de couleurs linaire (Style = LINEAR). Le dgrad commence en rouge (StartColor) dans l'angle suprieur gauche et finit, en suivant un angle de 45 degrs (Angle), en vert (EndColor) dans l'angle infrieur droit. L'intensit des couleurs initiale et finale est de 150 pour cent (StartIntensity et EndIntensity) ce qui donne des couleurs apparemment plus brillantes que celles spcifies dans les proprits StartColor et EndColor. Le dgrad de couleurs est constitu de cent couleurs intermdiaires (StepCount).

Hachures
Pour crer un remplissage hachur, vous devez donner la proprit FillStyle la valeur HATCH. Le code pour dfinir des hachures est trs similaire celui des dgrads de couleurs. L
150 StarOffice 7 Manuel de programmation Basic

aussi, une structure auxiliaire, com.sun.star.drawing.Hatch en l'occurrence, sert dfinir l'apparence des hachures. La structure pour les hachures a les proprits suivantes :

Style (Enum) - le type de hachures : simples, carres ou carres avec diagonales (valeurs par dfaut selon com.sun.star.awt.HatchStyle)

Color (Long) - la couleur des lignes Distance (Long) - la distance entre les lignes en centimes de millimtre Angle (Short) - l'angle des hachures en diximes de degr

L'exemple suivant montre l'utilisation d'une structure pour hachures :


Dim Doc As Object Dim Page As Object Dim RectangleShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Dim Hatch As New com.sun.star.drawing.Hatch Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape") RectangleShape.Size = Size RectangleShape.Position = Point RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.HATCH Hatch.Style = com.sun.star.drawing.HatchStyle.SINGLE Hatch.Color = RGB(64,64,64) Hatch.Distance = 20 Hatch.Angle = 450 RectangleShape.FillHatch = Hatch Page.add(RectangleShape)

Ce code cre une structure de hachures simple (HatchStyle = SINGLE) dont les lignes sont pivotes de 45 degrs (Angle). Les lignes sont gris fonc (Color) et espaces de 0,2 millimtres (Distance).

Chapitre 8 Dessins et prsentations 151

Bitmaps
Pour utiliser une projection bitmap comme remplissage, vous devez dfinir la proprit FillStyle BITMAP. Si le bitmap est dj disponible dans StarOffice, il vous suffit de spcifier son nom dans la proprit FillBitMapName style d'affichage (simple, carrelage ou tir) dans la proprit FillBitmapMode (valeurs par dfaut selon com.sun.star.drawing.BitmapMode). Pour utiliser un fichier bitmap externe, vous pouvez spcifier son URL dans la proprit FillBitmapURL. L'exemple suivant cre un rectangle, dont il remplit la surface en rptant le bitmap Sky, disponible dans StarOffice.
Dim Doc As Object Dim Page As Object Dim RectangleShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape") RectangleShape.Size = Size RectangleShape.Position = Point RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.BITMAP RectangleShape.FillBitmapName = "Sky" RectangleShape.FillBitmapMode = com.sun.star.drawing.BitmapMode.REPEAT

Page.add(RectangleShape)

Transparence
Vous avez galement la possibilit d'ajuster la transparence des diffrents remplissages que vous appliquez. La manire la plus simple de modifier la transparence d'un lment de dessin consiste utiliser la proprit FillTransparence.

152 StarOffice 7 Manuel de programmation Basic

L'exemple suivant cre un rectangle rouge avec une transparence de 50 pour cent.
Dim Doc As Object Dim Page As Object Dim RectangleShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape") RectangleShape.Size = Size RectangleShape.Position = Point RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.SOLID RectangleShape.FillTransparence = 50 RectangleShape.FillColor = RGB(255,0,0) Page.add(RectangleShape)

Pour rendre le remplissage transparent, dfinissez la proprit FillTransparence 100. En plus de la proprit FillTransparence, le service com.sun.star.drawing.FillProperties propose galement la proprit FillTransparenceGradient. Elle sert dfinir un dgrad pour la transparence d'une zone remplir.

Proprits Line
Tous les objets de dessin susceptibles d'avoir une ligne de bordure supportent le service com.sun.star.drawing.LineStyle. Ce service propose notamment les proprits suivantes :

LineStyle (Enum) - le type de ligne (valeurs par dfaut selon com.sun.star.drawing.LineStyle)

LineColor (Long) - la couleur de la ligne LineTransparence (Short) - la transparence de la ligne LineWidth (Long) - l'paisseur de la ligne en centimes de millimtre LineJoint (Enum) - les transitions entre les points de connexion (valeurs par dfaut selon com.sun.star.drawing.LineJoint)

Chapitre 8 Dessins et prsentations 153

L'exemple suivant cre un rectangle avec une bordure continue (LineStyle = SOLID) de 5 millimtres d'paisseur (LineWidth) et une transparence de 50 pour cent. Les bords droit et gauche de la ligne se prolongent jusqu' ce qu'ils se rencontrent (LineJoint = MITER) de manire former un angle droit.
Dim Doc As Object Dim Page As Object Dim RectangleShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape") RectangleShape.Size = Size RectangleShape.Position = Point RectangleShape.LineColor = RGB(128,128,128) RectangleShape.LineTransparence = 50 RectangleShape.LineWidth = 500 RectangleShape.LineJoint = com.sun.star.drawing.LineJoint.MITER RectangleShape.LineStyle = com.sun.star.drawing.LineStyle.SOLID Page.add(RectangleShape)

En plus des proprits indiques prcdemment, le service com.sun.star.drawing.LineStyle propose des options pour dessiner des lignes pointilles. Pour plus d'informations, consultez la rfrence de l'API de StarOffice.

Proprits Text (objets de dessin)


Les services com.sun.star.style.CharacterProperties et com.sun.star.style.ParagraphProperties peuvent formater du texte en objets de dessin. Ces services portent sur les caractres individuels comme sur les paragraphes et sont traits en dtail dans le chapitre 6 (Documents texte ).

154 StarOffice 7 Manuel de programmation Basic

L'exemple suivant insre du texte dans un rectangle et formate sa police grce au service com.sun.star.style.CharacterProperties.
Dim Doc As Object Dim Page As Object Dim RectangleShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape") RectangleShape.Size = Size RectangleShape.Position = Point Page.add(RectangleShape) RectangleShape.String = "Ceci est un test" RectangleShape.CharWeight = com.sun.star.awt.FontWeight.BOLD RectangleShape.CharFontName = "Arial"

Ce code fait appel la proprit String du rectangle pour insrer le texte et aux proprits CharWeight et CharFontName du service com.sun.star.style.CharacterProperties pour formater la police du texte. Le texte ne peut tre insr qu'aprs l'ajout de l'objet de dessin la page de dessin. Vous pouvez galement utiliser le service com.sun.star.drawing.Text pour positionner et formater du texte dans un objet de dessin. Voici quelques proprits importantes de ce service :

TextAutoGrowHeight (Boolean) - adapte la hauteur de l'lment de dessin la hauteur de l'lment qu'il contient TextAutoGrowWidth (Boolean) - adapte la largeur de l'lment de dessin au texte qu'il contient TextHorizontalAdjust (Enum) - la position horizontale du texte l'intrieur de l'lment de dessin (valeurs par dfaut selon com.sun.star.drawing.TextHorizontalAdjust) TextVerticalAdjust (Enum) - la position verticale du texte l'intrieur de l'lment de dessin (valeurs par dfaut selon com.sun.star.drawing.TextVerticalAdjust) TextLeftDistance (Long) - cart gauche entre l'lment de dessin et le texte, en centimes de millimtre TextRightDistance (Long) - cart droite entre l'lment de dessin et le texte en centimes de millimtre TextUpperDistance (Long) - cart entre le haut du texte et l'lment de dessin en centimes de millimtre

Chapitre 8 Dessins et prsentations 155

TextLowerDistance (Long) - cart entre le bas du texte et l'lment de dessin en centimes de millimtre

L'exemple suivant montre l'utilisation des proprits cites.


Dim Doc As Object Dim Page As Object Dim RectangleShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape") RectangleShape.Size = Size RectangleShape.Position = Point Page.add(RectangleShape) RectangleShape.String = "Ceci est un test" ' Ne peut se trouver qu'aprs Page.add !

RectangleShape.TextVerticalAdjust = com.sun.star.drawing.TextVerticalAdjust.TOP RectangleShape.TextHorizontalAdjust = com.sun.star.drawing.TextHorizontalAdjust.LEFT RectangleShape.TextLeftDistance = 300 RectangleShape.TextRightDistance = 300 RectangleShape.TextUpperDistance = 300 RectangleShape.TextLowerDistance = 300

Ce code insre un lment de dessin dans une page puis ajoute un texte dans le coin suprieur gauche de celui-ci grce aux proprits TextVerticalAdjust et TextHorizontalAdjust. L'cart minimum entre le texte et le bord de l'objet est dfini trois millimtres.

Proprits Shadow
Vous pouvez ajouter une ombre la plupart des objets de dessin en utilisant le service com.sun.star.drawing.ShadowProperties . Ce service propose les proprits suivantes :

Shadow (Boolean) - active l'ombre ShadowColor (Long) - la couleur de l'ombre ShadowTransparence (Short) - la transparence de l'ombre ShadowXDistance (Long) - l'cart vertical entre l'ombre et l'objet de dessin en centimes de millimtres

156 StarOffice 7 Manuel de programmation Basic

ShadowYDistance (Long) - l'cart horizontal entre l'ombre et l'objet de dessin en centimes de millimtres

L'exemple suivant cre un rectangle avec une ombre dcale par rapport celui-ci de 2 millimtres verticalement et horizontalement. L'ombre est rendue en gris fonc avec une transparence de 50 pour cent.
Dim Doc As Object Dim Page As Object Dim RectangleShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape") RectangleShape.Size = Size RectangleShape.Position = Point RectangleShape.Shadow = True RectangleShape.ShadowColor = RGB(192,192,192) RectangleShape.ShadowTransparence = 50 RectangleShape.ShadowXDistance = 200 RectangleShape.ShadowYDistance = 200 Page.add(RectangleShape)

Prsentation de diffrents objets de dessin


Formes rectangulaires
Les objets de forme rectangulaire (com.sun.star.drawing.RectangleShape) supportent les services suivants pour leur formatage :

Proprits Fill com.sun.star.drawing.FillProperties Proprits Line com.sun.star.drawing.LineProperties Proprits Text com.sun.star.drawing.Text (avec com.sun.star.style.CharacterProperties et com.sun.star.style.ParagraphProperties)

Proprits Shadow com.sun.star.drawing.ShadowProperties CornerRadius (Long) rayon d'arrondissement des angles en centimes de millimtre

Chapitre 8 Dessins et prsentations 157

Cercles et ellipses
Le service com.sun.star.drawing.EllipseShape est charg des cercles et des ellipses, et prend en charge les services suivants :

Proprits Fill com.sun.star.drawing.FillProperties Proprits Line com.sun.star.drawing.LineProperties Proprits Text com.sun.star.drawing.Text (avec com.sun.star.style.CharacterProperties et com.sun.star.style.ParagraphProperties)

Proprits Shadow com.sun.star.drawing.ShadowProperties

Outre ces services, les cercles et les ellipses offrent les proprits suivantes :

CircleKind (Enum) - type de cercle ou d'ellipse (les valeurs par dfaut correspondent com.sun.star.drawing.CircleKind)

CircleStartAngle (Long) - angle de dpart en diximes de degr (pour les segments de cercle ou d'ellipse seulement) CircleEndAngle (Long) - angle final en diximes de degr (pour les segments de cercle ou d'ellipse seulement)

La proprit CircleKind dtermine si un objet est un cercle complet, une tranche circulaire ou une section d'un cercle. Les valeurs suivantes sont disponibles :

com.sun.star.drawing.CircleKind.FULL cercle entier ou ellipse entire com.sun.star.drawing.CircleKind.CUT com.sun.star.drawing.CircleKind.CUT section de cercle (cercle partiel dont les interfaces sont lies directement les unes aux autres) com.sun.star.drawing.CircleKind.SECTION tranche circulaire com.sun.star.drawing.CircleKind.ARC angle (sans la ligne du cercle)

L'exemple suivant cre une tranche circulaire avec un angle de 70 degrs (produit par la diffrence entre l'angle de dpart de 20 degrs et l'angle final de 90 degrs).
Dim Doc As Object Dim Page As Object Dim EllipseShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0)

158 StarOffice 7 Manuel de programmation Basic

EllipseShape = Doc.createInstance("com.sun.star.drawing.EllipseShape") EllipseShape.Size = Size EllipseShape.Position = Point EllipseShape.CircleStartAngle = 2000 EllipseShape.CircleEndAngle = 9000 EllipseShape.CircleKind = Page.add(EllipseShape) com.sun.star.drawing.CircleKind.SECTION

Lignes
StarOffice offre le service com.sun.star.drawing.LineShape pour les objets Line. Les objets Line supportent tous les services de formatage gnraux, l'exception des zones. Vous trouverez ci-aprs toutes les proprits associes au service LineShape :

Proprits Line com.sun.star.drawing.LineProperties Proprits Text com.sun.star.drawing.Text (avec com.sun.star.style.CharacterProperties et com.sun.star.style.ParagraphProperties)

Proprits Shadow com.sun.star.drawing.ShadowProperties

L'exemple suivant cre et formate une ligne l'aide des proprits nommes. L'origine de la ligne est spcifie dans la proprit Location, tandis que les coordonnes rpertories dans la proprit Size spcifient le point d'arrive de la ligne.
Dim Doc As Object Dim Page As Object Dim LineShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) LineShape = Doc.createInstance("com.sun.star.drawing.LineShape") LineShape.Size = Size LineShape.Position = Point Page.add(LineShape)

Chapitre 8 Dessins et prsentations 159

Formes polygonales
StarOffice supporte galement les formes polygonales complexes par l'intermdiaire du service com.sun.star.drawing.PolyPolygonShape. proprement parler, un polypolygone n'est pas un simple polygone mais un polygone multiple. Par consquent, il est possible de spcifier plusieurs listes indpendantes contenant des points d'inflexion et de les combiner pour former un objet complet. Comme pour les formes rectangulaires, toutes les proprits de formatage des objets de dessin sont galement disponibles pour les polypolygones :

Proprits Fill com.sun.star.drawing.FillProperties Proprits Line com.sun.star.drawing.LineProperties Proprits Text com.sun.star.drawing.Text (avec com.sun.star.style.CharacterProperties et com.sun.star.style.ParagraphProperties)

Proprits Shadow com.sun.star.drawing.ShadowProperties

Le service PolyPolygonShape offre galement une proprit vous permettant de dfinir les coordonnes d'un polygone :

PolyPolygon (Array) champ contenant les coordonnes du polygone (matrice de type double avec des points de type com.sun.star.awt.Point )

L'exemple suivant montre comment dfinir un triangle avec le service PolyPolygonShape.


Dim Doc As Object Dim Page As Object Dim PolyPolygonShape As Object Dim PolyPolygon As Variant Dim Coordinates(2) As New com.sun.star.awt.Point Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) PolyPolygonShape = Doc.createInstance("com.sun.star.drawing.PolyPolygonShape") Page.add(PolyPolygonShape) Coordinates(0).x = 1000 Coordinates(1).x = 7500 Coordinates(2).x = 10000 Coordinates(0).y = 1000 Coordinates(1).y = 7500 Coordinates(2).y = 5000 PolyPolygonShape.PolyPolygon = Array(Coordinates()) ' Page.add doit tre spcifi avant les coordonnes

Les points d'un polygone tant dfinis comme des valeurs absolues, il n'est pas ncessaire d'en spcifier la taille ou la position de dpart. Vous devez plutt crer une matrice de points, l'intgrer une seconde matrice ( l'aide de l'appel Array(Coordinates() ) et assigner cette matrice au

160 StarOffice 7 Manuel de programmation Basic

polygone. Avant que l'appel correspondant puisse s'effectuer, le polygone doit tre insr dans le document. La matrice double dans la dfinition permet de crer des formes complexes en fusionnant plusieurs polygones. Par exemple, vous pouvez crer un rectangle et y insrer un autre rectangle pour crer un trou dans le rectangle d'origine :
Dim Doc As Object Dim Page As Object Dim PolyPolygonShape As Object Dim PolyPolygon As Variant Dim Square1(3) As New com.sun.star.awt.Point Dim Square2(3) As New com.sun.star.awt.Point Dim Square3(3) As New com.sun.star.awt.Point Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) PolyPolygonShape = Doc.createInstance("com.sun.star.drawing.PolyPolygonShape") Page.add(PolyPolygonShape) Square1(0).x = 5000 Square1(1).x = 10000 Square1(2).x = 10000 Square1(3).x = 5000 Square1(0).y = 5000 Square1(1).y = 5000 Square1(2).y = 10000 Square1(3).y = 10000 Square2(0).x = 6500 Square2(1).x = 8500 Square2(2).x = 8500 Square2(3).x = 6500 Square2(0).y = 6500 Square2(1).y = 6500 Square2(2).y = 8500 Square2(3).y = 8500 Square3(0).x = 6500 Square3(1).x = 8500 Square3(2).x = 8500 Square3(3).x = 6500 Square3(0).y = 9000 Square3(1).y = 9000 Square3(2).y = 9500 Square3(3).y = 9500 PolyPolygonShape.PolyPolygon = Array(Square1(), Square2(), Square3()) ' Page.add doit tre spcifi avant les coordonnes

Par rapport aux zones pleines et aux zones qui sont des trous, StarOffice applique une rgle simple : le bord de la forme extrieure est toujours la bordure extrieure du polypolygone. La ligne
Chapitre 8 Dessins et prsentations 161

suivante vers l'intrieur est la bordure intrieure de la forme et marque la transition vers le premier trou. S'il existe une autre ligne vers l'intrieur, elle marque la transition vers une zone pleine.

Images
Les derniers lments de dessin prsents ici sont des objets graphiques bass sur le service com.sun.star.drawing.GraphicObjectShape. Ils peuvent tre utiliss avec n'importe quelle image de StarOffice dont l'apparence peut tre adapte au moyen d'un ensemble complet de proprits. Les objets graphiques supportent deux des proprits de formatage gnrales :

Proprits Text com.sun.star.drawing.Text (avec com.sun.star.style.CharacterProperties et com.sun.star.style.ParagraphProperties)

Proprits Shadow com.sun.star.drawing.ShadowProperties

Les autres proprits supportes par les objets graphiques sont les suivantes :

GraphicURL (String) - URL de l'image AdjustLuminance (Short) - luminosit des couleurs, comme pourcentage (les valeurs ngatives sont aussi autorises) AdjustContrast (Short) - contraste comme pourcentage (les valeurs ngatives sont aussi autorises) AdjustRed (Short) - valeur de rouge comme pourcentage (les valeurs ngatives sont aussi autorises) AdjustGreen (Short) - valeur de vert comme pourcentage (les valeurs ngatives sont aussi autorises) AdjustBlue (Short) - valeur de bleu comme pourcentage (les valeurs ngatives sont aussi autorises) Gamma (Short) - valeur gamma d'une image Transparency (Short) - transparence d'une image comme pourcentage GraphicColorMode (enum) - mode de couleur, par exemple, standard, niveaux de gris, noir et blanc (valeur par dfaut correspondant com.sun.star.drawing.ColorMode)

162 StarOffice 7 Manuel de programmation Basic

L'exemple suivant montre comment insrer une page dans un objet graphique.Dim Doc As Object
Dim Page As Object Dim GraphicObjectShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) GraphicObjectShape = Doc.createInstance("com.sun.star.drawing.GraphicObjectShape") GraphicObjectShape.Size = Size GraphicObjectShape.Position = Point GraphicObjectShape.GraphicURL = "fichier:///c:/test.jpg" GraphicObjectShape.AdjustBlue = -50 GraphicObjectShape.AdjustGreen = 5 GraphicObjectShape.AdjustBlue = 10 GraphicObjectShape.AdjustContrast = 20 GraphicObjectShape.AdjustLuminance = 50 GraphicObjectShape.Transparency = 40 GraphicObjectShape.GraphicColorMode = com.sun.star.drawing.ColorMode.STANDARD Page.add(GraphicObjectShape) ' spcifications, non primordiales car les dernires coordonnes sont lies

Ce code insre l'image test.jpg et adapte son apparence en utilisant les proprits Adjust. Dans cet exemple, les images sont reprsentes avec 40 pour cent de transparence et aucune autre conversion de couleur (GraphicColorMode = STANDARD).

Chapitre 8 Dessins et prsentations 163

dition des objets de dessin


Regroupement des objets
Dans de nombreuses situations, il est utile de regrouper plusieurs objets de dessin individuels afin qu'ils se comportent comme un seul objet. L'exemple suivant regroupe deux objets de dessin :
Dim Doc As Object Dim Page As Object Dim Square As Object Dim Circle As Object Dim Shapes As Object Dim Group As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Dim NewPos As New com.sun.star.awt.Point Dim Height As Long Dim Width As Long Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) Point.x = 3000 Point.y = 3000 Size.Width = 3000 Size.Height = 3000 ' ' cre un lment de dessin carr Square = Doc.createInstance("com.sun.star.drawing.RectangleShape") Square.Size = Size Square.Position = Point Square.FillColor = RGB(255,128,128) Page.add(Square) ' ' cre un lment de dessin cercle Circle = Doc.createInstance("com.sun.star.drawing.EllipseShape") Circle.Size = Size Circle.Position = Point Circle.FillColor = RGB(255,128,128) Circle.FillColor = RGB(0,255,0) Page.add(Circle) ' ' regroupe les lments de dessin carr et cercle Shapes = createUnoService("com.sun.star.drawing.ShapeCollection") Shapes.add(Square) Shapes.add(Circle) Group = Page.group(Shapes) ' ' centre les lments de dessin regroups Height = Page.Height Width = Page.Width NewPos.X = Width / 2 NewPos.Y = Height / 2 Height = Group.Size.Height

164 StarOffice 7 Manuel de programmation Basic

Width = Group.Size.Width NewPos.X = NewPos.X - Width / 2 NewPos.Y = NewPos.Y - Height / 2 Group.Position = NewPos

Ce code cre un rectangle et un cercle et les insre dans une page. Il cre ensuite un objet supportant le service com.sun.star.drawing.ShapeCollection et utilise la mthode Add pour ajouter le rectangle et le cercle cet objet. Le service ShapeCollection est ajout la page en utilisant la mthode Group et retourne l'objet Group rel qui peut tre dit comme une forme Shape individuelle. Si vous souhaitez formater les diffrents objets d'un groupe, appliquez le formatage avant de les ajouter au groupe. Vous ne pouvez pas modifier les objets une fois qu'ils constituent un groupe.

Rotation et cisaillement des objets de dessin


Tous les objets de dessin dcrits dans les sections prcdentes peuvent galement faire l'objet de rotations et de cisaillements l'aide du service com.sun.star.drawing.RotationDescriptor. Ce service offre les proprits suivantes :

RotateAngle (Long) angle de rotation en centimes de degr ShearAngle (Long) angle de cisaillement en centimes de degr

L'exemple suivant cre un rectangle et le fait pivoter de 30 degrs l'aide de la proprit RotateAngle :
Dim Doc As Object Dim Page As Object Dim RectangleShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape") RectangleShape.Size = Size RectangleShape.Position = Point RectangleShape.RotateAngle = 3000 Page.add(RectangleShape)

Chapitre 8 Dessins et prsentations 165

Le prochain exemple cre le mme rectangle que dans le prcdent, mais le cisaille de 30 degrs l'aide de la proprit ShearAngle.
Dim Doc As Object Dim Page As Object Dim RectangleShape As Object Dim Point As New com.sun.star.awt.Point Dim Size As New com.sun.star.awt.Size Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape") RectangleShape.Size = Size RectangleShape.Position = Point RectangleShape.ShearAngle = 3000 Page.add(RectangleShape)

Recherche et remplacement
Tout comme dans les documents texte, les documents de dessin comportent une fonction de recherche et de remplacement. Cette fonction est semblable celle utilise dans les documents texte, dcrite au chapitre 6, Documents texte . Toutefois, dans les documents de dessin, les objets Descriptor de recherche et de remplacement ne sont pas crs directement par l'intermdiaire de l'objet Document, mais par l'intermdiaire du niveau de caractre associ. L'exemple suivant illustre le processus de remplacement dans un dessin :
Dim Doc As Object Dim Page As Object Dim ReplaceDescriptor As Object Dim I As Integer Doc = StarDesktop.CurrentComponent Page = Doc.drawPages(0) ReplaceDescriptor = Page.createReplaceDescriptor() ReplaceDescriptor.SearchString = "is" ReplaceDescriptor.ReplaceString = "was" For I = 0 to Doc.drawPages.Count - 1 Page = Doc.drawPages(I) Page.ReplaceAll(ReplaceDescriptor) Next I

166 StarOffice 7 Manuel de programmation Basic

Ce code utilise le premier DrawPage du document pour crer un ReplaceDescriptor et applique ensuite ce descripteur dans une boucle, toutes les pages du document de dessin.

Chapitre 8 Dessins et prsentations 167

Prsentations
Les prsentations StarOffice sont bases sur des documents de dessin. Chaque page de la prsentation est une diapo. L'accs aux diapos s'effectue de la mme manire que l'accs un dessin standard, par la liste DrawPages de l'objet Document. Le service com.sun.star.presentation. PresentationDocument, charg des documents de prsentation, fournit galement le service com.sun.star.drawing.DrawingDocument complet.

Utilisation des prsentations


Outre les fonctions de dessin offertes par la proprit Presentation, le document de prsentation contient un objet Presentation donnant accs aux proprits principales et aux mcanismes de contrle des prsentations. Par exemple, cet objet offre une mthode start pouvant dmarrer les prsentations.
Dim Doc As Object Dim Presentation As Object Doc = StarDesktop.CurrentComponent Presentation = Doc.Presentation Presentation.start()

Le code utilis dans cet exemple cre un objet Doc faisant rfrence au document de prsentation actif et tablit l'objet Presentation associ. La mthode start() de l'objet permet de dmarrer l'exemple et d'excuter la prsentation l'cran. Les mthodes suivantes sont fournies comme objets Presentation :

start - dmarre la prsentation end - met fin la prsentation rehearseTimingsrehearseTimings - dmarre la prsentation depuis le dbut et tablit son excution AllowAnimations (Boolean) excute les animations de la prsentation CustomShow (String) vous permet de spcifier le nom de la prsentation afin de pouvoir y faire rfrence dans la prsentation FirstPage (String) nom de la diapo par laquelle la prsentation doit commencer IsAlwaysOnTop (Boolean) affiche toujours la fentre de la prsentation au premier plan IsAutomatic (Boolean) excute automatiquement toute la prsentation IsEndless (Boolean) recommence la prsentation depuis le dbut une fois termine IsFullScreen (Boolean) dmarre automatiquement la prsentation en mode plein cran IsMouseVisible (Boolean) affiche la souris pendant la prsentation Pause (long) dure pendant laquelle un cran noir s'affiche la fin de la prsentation StartWithNavigator (Boolean) affiche la fentre du navigateur au dmarrage de la prsentation UsePn (Boolean) affiche le pointeur pendant la prsentation

Les proprits suivantes sont galement disponibles :


168 StarOffice 7 Manuel de programmation Basic

CHAPITRE

Diagrammes
StarOffice peut afficher les donnes dans un diagramme qui cre des liaisons graphiques entre les donnes sous la forme de barres, de secteurs, de lignes ou d'autres lments. Les donnes peuvent tre affiches sous forme d'images 2D ou 3D, et l'apparence des lments du diagramme peut tre adapte individuellement de faon semblable au processus utilis pour les lments de dessin. Si les donnes sont disponibles dans une feuille de calcul, elles peuvent tre lies au diagramme de faon dynamique. Toute modification apporte aux donnes de base peut, dans le cas prsent, tre visualise immdiatement dans le diagramme associ. Ce chapitre prsente l'interface de programmation des modules de diagramme de StarOffice et s'intresse l'utilisation des diagrammes au sein des classeurs.

Utilisation de diagrammes dans les feuilles de calcul


Les diagrammes ne sont pas traits comme des documents indpendants dans StarOffice, mais comme des objets incorpors dans un document existant. Les diagrammes des documents texte et de dessin restent isols du contenu du document ; en revanche, lorsqu'ils sont utiliss dans les classeurs, un mcanisme permet d'tablir une liaison entre les donnes du document et les diagrammes incorpors. L'exemple suivant explique l'interaction entre un classeur et un diagramme :
Dim Doc As Object Dim Charts As Object Dim Chart as Object Dim Rect As New com.sun.star.awt.Rectangle Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress Doc = StarDesktop.CurrentComponent Charts = Doc.Sheets(0).Charts Rect.X = 8000 Rect.Y = 1000 Rect.Width = 10000 Rect.Height = 7000 RangeAddress(0).Sheet = 0 RangeAddress(0).StartColumn = 0 RangeAddress(0).StartRow = 0

169

RangeAddress(0).EndColumn = 2 RangeAddress(0).EndRow = 12 Charts.addNewByName("MonDiagramme", Rect, RangeAddress(), True, True)

Bien que le code utilis dans l'exemple puisse paratre complexe, les processus centraux sont limits trois lignes : la premire ligne centrale cre la variable de document Doc, qui fait rfrence au classeur actif (ligne Doc = StarDesktop.CurrentComponent). Le code utilis dans l'exemple cre ensuite une liste contenant tous les diagrammes de la premire feuille de calcul (ligne Charts = Doc.Sheets(0).Charts). Enfin, un nouveau diagramme est ajout la dernire ligne de cette liste l'aide de la mthode addNewByName. L'utilisateur peut ensuite visualiser ce nouveau diagramme. La dernire ligne initialise les structures auxiliaires Rect et RangeAddress, que la mthode addNewByName fournit galement comme paramtre. Rect dtermine la position du diagramme dans la feuille de calcul. RangeAddress dtermine la plage de donnes lier au diagramme. L'exemple prcdent cre un diagramme barres. Si vous souhaitez un autre type de graphique, vous devez remplacer le diagramme barres de faon explicite :
Chart = Charts.getByName("MonDiagramme").embeddedObject Chart.Diagram = Chart.createInstance("com.sun.star.chart.LineDiagram")

La premire ligne dfinit l'objet Chart correspondant. La seconde ligne remplace le diagramme actif par un nouveau dans cet exemple, un diagramme linaire.
Dans Excel, une distinction est faite entre les diagrammes ayant t insrs comme une page spare dans un document Excel, et ceux qui sont incorpors dans une page de feuille de calcul. Par consquent, deux mthodes d'accs diffrentes sont dfinies ici pour les diagrammes. Cette distinction n'existe pas dans StarOffice Basic, car les diagrammes de StarOffice Calc sont toujours crs en tant qu'objets incorpors d'une page de feuille de calcul. L'accs aux diagrammes s'effectue toujours en utilisant la liste Charts de l'objet Sheet associ.

La structure des diagrammes


La structure d'un diagramme et donc la liste des services et interfaces qu'il prend en charge dpend de son type. Par exemple, les mthodes et proprits de l'axe Z sont disponibles uniquement dans les diagrammes 3D et non dans les diagrammes 2D. Dans les diagrammes secteurs, il n'existe aucune interface pour utiliser des axes.

Les lments individuels d'un diagramme


Titre, sous-titre et lgende
Les titre, sous-titre et lgende constituent les lments de base de chaque diagramme. Les diagrammes offrent leurs propres objets pour chacun de ces lments. L'objet Chart offre les proprits suivantes pour administrer ces lments :

HasMainTitle (Boolean) active le titre.

170 StarOffice 7 Manuel de programmation Basic

Title (Object) objet contenant des informations dtailles concernant le titre du diagramme (supporte le service com.sun.star.chart.ChartTitle ).

HasSubTitle(Boolean) active le sous-titre. Subtitle (Object) objet contenant des informations dtailles concernant le sous-titre du diagramme (supporte le service com.sun.star.chart.ChartTitle).

HasLegend (Boolean) active la lgende. Legend (Object) objet contenant des informations dtailles concernant la lgende du diagramme (supporte le service com.sun.star.chart.ChartLegendPosition).

de nombreux gards, les lments spcifis correspondent un lment de dessin. Ceci est d au fait que les services com.sun.star.chart.ChartTitle et com.sun.star.chart.ChartLegendPosition prennent en charge le service com.sun.star.drawing.Shape, qui constitue la base du programme technique des lments de dessin. De ce fait, les utilisateurs peuvent dterminer la position et la taille de l'lment l'aide des proprits Size et Position. Les autres proprits Fill et Line (services com.sun.star.drawing.FillProperties et com.sun.star.drawing.LineStyle ) ainsi que les proprits character (service com.sun.star.style.CharacterProperties ) sont fournies pour le formatage des lments. com.sun.star.chart.ChartTitle contient non seulement les proprits de format nommes, mais galement deux autres proprits :

TextRotation (Long) angle de rotation du texte en centimes de degr. String (String) texte afficher comme titre ou sous-titre.

La lgende du diagramme (service com.sun.star.chart.ChartLegend ) contient la proprit supplmentaire suivante :

Alignment (Enum) position laquelle est place la lgende (valeur par dfaut correspondant com.sun.star.chart.ChartLegendPosition).

Chapitre 9 Diagrammes 171

L'exemple suivant cre un diagramme et lui assigne le titre "Test", le sous-titre "Test 2" et une lgende. La lgende a une couleur d'arrire-plan grise, se trouve au bas du diagramme et a une taille de caractre de 7 points.
Dim Doc As Object Dim Charts As Object Dim Chart as Object Dim Rect As New com.sun.star.awt.Rectangle Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress Rect.X = 8000 Rect.Y = 1000 Rect.Width = 10000 Rect.Height = 7000 RangeAddress(0).Sheet = 0 RangeAddress(0).StartColumn = 0 RangeAddress(0).StartRow = 0 RangeAddress(0).EndColumn = 2 RangeAddress(0).EndRow = 12 Doc = StarDesktop.CurrentComponent Charts = Doc.Sheets(0).Charts Charts.addNewByName("MonDiagramme", Rect, RangeAddress(), True, True) Chart = Charts.getByName("MonDiagramme").EmbeddedObject Chart.HasMainTitle = True Chart.Title.String = "Test" Chart.HasSubTitle = True Chart.Subtitle.String = "Test 2" Chart.HasLegend = True Chart.Legend.Alignment = com.sun.star.chart.ChartLegendPosition.BOTTOM Chart.Legend.FillStyle = com.sun.star.drawing.FillStyle.SOLID Chart.Legend.FillColor = RGB(210, 210, 210) Chart.Legend.CharHeight = 7

Arrire-plan
Chaque diagramme prsente une zone d'arrire-plan. Chaque zone a un objet, accessible en utilisant les proprits suivantes de l'objet Diagram :

Area (Object) zone d'arrire-plan du diagramme (supporte le service com.sun.star.chart.ChartArea).

L'arrire-plan d'un diagramme recouvre sa zone complte, y compris la zone sous le titre, le soustitre et la lgende du diagramme. Le service com.sun.star.chart.ChartArea associ prend en charge les proprits Line et Fill et n'offre aucune autre proprit extensive.

172 StarOffice 7 Manuel de programmation Basic

Paroi et plancher du diagramme


Bien que l'arrire-plan du diagramme recouvre la zone complte du diagramme, la paroi arrire du diagramme se limite la zone se trouvant directement derrire la zone de donnes. Il existe gnralement deux parois dans les diagrammes 3D : l'une derrire la zone de donnes et l'autre servant de dmarcation gauche de l'axe Y. De plus, les diagrammes 3D ont gnralement un plancher.

Floor (Object) plancher du diagramme (uniquement pour les diagrammes 3D, supporte le service com.sun.star.chart.ChartArea ).

Wall (Object) parois du diagramme (uniquement pour les diagrammes 3D, supporte le service com.sun.star.chart.ChartArea).

Les objets spcifis supportent le service com.sun.star.chart.ChartArea qui offre son tour les proprits Fill et Line (services com.sun.star.drawing.FillProperties et com.sun.star.drawing.LineStyle, reportez-vous au chapitre 8). L'accs aux parois et au plancher du diagramme s'effectue par l'intermdiaire de l'objet Chart, qui fait son tour partie de l'objet Chart :
Chart.Area.FillBitmapName = "Sky"

L'exemple suivant montre comment une image (nomme Sky) dj contenue dans StarOffice peut servir d'arrire-plan un diagramme.
Dim Doc As Object Dim Charts As Object Dim Chart as Object Dim Rect As New com.sun.star.awt.Rectangle Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress Rect.X = 8000 Rect.Y = 1000 Rect.Width = 10000 Rect.Height = 7000 RangeAddress(0).Sheet = 0 RangeAddress(0).StartColumn = 0 RangeAddress(0).StartRow = 0 RangeAddress(0).EndColumn = 2 RangeAddress(0).EndRow = 12 Doc = StarDesktop.CurrentComponent Charts = Doc.Sheets(0).Charts Charts.addNewByName("MonDiagramme", Rect, RangeAddress(), True, True) Chart = Charts.getByName("MonDiagramme").EmbeddedObject Chart.Area.FillStyle = com.sun.star.drawing.FillStyle.BITMAP Chart.Area.FillBitmapName = "Sky"

Chapitre 9 Diagrammes 173

Chart.Area.FillBitmapMode = com.sun.star.drawing.BitmapMode.REPEAT

Axes
StarOffice reconnat cinq axes diffrents pouvant tre utiliss dans un diagramme. Dans le scnario le plus simple, il s'agit des axes X et Y. Lorsque vous utilisez des diagrammes 3D, un axe Z est parfois ajout. Pour les diagrammes dans lesquels les valeurs des diffrentes lignes dvient de faon significative l'une de l'autre, StarOffice fournit des X et Y supplmentaires pour des oprations de mises l'chelle secondaires.

Axes X, Y et Z primaires
Outre l'axe rel, pour chacun des axes X, Y et Z primaires, il peut y avoir galement un titre, une description, une grille et une grille auxiliaire. Il existe une option permettant d'afficher et de masquer tous ces lments. L'objet Diagram offre les proprits d'administration suivantes de ces fonctions (en prenant l'exemple d'un axe X ; les proprits des axes Y et Z sont structures de la mme manire) :

HasXAxis (Boolean) active l'axe X. XAxis (Object) objet contenant des informations dtailles concernant l'axe X (supporte le service com.sun.star.chart.ChartAxis).

HasXAxisDescription (Boolean) active la description de l'axe X. HasXAxisGrid (Boolean) active la grille principale de l'axe X. XMainGrid (Object) objet contenant des informations dtailles concernant la grille principale de l'axe X (supporte le service com.sun.star.chart.ChartGrid).

HasXAxisHelpGrid (Boolean) active la grille secondaire de l'axe X. XHelpGrid (Object) objet contenant des informations dtailles concernant la grille secondaire de l'axe X (supporte le service com.sun.star.chart.ChartGrid).

HasXAxisTitle (Boolean) active le titre de l'axe X. XAxisTitle (Object) objet contenant des informations dtailles concernant le titre de l'axe X (supporte le service com.sun.star.chart.ChartTitle).

Axes X et Y secondaires
Les proprits suivantes sont disponibles pour les axes X et Y secondaires (proprits prenant exemple sur l'axe X secondaire) :

HasSecondaryXAxis (Boolean) active l'axe X secondaire. SecondaryXAxis (Object) objet contenant des informations dtailles concernant l'axe X secondaire (supporte le service com.sun.star.chart.ChartAxis).

HasSecondaryXAxisDescription (Boolean) active la description de l'axe X.

174 StarOffice 7 Manuel de programmation Basic

Proprits des axes


Les objets Axis d'un diagramme StarOffice supportent le service com.sun.star.chart.ChartAxis. Outre les proprits des caractres (service com.sun.star.style.CharacterProperties, reportez-vous au chapitre 6) et des lignes (service com.sun.star.drawing.LineStyle, reportez-vous au chapitre 8), il offre les proprits suivantes :

Max (Double) - valeur maximum de l'axe. Min (Double) - valeur minimum de l'axe. Origin (Double) - point d'intersection des axes. StepMain (Double) - distance entre deux lignes principales de l'axe. StepHelp (Double) - distance entre deux lignes secondaires de l'axe. AutoMax (Boolean) - dtermine automatiquement la valeur maximum de l'axe. AutoMin (Boolean) - dtermine automatiquement la valeur minimum de l'axe. AutoOrigin (Boolean) - dtermine automatiquement le point d'intersection des axes. AutoStepMain (Boolean) - dtermine automatiquement la distance entre deux lignes principales de l'axe. AutoStepHelp (Boolean) - dtermine automatiquement la distance entre deux lignes secondaires de l'axe. Logarithmic (Boolean) - ajuste les axes de manire logarithmique (et non de manire linaire). DisplayLabels (Boolean) - active l'tiquette de texte des axes. TextRotation (Long) - angle de rotation de l'tiquette de texte en centimes de degr. Marks (Const) - constante qui spcifie si les lignes principales de l'axe doivent se trouver l'intrieur ou l'extrieur de la zone du diagramme (les valeurs par dfaut correspondent com.sun.star.chart.ChartAxisMarks)

HelpMarks (Const) - constante qui spcifie si les lignes secondaires de l'axe doivent se trouver l'intrieur et/ou l'extrieur de la zone du diagramme (les valeurs par dfaut correspondent com.sun.star.chart.ChartAxisMarks)

Overlap (Long) - pourcentage qui spcifie la marge de superposition des barres des diffrents jeux de donnes ( 100%, les barres s'affichent en superposition complte, -100%, une distance de la largeur d'une barre les spare). GapWidth (long) - pourcentage qui spcifie la distance possible entre les diffrents groupes de barres d'un diagramme ( 100%, la distance correspond la largeur d'une barre). ArrangeOrder (enum) - dtails de position de l'inscription ; outre le positionnement sur une ligne, il est galement possible de scinder l'tiquette sur deux lignes (valeur par dfaut correspondant com.sun.star.chart.ChartAxisArrangeOrderType)

Chapitre 9 Diagrammes 175

TextBreak (Boolean) - permet les retours la ligne. TextCanOverlap (Boolean) - permet les chevauchements de texte. NumberFormat (Long) - format numrique (voir chapitre 7, section Formats de nombre, de date et de texte )

Proprits de la grille de l'axe


L'objet de la grille de l'axe est bas sur le service com.sun.star.chart.ChartGrid , qui prend en charge son tour les proprits Line du service de support com.sun.star.drawing.LineStyle (reportez-vous au chapitre 8).

Proprits du titre de l'axe


Les objets de formatage du titre de l'axe sont bass sur le service com.sun.star.chart.ChartTitle, galement utilis pour les titres des diagrammes.

Exemple
L'exemple suivant cre un diagramme linaire. La couleur de la paroi arrire du diagramme est dfinie sur blanc. Les axes X et Y ont une grille auxiliaire grise pour l'orientation visuelle. La valeur minimale de l'axe Y est fixe 0 et la valeur maximale est fixe 100 de manire ce que la rsolution du diagramme soit conserve mme si les valeurs changent.
Dim Doc As Object Dim Charts As Object Dim Chart as Object Dim Rect As New com.sun.star.awt.Rectangle Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress Doc = StarDesktop.CurrentComponent Charts = Doc.Sheets(0).Charts Rect.X = 8000 Rect.Y = 1000 Rect.Width = 10000 Rect.Height = 7000 RangeAddress(0).Sheet = 0 RangeAddress(0).StartColumn = 0 RangeAddress(0).StartRow = 0 RangeAddress(0).EndColumn = 2 RangeAddress(0).EndRow = 12 Charts.addNewByName("MonDiagramme", Rect, RangeAddress(), True, True) Chart = Charts.getByName("MonDiagramme").embeddedObject Chart.Diagram = Chart.createInstance("com.sun.star.chart.LineDiagram") Chart.Diagram.Wall.FillColor = RGB(255, 255, 255)

176 StarOffice 7 Manuel de programmation Basic

Chart.Diagram.HasXAxisGrid = True Chart.Diagram.XMainGrid.LineColor = RGB(192, 192, 192) Chart.Diagram.HasYAxisGrid = True Chart.Diagram.YMainGrid.LineColor = RGB(192, 192, 192) Chart.Diagram.YAxis.Min = 0 Chart.Diagram.YAxis.Max = 100

Diagrammes 3D
La plupart des diagrammes de StarOffice peuvent galement s'afficher avec des graphiques 3D. Tous les types de diagrammes offrant cette option prennent en charge le service com.sun.star.chart.Dim3DDiagram. Ce service n'offre qu'une proprit :

Dim3D (Boolean) active l'affichage 3D.

Diagrammes empils
Les diagrammes empils sont des diagrammes disposs avec plusieurs valeurs individuelles empiles pour produire une valeur totale. Cette vue montre non seulement les valeurs individuelles, mais galement une prsentation de toutes les valeurs. Dans StarOffice, il est possible d'afficher plusieurs types de diagrammes sous forme empile. Tous ces diagrammes prennent en charge le service com.sun.star.chart.StackableDiagram, qui son tour fournit les proprits suivantes :

Stacked (Boolean) active l'affichage en mode empil. Percent (Boolean) affiche la rpartition en pourcentage plutt qu'en valeurs absolues.

Types de diagrammes
Diagrammes linaires
Les diagrammes linaires (service com.sun.star.chart.LineDiagram) prennent en charge un axe X, deux axes Y et un axe Z. Ils peuvent s'afficher sous forme de graphique 2D ou 3D (service com.sun.star.chart.Dim3Ddiagram). Les lignes peuvent tre empiles (com.sun.star.chart.StackableDiagram). Les diagrammes linaires offrent les proprits suivantes :

SymbolType (const) - symbole pour l'affichage des points de donnes (constante en fonction de com.sun.star.chart.ChartSymbolType).

SymbolSize (Long) - taille du symbole d'affichage des points de donnes en centimes de millimtre. SymbolBitmapURL (String) - nom de fichier des images d'affichage des points de donnes. Lines (Boolean) - relie les points de donnes par des lignes.
Chapitre 9 Diagrammes 177

SplineType (Long) - fonction spline de lissage des lignes (0 : pas de fonction spline, 1 : splines cubiques, 2 : splines B). SplineOrder (Long) - poids polynomial des splines (pour les splines B uniquement). SplineResolution (Long) - nombre de points de support pour le calcul des splines.

Diagrammes de surface
Les diagrammes de surface (service com.sun.star.chart.AreaDiagram ) prennent en charge un axe X, deux axes Y et un axe Z. Ils peuvent s'afficher sous forme de graphique 2D ou 3D (service com.sun.star.chart.Dim3Ddiagram). Les surfaces peuvent tre empiles (com.sun.star.chart.StackableDiagram).

Diagrammes barres
Les diagrammes barres (service com.sun.star.chart.BarDiagram) prennent en charge un axe X, deux axes Y et un axe Z. Ils peuvent s'afficher sous forme de graphique 2D ou 3D (service com.sun.star.chart.Dim3Ddiagram). Les barres peuvent tre empiles (com.sun.star.chart.StackableDiagram). Ils offrent les proprits suivantes :

Vertical (Boolean) affiche les barres verticalement au lieu d'horizontalement. Deep (Boolean) - en mode d'affichage 3D, positionne les barres les unes derrire les autres plutt que les unes ct des autres. StackedBarsConnected (Boolean) - relie les barres associes dans un diagramme empil au moyen de lignes (uniquement avec les diagrammes horizontaux). NumberOfLines (Long) - nombre de lignes afficher dans un diagramme empil sous forme de lignes plutt que sous forme de barres.

Diagrammes secteurs
Les diagrammes secteurs (service com.sun.star.chart.PieDiagram) ne contiennent pas d'axes et ne peuvent tre empils. Ils peuvent s'afficher sous forme de graphique 2D ou 3D (service com.sun.star.chart.Dim3Ddiagram).

178 StarOffice 7 Manuel de programmation Basic

CHAPITRE

10

10

Accs aux bases de donnes


StarOffice possde une interface de base de donnes intgre (indpendante de tout systme) nomme Star Database Connectivity (SDBC). L'objectif du dveloppement de cette interface tait d'offrir l'accs au plus grand nombre possible de sources de donnes diffrentes. Pour rendre cela possible, l'accs aux sources de donnes s'effectue par des pilotes. Les sources partir desquelles les pilotes rcuprent leurs donnes n'ont pas d'importance pour un utilisateur SDBC. Certains pilotes accdent aux bases de donnes de fichiers et y rcuprent directement les donnes. D'autres utilisent des interfaces standard telles que JDBC ou ODBC. Toutefois, il existe galement des pilotes spciaux qui utilisent le carnet d'adresses MAPI, les annuaires LDAP ou les feuilles de calcul StarOffice comme sources de donnes. Les pilotes tant bass sur des composants UNO, il est possible de dvelopper d'autres pilotes et, par consquent, d'ouvrir de nouvelles sources de donnes. Le Guide du dveloppeur de StarOffice contient de plus amples informations ce sujet.
En termes de concept, SDBC est comparable aux bibliothques ADO et DAO disponibles dans VBA. Il permet l'accs de haut niveau aux bases de donnes, quels que soient les serveurs de base de donnes sous-jacents.

L'interface de base de donnes de StarOffice s'est dveloppe lors du lancement de StarOffice 6.0. Bien que par le pass, l'accs aux bases de donnes se soit principalement effectu en utilisant un ensemble de mthodes de l'objet Application, l'interface de StarOffice 6.0 se subdivise en plusieurs objets. Un service DatabaseContext sert d'objet racine pour les fonctions de la base de donnes.

SQL : un langage de requte


Le langage SQL est fourni comme langage de requte aux utilisateurs de SDBC. Pour comparer les diffrences entre les diffrents langages SQL, les composants SDBC de StarOffice ont leur propre analyseur SQL. La fentre de requte permet de vrifier les commandes SQL saisies et de corriger les erreurs de syntaxe simples, comme celles qui sont associes aux caractres majuscules et minuscules. Si un pilote permet l'accs une source de donnes qui ne prend pas en charge SQL, il doit convertir indpendamment les commandes SQL transfres vers l'accs natif requis.

179

L'implmentation SQL partir de SDBC est oriente vers la norme SQL-ANSI. Les extensions spcifiques Microsoft, telles que la construction INNER JOIN ne sont pas supportes. Elles doivent tre remplaces par des commandes standard (INNER JOIN, par exemple devra tre remplace par une clause WHERE correspondante).

Types d'accs aux bases de donnes


L'interface de base de donnes de StarOffice est disponible avec les applications StarOffice Writer et StarOffice Calc, ainsi que dans les formulaires de base de donnes. Dans StarOffice Writer, les lettres standard peuvent tre cres avec l'assistance de sources de donnes SDBC et peuvent ensuite tre imprimes. Il existe galement une option permettant de dplacer les donnes de la fentre de la base de donnes dans des documents texte l'aide de la fonction glisser-dposer. Si l'utilisateur dplace une table de base de donnes dans une feuille de calcul, StarOffice cre une zone de table qui peut tre mise jour par un clic de souris si les donnes d'origine ont t modifies. l'inverse, il est possible de dplacer les donnes d'une feuille de calcul vers une table de base de donnes et d'effectuer l'importation d'une base de donnes. Enfin, StarOffice offre un mcanisme pour les formulaires bass sur des bases de donnes. Pour cela, l'utilisateur doit d'abord crer un formulaire standard StarOffice Writer ou StarOffice Calc, puis lier les champs vers une base de donnes. Toutes les options indiques ici sont bases sur l'interface utilisateur de StarOffice. Aucune connaissance en programmation n'est ncessaire pour utiliser les fonctions correspondantes. Cependant, ce chapitre fournit peu d'informations concernant les fonctions spcifies, mais s'intresse principalement l'interface de programmation partir de SDBC, qui permet l'automatisation des requtes aux bases de donnes et offre de ce fait une plus grande varit d'applications. Il est toutefois ncessaire de possder une connaissance de base du fonctionnement des bases de donnes et du langage de requte SQL pour bien comprendre les sections qui suivent.

Sources de donnes
Une base de donnes peut tre intgre StarOffice en crant ce que l'on nomme couramment une source de donnes. L'interface utilisateur offre une option correspondante pour crer des sources de donnes dans le menu Extras. Mais vous pouvez galement crer des sources de donnes et les utiliser dans StarOffice Basic. Un objet de contexte de base de donnes cr l'aide de la fonction createUnoService sert de point de dpart pour accder une source de donnes. Ceci est bas sur le service com.sun.star.sdb.DatabaseContext et sert d'objet racine pour toutes les oprations de la base de donnes. L'exemple suivant montre comment le contexte de la base de donnes peut tre cr, puis utilis pour dterminer les noms de toutes les sources de donnes disponibles. Il affiche les noms dans un message.

180 StarOffice 7 Manuel de programmation Basic

Dim DatabaseContext As Object Dim Names Dim I As Integer DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext") Names = DatabaseContext.getElementNames() For I = 0 To UBound(Names()) MsgBox Names(I) Next I

Les sources de donnes individuelles sont bases sur le service com.sun.star.sdb.DataSource et peuvent tre dtermines partir du contexte de la base de donnes en utilisant la mthode getByName :
Dim DatabaseContext As Object Dim DataSource As Object DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext") DataSource = DatabaseContext.getByName("Customers")

Cet exemple cre un objet DataSource pour une source de donnes nomme Customers. Les sources de donnes offrent un ensemble de proprits lesquelles, leur tour, fournissent des renseignements d'ordre gnral concernant l'origine des donnes et des informations concernant les mthodes d'accs. Ces proprits sont les suivantes :

Name (String) nom de la source de donnes. URL (String) URL de la source de donnes, sous la forme jdbc: subprotocol : subname ou sdbc: subprotocol : subname . Info (Array) array contenant des paires PropertyValue avec des paramtres de connexion (gnralement un nom d'utilisateur et un mot de passe). User (String) nom de l'utilisateur. Password (String) mot de passe de l'utilisateur (il n'est pas enregistr). IsPasswordRequired (Boolean) un mot de passe doit obligatoirement tre fourni par l'utilisateur. IsReadOnly (Boolean) permet l'accs en lecture seule la base de donnes. NumberFormatsSupplier (Object) objet contenant les formats numriques disponibles pour la base de donnes (supporte l'interface com.sun.star.util.XNumberFormatsSupplier, voir chapitre 7, section Formats de nombre, de date et de texte ).

TableFilter (Array) liste des noms de table afficher. TableTypeFilter (Array) liste des types de table afficher. Les valeurs disponibles sont TABLE, VIEW et SYSTEM TABLE. SuppressVersionColumns (Boolean) - masque les colonnes utilises pour la gestion des versions.

Chapitre 10 Accs aux bases de donnes 181

Les sources de donnes de StarOffice ne sont pas comparables une une avec les sources de donnes ODBC. Si une source de donnes ODBC ne recouvre que les informations concernant l'origine des donnes, une source de donnes de StarOffice inclut galement un ensemble d'informations relatives l'affichage des donnes dans les fentres de base de donnes de StarOffice.

Requtes
Il est possible d'assigner des requtes prdfinies une source de donnes. StarOffice note les commandes SQL des requtes afin qu'elles soient disponibles tout moment. Les requtes permettent de simplifier l'utilisation des bases de donnes car elles peuvent s'ouvrir d'un simple clic de souris et permettent en outre aux utilisateurs sans aucune connaissance SQL d'mettre des commandes SQL. Un objet prenant en charge le service com.sun.star.sdb.QueryDefinition est masqu derrire une requte. L'accs aux requtes s'effectue grce la mthode QueryDefinitions de la source de donnes. L'exemple suivant numre les noms des requtes la source de donnes pouvant tre tablis dans un message.
Dim DatabaseContext As Object Dim DataSource As Object Dim QueryDefinitions As Object Dim QueryDefinition As Object Dim I As Integer DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext") DataSource = DatabaseContext.getByName("Customers") QueryDefinitions = DataSource.getQueryDefinitions() For I = 0 To QueryDefinitions.Count() - 1 QueryDefinition = QueryDefinitions(I) MsgBox QueryDefinition.Name Next I

Outre la proprit Name utilise dans cet exemple, com.sun.star.sdb.QueryDefinition offre un ensemble complet d'autres proprits. Il s'agit des proprits :

Name (String) nom de la requte. Command (String) commande SQL (en rgle gnrale, une commande SELECT). UpdateTableName (String) pour les requtes bases sur plusieurs tables : nom de la table dans laquelle des modifications de valeur sont possibles. UpdateCatalogName (String) nom des catalogues de tables actualisables. UpdateSchemaName (String) nom des diagrammes de tables actualisables.

182 StarOffice 7 Manuel de programmation Basic

L'exemple qui suit montre comment un objet Query peut tre cr par programmation et assign une source de donnes.
Dim DatabaseContext As Object Dim DataSource As Object Dim QueryDefinitions As Object Dim QueryDefinition As Object Dim I As Integer DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext") DataSource = DatabaseContext.getByName("Customers") QueryDefinitions = DataSource.getQueryDefinitions() QueryDefinition = createUnoService("com.sun.star.sdb.QueryDefinition") QueryDefinition.Command = "SELECT * FROM Customer" QueryDefinitions.insertByName("NewQuery", QueryDefinition)

L'objet Query est d'abord cr en utilisant l'appel createUnoService, initialis, puis insr dans l'objet QueryDefinitions l'aide de insertByName.

Liaisons avec des formulaires de base de donnes


Pour simplifier l'utilisation des sources de donnes, StarOffice offre une option de liaison des sources de donnes aux formulaires de base de donnes. Ces liaisons sont disponibles par l'intermdiaire de la mthode getBookmarks(). Ceci retourne un conteneur nomm (com.sun.star.sdb.DefinitionContainer) contenant toutes les liaisons de la source de donnes. Les repres de texte sont accessibles par l'intermdiaire de Name ou d'Index. L'exemple dtermine l'URL du repre de texte MyBookmark.
Dim DatabaseContext As Object Dim DataSource As Object Dim Bookmarks As Object Dim URL As String Dim I As Integer DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext") DataSource = DatabaseContext.getByName("Customers") Bookmarks = DataSource.Bookmarks() URL = Bookmarks.getByName("MyBookmark") MsgBox URL

Chapitre 10 Accs aux bases de donnes 183

Accs aux bases de donnes


Une connexion la base de donnes est ncessaire pour y accder. Il s'agit d'une voie de transfert qui permet la communication directe avec la base de donnes. Contrairement aux sources de donnes prsentes dans la section prcdente, la connexion la base de donnes doit donc tre rtablie chaque redmarrage du programme. StarOffice offre diffrentes manires d'tablir des connexions la base de donnes. Voici une explication de la mthode base sur une source de donnes existante.
Dim DatabaseContext As Object Dim DataSource As Object Dim Connection As Object Dim InteractionHandler as Object DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext") DataSource = DatabaseContext.getByName("Customers") If Not DataSource.IsPasswordRequired Then Connection = DataSource.GetConnection("","") Else InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler") Connection = DataSource.ConnectWithCompletion(InteractionHandler) End If

Le code utilis dans cet exemple commence par vrifier si la base de donnes est protge par mot de passe. Dans le cas contraire, il cre la connexion la base de donnes requise l'aide de l'appel GetConnection. Les deux chanes vides de la ligne de commande correspondent au nom et au mot de passe de l'utilisateur. Si la base de donnes est protge par mot de passe, l'exemple cre un InteractionHandler et ouvre la connexion la base de donnes l'aide la mthode ConnectWithCompletion. L'InteractionHandler garantit que StarOffice demande les donnes de connexion requises l'utilisateur.

Itration de tables
L'accs une table s'effectue gnralement dans StarOffice par l'intermdiaire de l'objet ResultSet. Un ResultSet est un type de marqueur indiquant un ensemble de donnes courant au sein d'un volume de rsultats obtenus l'aide de la commande SELECT.

184 StarOffice 7 Manuel de programmation Basic

L'exemple montre l'utilisation d'un ResultSet pour interroger les valeurs partir d'une table de base de donnes.
Dim DatabaseContext As Object Dim DataSource As Object Dim Connection As Object Dim InteractionHandler as Object Dim Statement As Object Dim ResultSet As Object DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext") DataSource = DatabaseContext.getByName("Customers") If Not DataSource.IsPasswordRequired Then Connection = DataSource.GetConnection("","") Else InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler") Connection = DataSource.ConnectWithCompletion(InteractionHandler) End If Statement = Connection.createStatement() ResultSet = Statement.executeQuery("SELECT CustomerNumber FROM Customer") If Not IsNull(ResultSet) Then While ResultSet.next MsgBox ResultSet.getString(1) Wend End If

Lorsque la connexion la base de donnes a t tablie, le code utilis dans l'exemple utilise d'abord l'appel Connection.createObject pour crer un objet Statement. Cet objet Statement utilise ensuite l'appel executeQuery pour retourner le ResultSet rel. Le programme vrifie prsent si le ResultSet existe rellement et parcourt les enregistrements de donnes l'aide d'une boucle. Les valeurs requises (dans notre exemple, celles du champ CustomerNumber) retournent le ResultSet en utilisant la mthode getString, selon laquelle le paramtre 1 dtermine que l'appel se relie aux valeurs de la premire colonne.
L'objet ResultSet de SDBC est comparable l'objet Recordset de DAO et ADO, car il offre galement l'accs itratif une base de donnes.

L'accs la base de donnes s'effectue en ralit dans StarOffice 7 par l'intermdiaire d'un objet

ResultSet. Ceci reprsente le contenu d'une table ou le rsultat d'une commande SQL-SELECT. Dans le pass, l'objet ResultSet fournissait les mthodes rsidentes dans l'objet Application pour la navigation au sein des donnes (par exemple DataNextRecord).

Chapitre 10 Accs aux bases de donnes 185

Mthodes de rcupration des valeurs en fonction du type


Comme le montre l'exemple de la section prcdente, StarOffice offre une mthode getString d'accs au contenu de la table. La mthode fournit le rsultat sous la forme d'une chane. Les mthodes get suivantes sont disponibles :

getByte() prend en charge les types de donnes SQL pour les nombres, les caractres et les chanes. getShort() prend en charge les types de donnes SQL pour les nombres, les caractres et les chanes. getInt() prend en charge les types de donnes SQL pour les nombres, les caractres et les chanes. getLong() prend en charge les types de donnes SQL pour les nombres, les caractres et les chanes. getFloat() prend en charge les types de donnes SQL pour les nombres, les caractres et les chanes. getDouble() prend en charge les types de donnes SQL pour les nombres, les caractres et les chanes. getBoolean() prend en charge les types de donnes SQL pour les nombres, les caractres et les chanes. getString() prend en charge tous les types de donnes SQL. getBytes() prend en charge les types de donnes SQL pour les valeurs binaires. getDate() prend en charge les types de donnes SQL pour les nombres, les chanes, la date et l'heure. getTime() prend en charge les types de donnes SQL pour les nombres, les chanes, la date et l'heure. getTimestamp() prend en charge les types de donnes SQL pour les nombres, les chanes, la date et l'heure. getCharacterStream() prend en charge les types de donnes SQL pour les nombres, les chanes et les valeurs binaires. getUnicodeStream() prend en charge les types de donnes SQL pour les nombres, les chanes et les valeurs binaires. getBinaryStream() valeurs binaires. getObject() prend en charge tous les types de donnes SQL.

Dans tous les cas, le nombre de colonnes doit apparatre comme un paramtre dont les valeurs doivent tre interroges.

186 StarOffice 7 Manuel de programmation Basic

Les variantes ResultSet


L'accs aux bases de donnes est souvent une question de vitesse critique. C'est la raison pour laquelle StarOffice offre plusieurs moyens pour optimiser les ResultSets et ainsi contrler la vitesse d'accs. Plus un ResultSet offre de fonctions, plus son implmentation est gnralement complexe et plus lentes sont les fonctions. Un ResultSet simple, tel que celui prsent la section "Itration de tables", offre l'tendue de fonctions la plus rduite possible. Il ne permet l'application de l'itration que vers l'avant, et pour les valeurs interroger. Par consquent, d'autres options de navigation plus complexes, telles que la possibilit de modifier des valeurs, ne sont pas incluses. L'objet Statement utilis pour crer le ResultSet offre certaines proprits qui permettent d'influer sur les fonctions du ResultSet :

ResultSetConcurrency (const) spcifications selon lesquelles les donnes peuvent tre modifies ou non (spcifications correspondant com.sun.star.sdbc.ResultSetConcurrency).

ResultSetType (const) spcifications relatives au type de ResultSets (spcifications correspondant com.sun.star.sdbc.ResultSetType).

Les valeurs dfinies dans com.sun.star.sdbc.ResultSetConcurrency sont les suivantes :


UPDATABLE - ResultSet permet la modification des valeurs. READ_ONLY ResultSet ne permet pas les modifications.

Le groupe de constantes com.sun.star.sdbc.ResultSetConcurrency fournit les spcifications suivantes :


FORWARD_ONLY ResultSet permet uniquement la navigation vers l'avant. SCROLL_INSENSITIVE ResultSet permet tout type de navigation ; les changements des donnes d'origine ne sont toutefois pas nots. SCROLL_SENSITIVE ResultSet permet tout type de navigation ; les changements des donnes d'origine modifient le ResultSet.
Un ResultSet contenant des proprits READ_ONLY et SCROLL_INSENSITIVE correspond un jeu d'enregistrements du type Snapshot dans ADO et DAO. Lorsque vous utilisez les proprits du ResultSet UPDATEABLE et SCROLL_SENSITIVE , l'tendue de fonctions d'un ResultSet est comparable un Recordset de type Dynaset partir d'ADO et de DAO.

Les mthodes de navigation dans les ResultSets


Si un ResultSet est de type SCROLL_INSENSITIVE ou SCROLL_SENSITIVE, il prend en charge un ensemble de mthodes de navigation dans le stock de donnes. Les mthodes centrales sont les suivantes :

next() navigation vers l'enregistrement de donnes suivant.

Chapitre 10 Accs aux bases de donnes 187

previous() navigation vers l'enregistrement de donnes prcdent. first() navigation vers le premier enregistrement de donnes. last() navigation vers le dernier enregistrement de donnes. beforeFirst() navigation avant le premier enregistrement de donnes. afterLast() navigation aprs le dernier enregistrement de donnes.

Toutes les mthodes retournent un paramtre Boolean qui spcifie si la navigation a russi ou non. Pour dterminer la position courante du curseur, les mthodes de test suivantes sont fournies et toutes retournent une valeur Boolean :

isBeforeFirst() ResultSet est plac avant le premier enregistrement de donnes. isAfterLast() ResultSet est plac aprs le dernier enregistrement de donnes. isFirst() ResultSet est le premier enregistrement de donnes. isLast() ResultSet est le dernier enregistrement de donnes.

Modification des enregistrements de donnes


Si un ResultSet a t cr avec la valeur ResultSetConcurrency = UPDATEABLE, son contenu est modifiable. Ceci ne s'applique que pendant le temps o la commande SQL permet la rcriture des donnes dans la base de donnes (dpend du principe). Par exemple, ceci n'est pas possible pour les commandes SQL complexes avec des colonnes lies ou des valeurs cumules. L'objet ResultSet fournit des mthodes Update pour modifier les valeurs, qui sont structures de la mme manire que les mthodes get pour rcuprer des valeurs. La mthode updateString, par exemple, permet l'criture d'une chane. Aprs modification, les valeurs doivent tre transfres dans la base de donnes l'aide de la mthode updateRow(). L'appel doit intervenir avant la prochaine commande de navigation, sinon les valeurs sont perdues. Une erreur faite pendant les modifications peut tre annule l'aide de la mthode cancelRowUpdates(). Cet appel n'est possible que si les donnes n'ont pas t rcrites dans la base de donnes l'aide de updateRow().

188 StarOffice 7 Manuel de programmation Basic

CHAPITRE

11

11

Botes de dialogue
Vous pouvez ajouter des fentres de bote de dialogue et des formulaires personnaliss aux documents StarOffice. Ceux-ci peuvent, leur tour, tre lis des macros StarOffice Basic afin d'en tendre la plage d'utilisation de faon considrable. Les botes de dialogue peuvent, par exemple, afficher des informations d'une base de donnes ou guider les utilisateurs dans un processus tape par tape de cration d'un nouveau document sous la forme d'un AutoPilote.

Utilisation des botes de dialogue


Les botes de dialogue de StarOffice Basic sont constitues d'une fentre de bote de dialogue contenant des champs de texte, des zones de liste, des boutons radio, et d'autres lments de contrle.

Cration de botes de dialogue


Vous pouvez crer et structurer des botes de dialogue l'aide de l'diteur de bote de dialogue de StarOffice que vous pouvez utiliser de la mme manire qu'un dessin StarOffice :

Fondamentalement, vous faites glisser les lments de contrle que vous dsirez depuis la palette de dessin (sur la droite) dans la zone de la bote de dialogue dans laquelle vous pouvez en dfinir la position et la taille. L'exemple illustre une bote de dialogue contenant une tiquette et une zone de liste.
189

Vous pouvez ouvrir une bote de dialogue l'aide du code suivant :


Dim Dlg As Object DialogLibraries.LoadLibrary("Standard") Dlg = CreateUnoDialog(DialogLibraries.Standard.DlgDef) Dlg.Execute() Dlg.dispose()

CreateUnoDialog cre un objet nomm Dlg qui fait rfrence la bote de dialogue associe. Avant de pouvoir crer la bote de dialogue, vous devez vrifier que la bibliothque qu'elle utilise (dans cet exemple, la bibliothque Standard) est charge. Dans le cas contraire, la mthode LoadLibrary accomplit cette tche. Une fois que l'objet de la bote de dialogue Dlg a t initialis, vous pouvez utiliser la mthode Execute pour afficher la bote de dialogue. Les botes de dialogue telles que celle-ci sont dcrites comme modales car elles ne permettent aucune autre action du programme avant leur fermeture. Lorsque cette bote de dialogue est ouverte, le programme reste dans l'appel Execute. La mthode dispose la fin du code approuve les ressources utilises par la bote de dialogue lorsque le programme se termine.

Fermeture des botes de dialogue


Fermeture par OK ou Annuler
Si une bote de dialogue contient un bouton OK ou Annuler, elle se ferme automatiquement lorsque vous cliquez sur l'un d'entre eux. Vous trouverez davantage d'informations sur l'utilisation de ces boutons la section Dtail des lments de contrle des botes de dialogue, plus loin dans ce chapitre.

190 StarOffice 7 Manuel de programmation Basic

Si vous fermez une bote de dialogue en cliquant sur le bouton OK , la mthode Execute-retourne une valeur 1, sinon, une valeur 0 est retourne.
Dim Dlg As Object DialogLibraries.LoadLibrary("Standard") Dlg = CreateUnoDialog(DialogLibraries.Standard.MyDialog) Select Case Dlg.Execute() Case 1 MsgBox "clic sur OK" Case 0 MsgBox "clic sur Annuler" End Select

Fermeture par le bouton de fermeture de la barre de titre


Si vous le souhaitez, vous pouvez fermer une bote de dialogue en cliquant sur le bouton de fermeture de la barre de titre de la fentre de la bote de dialogue. Dans ce cas, la mthode

Execute de la bote de dialogue retourne la valeur 0, comme si vous aviez appuy sur le bouton
Annuler.

Fermeture avec un appel de programme explicite


Vous pouvez galement fermer une fentre de bote de dialogue ouverte avec la mthode endExecute :
Dlg.endExecute()

Accs des lments de contrle individuels


Une bote de dialogue peut contenir un nombre illimit d'lments de contrle. Vous pouvez accder ces lments par l'intermdiaire de la mthode getControl qui retourne le nom de l'lment de contrle.
Dim Ctl As Object Ctl = Dlg.getControl("MyButton") Ctl.Label = "New Label"

Ce code dtermine l'objet de l'lment de contrle MyButton, puis initialise la variable d'objet Ctl avec une rfrence l'lment. Enfin, le code dfinit la proprit Label de l'lment de contrle sur la valeur New Label. Veuillez noter que StarOffice Basic fait la diffrence entre les majuscules et les minuscules pour les noms des lments de contrle.

Chapitre 11 Botes de dialogue 191

Utilisation du modle de bote de dialogue et d'lment de contrle


La sparation entre les lments visibles du programme (Vue ) et les donnes ou les documents sous-jacents (Modle ) se produit de nombreux endroits dans l'API de StarOffice. Outre les mthodes et les proprits des lments de contrle, les objets des botes de dialogue et des lments de contrle ont un objet Model subordonn. Cet objet vous permet d'accder directement au contenu d'une bote de dialogue ou d'un lment de contrle. Dans les botes de dialogue, la distinction entre les donnes et la reprsentation n'est pas toujours aussi claire que dans d'autres zones de l'API de StarOffice. Les lments de l'API sont disponibles par l'intermdiaire de la vue et du modle. La proprit Model offre l'accs par programmation au modle des objets de bote de dialogue et d'lment de contrle.
Dim cmdNext As Object cmdNext = Dlg.getControl("cmdNext") cmdNext.Model.Enabled = False

Cet exemple dsactive le bouton cmdNtext de la bote de dialogue Dlg l'aide de l'objet du modle partir de cmdNtext.

Proprits
Nom et titre
Chaque lment de contrle a son nom propre et peut tre interrog l'aide de la proprit de modle suivante :

Model.Name (String) nom de l'lment de contrle

Vous pouvez spcifier le titre apparaissant dans la barre de titre d'une bote de dialogue l'aide de la proprit de modle suivante :

Model.Title (String) titre de la bote de dialogue (s'applique uniquement aux botes de dialogue).

Position et taille
Vous pouvez interroger la taille et la position d'un lment de contrle l'aide des proprits suivantes de l'objet model :

Model.Height (long) hauteur de l'lment de contrle (en units ma) Model.Width (long) largeur de l'lment de contrle (en units ma) Model.PositionX (long) position X de l'lment de contrle, mesure partir du bord intrieur gauche de la bote de dialogue (en units ma)

192 StarOffice 7 Manuel de programmation Basic

Model.PositionY (long) position Y de l'lment de contrle, mesure partir du bord intrieur suprieur de la bote de dialogue (en units ma)

Afin de garantir l'indpendance de l'apparence des botes de dialogue l'gard des plates-formes, StarOffice utilise l'unit interne Map AppFont (ma) pour spcifier la position et la taille au sein des botes de dialogue. Une unit ma se dfinit comme le huitime de la hauteur moyenne d'un caractre de la police systme dfinie dans le systme d'exploitation et comme un quart de sa largeur. En utilisant les units ma, StarOffice garantit qu'une bote de dialogue aura la mme apparence quels que soient le systme et les paramtres systme. Si vous souhaitez modifier la taille ou la position des lments de contrle pour l'excution, dterminez la taille totale de la bote de dialogue et rglez les valeurs des lments de contrle sur les rapports des parties correspondants.
Map AppFont (ma) remplace l'unit Twips pour obtenir une meilleure indpendance vis--vis des platesformes.

Focus et squence de tabulation


Vous pouvez naviguer dans les lments de contrle de n'importe quelle bote de dialogue en appuyant sur la touche Tab. Les proprits suivantes sont disponibles dans ce contexte dans le modle des lments de contrle :

Model.Enabled (Boolean) active l'lment de contrle Model.Tabstop (Boolean) permet d'atteindre l'lment de contrle l'aide de la touche Tab Model.TabIndex (Long) position de l'lment de contrle dans l'ordre d'activation

Enfin, l'lment de contrle fournit une mthode getFocus garantissant que l'lment de contrle sous-jacent reoit le focus :

getFocus l'lment de contrle reoit le focus (uniquement pour les botes de dialogue)

Botes de dialogue plusieurs pages


Une bote de dialogue de StarOffice peut avoir plusieurs pages d'onglets. La proprit Step d'une bote de dialogue dfinit sa page d'onglet courante tandis que la proprit Step d'un lment de contrle spcifie la page d'onglet dans laquelle il doit s'afficher. La valeur Step de 0 est un cas spcial. Si vous dfinissez cette valeur zro dans une bote de dialogue, tous les lments de contrle sont visibles, quelle que soit leur valeur Step. De mme, si vous dfinissez cette valeur sur zro pour un lment de contrle, celui-ci s'affiche sur toutes les pages d'onglets d'une bote de dialogue.

Chapitre 11 Botes de dialogue 193

Dans l'exemple ci-dessus, vous pouvez galement attribuer la valeur Step de 0 la ligne de sparation ainsi que les boutons Annuler, Prcdent, Suivant et Termin pour afficher ces lments sur toutes les pages. Vous pouvez galement attribuer les lments une page d'onglet individuelle (par exemple la page 1). Le code suivant montre comment la valeur de Step des gestionnaires d'vnements des boutons Suivant et Prcdent peut tre augmente ou rduite 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

194 StarOffice 7 Manuel de programmation Basic

Une variable globale Dlg faisant rfrence une bote de dialogue ouverte doit tre ajoute pour que cet exemple soit possible. La bote de dialogue change ensuite d'apparence de la faon suivante : Page 1 :

Page 2 :

vnements
Les botes de dialogue et formulaires de StarOffice sont bass sur un modle de programmation orient objet dans lequel vous pouvez attribuer des gestionnaires d'vnements aux lments de contrle. Un gestionnaire d'vnements excute une procdure prdfinie lorsqu'une action particulire se produit, mme lorsque cette action est un autre vnement. Vous pouvez galement diter des documents ou des bases de donnes ouvertes avec le traitement des vnements, et accder d'autres lments de contrle. Les lments de contrle de StarOffice reconnaissent diffrents types d'vnements pouvant tre dclenchs dans diffrentes situations. Ces types d'vnements peuvent tre rpartis en quatre groupes :

Contrle par la souris : vnements correspondant des actions de la souris (par exemple, des mouvements simples de la souris ou un clic sur un emplacement particulier l'cran) Contrle par le clavier : vnements dclenchs par des squences de touches

Chapitre 11 Botes de dialogue 195

Modification du focus : vnements excuts par StarOffice lorsque des lments de contrle sont activs ou dsactivs vnements spcifiques de l'lment de contrle : vnements qui ne se produisent qu'en relation certains lments de contrle

Lorsque vous utilisez des vnements, vrifiez que vous crez la bote de dialogue associe dans l'environnement de dveloppement de StarOffice et qu'elle contient les lments de contrle ou documents ncessaires (si les vnements s'appliquent un formulaire).

La figure ci-dessus illustre l'environnement de dveloppement de StarOffice avec une bote de dialogue contenant deux zones de liste. Vous pouvez dplacer les donnes d'une liste l'autre en utilisant les boutons entre les deux zones de liste. Si vous voulez afficher la prsentation l'cran, vous devez crer les procdures StarOffice Basic associes afin qu'elles puissent tre appeles par les gestionnaires d'vnements. Bien que vous puissiez utiliser ces procdures dans n'importe quel module, il est prfrable d'en limiter l'utilisation deux modules. Pour simplifier la lecture de votre code, il est recommand d'attribuer des noms significatifs ces procdures. Le passage direct une procdure gnrale du programme depuis une macro peut produire un code peu clair. la place, pour simplifier la gestion et le dpannage du code, crez plutt une autre procdure servant de point d'entre pour le traitement des vnements, mme si elle n'excute qu'un seul appel la procdure cible. Le code de l'exemple suivant dplace une entre de la zone de liste de gauche vers celle de droite dans une bote de dialogue.

196 StarOffice 7 Manuel de programmation Basic

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.SelectedItemPos, 1) Else Beep End If End Sub

Si cette procdure a t cre dans StarOffice Basic, vous pouvez l'assigner un vnement requis en utilisant la fentre de proprit de l'diteur de bote de dialogue.

La bote de dialogue d'assignation rpertorie toutes les procdures de StarOffice Basic. Pour assigner une procdure un vnement, slectionnez la procdure et cliquez sur Assigner.

Paramtres
L'occurrence d'un vnement particulier ne suffit pas toujours pour obtenir une rponse approprie. D'autres informations peuvent s'avrer ncessaires. Par exemple, pour traiter un clic de souris, vous aurez peut-tre besoin de la position l'cran lors de l'appui sur le bouton. Dans StarOffice Basic, vous pouvez utiliser des paramtres d'objet pour fournir une procdure davantage d'informations concernant un vnement, par exemple :
Sub ProcessEvent(Event As Object) End Sub

La prcision avec laquelle l'objet Event est structur et ses proprits dpendent du type d'vnement que l'appel la procdure dclenche. Les sections suivantes dcrivent en dtail les types d'vnements. Quel que soit le type d'vnement, tous les objets donnent accs l'lment de contrle correspondant et son modle. L'lment de contrle peut tre atteint en utilisant

Chapitre 11 Botes de dialogue 197

Event.Source

et son modle en utilisant


Event.Source.Model

Vous pouvez utiliser ces proprits pour dclencher un vnement au sein d'un gestionnaire d'vnements.

vnements de la souris
StarOffice Basic reconnat les vnements de souris suivants :

Mouse moved l'utilisateur dplace la souris Mouse moved while key pressed l'utilisateur dplace la souris tout en maintenant une touche enfonce Mouse button pressed l'utilisateur appuie sur un bouton de la souris Mouse button released l'utilisateur relche un bouton de la souris Mouse outside l'utilisateur dplace la souris en dehors de la fentre active

La structure des objets Event associs est dfinie dans la structure com.sun.star.awt.MouseEvent qui fournit les informations suivantes :

Buttons (short) bouton enfonc (une ou plusieurs constantes en fonction de com.sun.star.awt.MouseButton).

X (long) coordonne X de la souris, mesure en pixels partir de l'angle suprieur gauche de l'lment de contrle Y (long) coordonne Y de la souris, mesure en pixels partir de l'angle suprieur gauche de l'lment de contrle ClickCount (long) nombre de clics associs l'vnement de la souris (si StarOffice peut rpondre assez vite, ClickCount est galement 1 pour un double-clic, car un seul vnement est dclench).

Les constantes dfinies dans com.sun.star.awt.MouseButton pour les boutons de la souris sont :

LEFT bouton gauche de la souris RIGHT bouton droit de la souris MIDDLE bouton du milieu de la souris

198 StarOffice 7 Manuel de programmation Basic

L'exemple suivant sort 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 = "Touches : " If Event.Buttons AND com.sun.star.awt.MouseButton.LEFT Then Msg = Msg & "GAUCHE " End If If Event.Buttons AND com.sun.star.awt.MouseButton.RIGHT Then Msg = Msg & "DROIT " End If If Event.Buttons AND com.sun.star.awt.MouseButton.MIDDLE Then Msg = Msg & "MILIEU " End If Msg = Msg & Chr(13) & "Position : " Msg = Msg & Event.X & "/" & Event.Y MsgBox Msg End Sub

Les vnements VBA Click et Doubleclick ne sont pas disponibles dans StarOffice Basic. la place, utilisez l'vnement StarOffice Basic MouseUp pour l'vnement click et imitez l'vnement Doubleclick en changeant la logique de l'application.

vnements du clavier
Les vnements suivants du clavier sont disponibles dans StarOffice Basic :

Key pressed l'utilisateur enfonce une touche Key released l'utilisateur relche une touche

Les deux vnements sont associs des actions de touches logiques et non des actions physiques. Si l'utilisateur appuie sur plusieurs touches pour sortir un seul caractre (par exemple, pour ajouter un accent un caractre), StarOffice Basic ne cre qu'un vnement. Une action sur une seule touche ou une touche de modification, telle que la touche Maj ou Alt, ne cre pas un vnement indpendant. Les informations concernant une touche enfonce sont indiques par l'objet Event que StarOffice Basic fournit la procdure pour le traitement des vnements. Il contient les proprits suivantes :

KeyCode (short) code de la touche enfonce (les valeurs par dfaut correspondent com.sun.star.awt.Key)

KeyChar (String) caractre entr (prenant en considration les touches de modification)

Chapitre 11 Botes de dialogue 199

L'exemple suivant utilise la proprit KeyCode pour tablir si la touche Entre, la touche Tab ou l'une des autres touches de contrle a t enfonce. Si l'une de ces touches a t enfonce, son nom est retourn ; sinon le caractre saisi est retourn :
Sub KeyPressed(Event As Object) Dim Msg As String Select Case Event.KeyCode Case com.sun.star.awt.Key.RETURN Msg = "Touche Entre enfonce" Case com.sun.star.awt.Key.TAB Msg = "Touche Tabulation enfonce" Case com.sun.star.awt.Key.DELETE Msg = "Touche Suppr enfonce" Case com.sun.star.awt.Key.ESCAPE Msg = "Touche chap enfonce" Case com.sun.star.awt.Key.DOWN Msg = "Touche Bas enfonce" Case com.sun.star.awt.Key.UP Msg = "Touche Haut enfonce" Case com.sun.star.awt.Key.LEFT Msg = "Touche Gauche enfonce" Case com.sun.star.awt.Key.RIGHT Msg = "Touche Droite enfonce" Case Else Msg = "Caractre " & Event.KeyChar & " entered" End Select MsgBox Msg End Sub

Des informations concernant d'autres constantes du clavier se trouvent dans la rfrence de l'API sous le groupe de constantes com.sun.star.awt.Key.

vnements du focus
Les vnements du focus indiquent si un lment de contrle reoit ou perd le focus. Par exemple, vous pouvez utiliser ces vnements pour dterminer si un utilisateur a termin le traitement d'un lment de contrle de telle sorte que vous puissiez mettre jour d'autres lments d'une bote de dialogue. Les vnements de focus suivants sont disponibles :

When receiving focus l'lment reoit le focus When losing focus l'lment perd le focus

Les objets Event des vnements de focus sont structurs de la faon suivante :

FocusFlags (short) raison du changement de focus (la valeur par dfaut correspond com.sun.star.awt.FocusChangeReason).

NextFocus (Object) objet recevant le focus (seulement pour l'vnement When losing focus )

Temporary (Boolean) le focus est temporairement perdu

200 StarOffice 7 Manuel de programmation Basic

vnements spcifiques des lments de contrle


Outre les vnements ci-dessus qui sont supports par tous les lments de contrle, il existe galement certains vnements spcifiques qui ne sont dfinis que pour certains lments de contrle. Les plus importants de ces vnements sont :

When Item Changed la valeur d'un lment de contrle change Item Status Changed le statut d'un lment de contrle change Text modified le texte d'un lment de contrle change When initiating une action pouvant tre excute lorsque l'lment de contrle est dclench (par exemple, lorsqu'un bouton est enfonc)

Lorsque vous utilisez des vnements, veuillez notez que certains vnements, tels que When initiating, peuvent tre dclenchs chaque fois que vous cliquez avec la souris sur certains lments de contrle (par exemple, sur des boutons radio). Aucune action n'est excute pour vrifier si le statut de l'lment de contrle a rellement t modifi. Pour viter ce type d'"vnement aveugle", enregistrez l'ancienne valeur de l'lment de contrle dans une variable globale et vrifiez si la valeur a chang lorsqu'un vnement est en cours d'excution. Les proprits de l'vnement Item Status Changed sont :

Selected (long) entre actuellement slectionne Highlighted (long) entre actuellement mise en vidence ItemId (long) ID de l'entre

Dtail des lments de contrle des botes de dialogue


StarOffice Basic reconnat un ensemble d'lments de contrle qui peuvent tre rpartis dans les groupes suivants : Champs de saisie:

Champs de texte Champs de date Champs d'heure Champs numriques Champs de devise Champs adoptant n'importe quel format

Boutons :

Boutons standard Cases cocher Boutons radio

Chapitre 11 Botes de dialogue 201

Listes de slection:

Zones de liste Zones combines

Autres lments de contrle :


Barres de dfilement (horizontales et verticales) Champs de groupes Barres de progression Lignes de sparation (horizontales et verticales) Images Champs de slection de fichier

Les lments de contrle les plus importants sont prsents ci-dessous.

Boutons
Un bouton excute une action lorsque vous cliquez dessus. Le scnario le plus simple est celui dans lequel le bouton dclenche un vnement When Initiating lorsqu'un utilisateur clique dessus. Vous pouvez galement lier une autre action au bouton pour qu'une bote de dialogue s'ouvre en utilisant la proprit PushButtonType. Lorsque vous cliquez sur un bouton pour lequel cette proprit est dfinie sur la valeur 0, la bote de dialogue n'est pas modifie. Lorsque vous cliquez sur un bouton pour lequel cette proprit est dfinie sur la valeur 1, la bote de dialogue est ferme, et la mthode Execute de la bote de dialogue retourne la valeur 1 (la squence de la bote de dialogue s'est termine correctement). Si la proprit PushButtonType a la valeur 2, la bote de dialogue est ferme et la mthode Execute de la bote de dialogue retourne la valeur 0 (bote de dialogue ferme). Vous trouverez ci-aprs toutes les proprits disponibles par l'intermdiaire du modle de bouton :

Model.BackgroundColor (long) couleur d'arrire-plan Model.DefaultButton (Boolean) le bouton est utilis comme valeur par dfaut et rpond la touche Entre en l'absence de focus. Model.FontDescriptor (struct) structure spcifiant les dtails de la police utilise (correspondant la structure com.sun.star.awt.FontDescriptor)

Model.Label (String) tiquette affiche sur le bouton Model.Printable (Boolean) l'lment de contrle peut tre imprim Model.TextColor (Long) couleur de texte de l'lment de contrle Model.HelpText (String) texte d'aide qui s'affiche lorsque vous dplacez le curseur de la souris au-dessus de l'lment de contrle Model.HelpURL (String) URL de l'aide en ligne pour l'lment de contrle correspondant PushButtonType (short) action lie au bouton (0 : pas d'action, 1 : OK, 2 : Annuler)

202 StarOffice 7 Manuel de programmation Basic

Boutons d'option
Ces boutons sont gnralement utiliss par groupes et vous permettent de slectionner parmi une ou plusieurs options. Lorsque vous slectionnez une option, toutes les autres options du groupe sont dsactives. Pour que ceci soit garanti tout moment, seul un bouton d'option est dfini. Un lment de contrle d'un bouton d'option fournit deux proprits :

State (Boolean) active le bouton Label (String) tiquette affiche sur le bouton

Vous pouvez galement utiliser les proprits suivantes partir du modle des boutons d'option :

Model.FontDescriptor (struct) structure avec les dtails de la police utilise (en fonction de com.sun.star.awt.FontDescriptor) Model.Label (String) - tiquette affiche sur l'lment de contrle Model.Printable (Boolean) lment de contrle pouvant tre imprim Model.State (Short) si cette proprit est gale 1, l'option est active, sinon elle est dsactive Model.TextColor (Long) couleur de texte de l'lment de contrle Model.HelpText (String) texte d'aide qui s'affiche lorsque le curseur de la souris se trouve au-dessus de l'lment de contrle Model.HelpURL (String) URL de l'aide en ligne pour l'lment de contrle correspondant

Pour combiner plusieurs boutons d'option dans un groupe, vous devez les positionner les uns la suite des autres dans la squence d'activation sans aucun espace (proprit Model.TabIndex dcrite en tant que Order dans l'diteur de bote de dialogue). Si la squence d'activation est interrompue par un autre lment de contrle, StarOffice dmarre automatiquement avec un nouvel lment de contrle pouvant tre activ quel que soit le premier groupe d'lments de contrle.
Contrairement VBA, vous ne pouvez pas insrer de boutons d'option dans un groupe d'lments de contrle dans StarOffice Basic. Le regroupement d'lments de contrle dans StarOffice Basic n'est utilis que pour garantir une division visuelle en dessinant un cadre autour des lments de contrle.

Cases cocher
Les cases cocher servent saisir une valeur Oui ou Non et, suivant le mode, elles peuvent adopter deux ou trois tats. En plus des tats Oui et Non, une case cocher peut avoir un tat intermdiaire si le statut correspondant Oui ou Non a plusieurs significations ou n'est pas clair. Les cases cocher offrent les proprits suivantes :

State (Short) tat de la case cocher (0 : non, 1 : oui, 2 : tat intermdiaire) Label (String) tiquette pour l'lment de contrle

Chapitre 11 Botes de dialogue 203

enableTriState (Boolean) outre les tats actif et inactif, vous pouvez galement utiliser l'tat intermdiaire

L'objet Model d'une case cocher fournit les proprits suivantes :

Model.FontDescriptor (struct) structure avec les dtails de la police utilise (correspond la structure com.sun.star.awt.FontDescriptor)

Model.Label (String) tiquette pour l'lment de contrle Model.Printable (Boolean) l'lment de contrle peut tre imprim Model.State (Short) tat de la case cocher (0 : non, 1 : oui, 2 : tat intermdiaire) Model.Tabstop (Boolean) la touche Tab permet d'accder l'lment de contrle Model.TextColor (Long) couleur de texte de l'lment de contrle Model.HelpText (String) texte d'aide qui s'affiche lorsque vous laissez le curseur de la souris au-dessus de l'lment de contrle Model.HelpURL (String) URL de l'aide en ligne pour l'lment de contrle correspondant

Champs de texte
Les champs de texte permettent aux utilisateurs de saisir des nombres 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 non par les utilisateurs. Les champs de texte peuvent galement servir de champs spciaux numriques ou de devise, ainsi que de champs d'cran pour certaines tches spciales. Ces lments de contrle tant bass sur le service Uno UnoControlEdit, leur traitement contrl par programmation est semblable. Les champs de texte offrent les proprits suivantes :

Text (String) texte actif SelectedText (String) texte actuellement mis en vidence Selection (Struct) mise en vidence en lecture seule des dtails (structure correspondant com.sun.star.awt.Selection, avec les proprits Min et Max spcifiant le dbut et la fin de la mise en vidence active)

MaxTextLen (short) nombre maximum de caractres autoriss dans le champ Editable (Boolean) True active l'option de saisie de texte, False bloque l'option de saisie (la proprit ne peut pas tre appele directement, mais seulement par l'intermdiaire de IsEditable)

IsEditable (Boolean) le contenu de l'lment de contrle peut tre chang, en lecture seule.

De plus, les proprits suivantes sont fournies par l'intermdiaire de l'objet Model associ :

204 StarOffice 7 Manuel de programmation Basic

Model.Align (short) orientation du texte (0 : align gauche, 1 : centr, 2 : align droite) Model.BackgroundColor (long) couleur d'arrire-plan pour l'lment de contrle Model.Border (short) type de bordure (0 : pas de bordure, 1 : bordure 3D, 2 : bordure simple) Model.EchoChar (String) caractre cho pour les champs de mot de passe Model.FontDescriptor (struct) structure avec les dtails de la police utilise (correspond la structure com.sun.star.awt.FontDescriptor )

Model.HardLineBreaks (Boolean) insertion automatique de retours la ligne obligatoires dans le texte de l'lment de contrle Model.HScroll (Boolean) Model.MaxTextLen (Short) longueur maximale du texte, o 0 correspond aucune limite de longueur Model.MultiLine (Boolean) l'entre peut s'tendre sur plusieurs lignes Model.Printable (Boolean) l'lment de contrle peut tre imprim Model.ReadOnly (Boolean) le contenu de l'lment de contrle est en lecture seule Model.Tabstop (Boolean) la touche Tab permet d'accder l'lment de contrle Model.Text (String) texte de l'lment de contrle Model.TextColor (Long) couleur de texte de l'lment de contrle Model.VScroll (Boolean) le texte comporte une barre de dfilement verticale Model.HelpText (String) texte d'aide qui s'affiche lorsque le curseur de la souris se trouve au-dessus de l'lment de contrle Model.HelpURL (String) URL de l'aide en ligne pour l'lment de contrle correspondant

Zones de liste
Les zones de liste (service com.sun.star.awt.UnoControlListBox ) prennent en charge les proprits suivantes :

ItemCount (Short) nombre d'lments, en lecture seule SelectedItem (String) texte de l'entre mise en vidence, en lecture seule SelectedItems (Array Of Strings) champ de donnes avec les entres mises en vidence, en lecture seule SelectedItemPos (Short) numro de l'entre actuellement mise en vidence, en lecture seule

Chapitre 11 Botes de dialogue 205

SelectedItemsPos (Array of Short) champ de donnes avec le nombre d'entres mises en vidence (pour les listes supportant la slection multiple), en lecture seule MultipleMode (Boolean) True active l'option de slection de plusieurs entres, False bloque les slections multiples (la proprit ne peut pas tre appele directement, mais seulement par l'intermdiaire de IsMultipleMode) IsMultipleMode (Boolean) permet la slection multiple dans les listes, en lecture seule

Les zones de liste offrent les mthodes suivantes :


addItem (Item, Pos) saisit la chane spcifie dans Item dans la liste la position Pos addItems (ItemArray, Pos) saisit les entres du champ de donnes ItemArray de la chane la position Pos indique dans la liste removeItems (Pos, Count) supprime les entres Count qui se trouvent la position Pos selectItem (Item, SelectMode) active ou dsactive la mise en vidence de l'lment spcifi dans la chane Item en fonction de la variable boolenne SelectMode makeVisible (Pos) fait dfiler le champ de la liste pour rendre visible l'entre spcifie avec Pos

L'objet Model des zones de liste fournit les proprits suivantes :


Model.BackgroundColor (long) couleur d'arrire-plan de l'lment de contrle Model.Border (short) type de bordure (0 : pas de bordure, 1 : bordure 3D, 2 : bordure simple) Model.FontDescriptor (struct) structure avec les dtails de la police utilise (correspond la structure com.sun.star.awt.FontDescriptor ) Model.LineCount (Short) nombre de lignes dans l'lment de contrle Model.MultiSelection (Boolean) permet la slection multiple des entres Model.SelectedItems (Array of Strings) liste des entres mises en vidence Model.StringItemList (Array of Strings) liste des entres Model.Printable (Boolean) l'lment de contrle peut tre imprim Model.ReadOnly (Boolean) le contenu de l'lment de contrle est en lecture seule Model.Tabstop (Boolean) la touche Tab permet d'accder l'lment de contrle Model.TextColor (Long) couleur de texte de l'lment de contrle Model.HelpText (String) texte d'aide s'affichant automatiquement lorsque le curseur de la souris se trouve au-dessus de l'lment de contrle Model.HelpURL (String) URL de l'aide en ligne pour l'lment de contrle correspondant
L'option VBA permettant d'mettre des entres de liste avec une valeur numrique supplmentaire (

ItemData) n'existe pas dans StarOffice Basic. Si vous souhaitez administrer une valeur numrique (par exemple une ID de base de donnes) en plus du texte en langage naturel, vous devez crer un champ de donnes auxiliaire qui effectue l'administration paralllement la zone de liste.

206 StarOffice 7 Manuel de programmation Basic

CHAPITRE

12

12

Formulaires
de nombreux gards, la structure des formulaires de StarOffice correspond aux botes de dialogue abordes au chapitre prcdent. Il existe cependant quelques diffrences importantes :

Les botes de dialogue apparaissent sous la forme d'une seule fentre de dialogue, qui s'affiche sur le document et qui ne permet aucune autre action que le traitement de la bote de dialogue jusqu' sa fermeture. Les formulaires, en revanche, s'affichent directement dans le document, tout comme les lments de dessin. Un diteur de bote de dialogue permet de crer des botes de dialogue ; il se trouve dans l'environnement de dveloppement de StarOffice Basic. Les formulaires sont crs en utilisant la barre d'outils des fonctions de formulaire directement dans le document. Alors que les fonctions de bote 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 lments de contrle d'un formulaire peuvent tre lis une table de base de donnes externe. Cette fonction n'est pas disponible dans les botes de dialogue. Les lments de contrle des botes de dialogue et des formulaires sont diffrents sous plusieurs aspects.

Les utilisateurs souhaitant fournir leurs formulaires avec leurs propres mthodes de gestion d'vnements doivent se reporter au chapitre 11 (Botes de dialogue ). Les mcanismes expliqus ici sont identiques ceux des formulaires.

Utilisation des formulaires


Les formulaires de StarOffice peuvent contenir des champs de texte, des zones de liste, des boutons radio, ainsi qu'un ensemble d'autres lments de contrle, qui sont insrs directement dans un texte ou une feuille de calcul. La barre d'outils des 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 lments de contrle peut tre modifie et leurs proprits peuvent tre dites dans la fentre des proprits. La barre d'outils des fonctions de formulaire permet galement de passer d'un mode l'autre.

207

Dtermination des formulaires d'objet


StarOffice positionne les lments de contrle d'un formulaire au niveau de l'objet de dessin. Le formulaire d'objet rel est accessible par l'intermdiaire de la liste des formulaires au niveau du dessin. L'accs aux objets s'effectue de la faon 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 mthode GetByIndex retourne le formulaire avec le numro d'index 0. Lorsque vous utilisez des feuilles de calcul, une tape intermdiaire est ncessaire par l'intermdiaire de 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 suggre dj le nom de la mthode GetByIndex, un document peut contenir plusieurs formulaires. Ceci est pratique, par exemple, si le contenu de diffrentes bases de donnes s'affiche dans un document ou si une relation de la base de donnes 1:n s'affiche dans un formulaire. L'option permettant de crer des sous-formulaires existe galement dans ce but.

Les trois aspects d'un formulaire d'lments de contrle


Un lment de contrle d'un formulaire a trois aspects :

En premier lieu, il y a le Modle de l'lment de contrle. Pour le programmeur de StarOffice Basic, c'est le principal objet lorsqu'il travaille avec des formulaires d'lments de contrle. Son quivalent est la Vue de l'lment de contrle, qui administre les informations d'affichage. Dans la mesure o les formulaires d'lments de contrle des documents sont administrs comme un lment spcial de dessin, il existe galement un objet Shape qui reprsente les proprits spcifiques de l'lment de dessin de l'lment de contrle (en particulier sa position et sa taille).

208 StarOffice 7 Manuel de programmation Basic

Accs au modle des formulaires d'lments de contrle


Les modles des lments de contrle d'un formulaire sont accessibles par l'intermdiaire de la mthode 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 dtermine le modle de l'lment de contrle MyListBox, situ dans le premier formulaire du document texte actuellement ouvert. Si vous n'tes pas sr du formulaire d'un lment de contrle, vous pouvez utiliser l'option de recherche dans tous les formulaires de l'lment de contrle ncessaire :
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 mthode HasByName pour vrifier tous les formulaires d'un document texte, afin de dterminer s'ils contiennent un modle d'lment de contrle nomm MyListBox. Si un modle correspondant est trouv, une rfrence est enregistre dans la variable Ctl et la recherche est termine.

Chapitre 12 Formulaires 209

Accs la vue des formulaires d'lments de contrle


Pour accder la vue d'un formulaire d'lments de contrle, il est ncessaire de disposer d'abord du modle associ. La vue du formulaire d'lments de contrle peut tre dtermine avec l'assistance du modle et en utilisant le contrleur 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 trs semblable celui de l'exemple prcdent permettant de dterminer un modle d'lment de contrle. Il utilise non seulement l'objet Document Doc mais aussi l'objet de contrleur de document DocCrl qui fait rfrence la fentre de document courante. Avec l'aide de cet objet de contrleur et du modle de l'lment de contrle, il utilise ensuite la mthode GetControl pour dterminer la vue (variable CtlView) du formulaire d'lments de contrle.

210 StarOffice 7 Manuel de programmation Basic

Accs l'objet Shape des formulaires d'lments de contrle


La mthode permettant d'accder aux objets Shape d'un lment de contrle utilise galement le niveau de dessin correspondant du document. Pour dterminer un lment de contrle spcial, il est ncessaire de rechercher tous les lments 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 vrifie tous les lments de dessin pour dterminer s'ils prennent en charge l'interface com.sun.star.drawing.XControlShape ncessaire pour les formulaires d'lments de contrle. Si c'est le cas, la proprit Control.Name vrifie ensuite si le nom de l'lment de contrle est MyListBox. Si ceci est vrifi, la fonction termine la recherche.

Dtermination de la taille et de la position des lments de contrle


Comme cela a dj t voqu, la taille et la position des lments de contrle peuvent tre dtermines l'aide de l'objet Shape associ. La forme de l'lment de contrle, comme tous les autres objets Shape, fournit les proprits Size et Position cette fin :

Size (struct) taille de l'lment de contrle (structure de donnes com.sun.star.awt.Size).

Position (struct) position de l'lment de contrle (structure de donnes com.sun.star.awt.Point).

L'exemple suivant montre comment dfinir la position et la taille d'un lment de contrle en utilisant l'objet Shape associ :
Dim Shape As Object Point.x = 1000 Point.x = 1000 Size.Width = 10000 Size.Width = 10000 Shape.Size = Size

Chapitre 12 Formulaires 211

Shape.Position = Point

L'objet Shape de l'lment de contrle doit dj tre connu pour que le code fonctionne. Si ce n'est pas le cas, il doit tre dtermin en utilisant le code ci-dessus.

dtails des formulaires d'lments de contrle


Les lments de contrle disponibles dans les formulaires sont semblables ceux des botes de dialogue. La slection s'tend des champs de texte simples aux zones de liste, zones combines et diffrents boutons. Vous trouverez ci-dessous la liste des proprits les plus importantes pour les formulaires des lments de contrle. Toutes les proprits font partie des objets Model associs. Outre les lments de contrle standard, un lment de contrle de table est galement disponible pour les formulaires, qui permet l'intgration de tables de bases de donnes compltes. Ceci est dcrit la section Formulaires de bases de donnes au chapitre 11.

Boutons
L'objet Model d'un bouton de formulaire fournit les proprits suivantes :

BackgroundColor (long) couleur de l'arrire-plan. DefaultButton (Boolean) le bouton sert de valeur par dfaut. Dans ce cas, il rpond galement au bouton d'entre s'il n'a pas de focus. Enabled (Boolean) l'lment de contrle peut tre activ. Tabstop (Boolean) l'lment de contrle peut tre atteint par l'intermdiaire de la touche de tabulation. TabIndex (Long) position de l'lment de contrle dans la squence d'activation FontName (String) nom du type de police. FontHeight (Single) hauteur de caractre en points (pt). Tag (String) chane contenant des informations supplmentaires, pouvant tre enregistres dans le bouton pour l'accs par programmation. TargetURL (String) URL cible pour les boutons du type de l'URL. TargetFrame (String) nom de la fentre (ou du cadre) dans laquelle TargetURL doit tre ouvert en activant le bouton (pour les boutons du type de l'URL).

Label (String) tiquette du bouton. TextColor (Long) couleur du texte de l'lment de contrle HelpText (String) texte d'aide s'affichant automatiquement lorsque le curseur de la souris se trouve au-dessus de l'lment de contrle HelpURL (String) URL de l'aide en ligne pour l'lment de contrle correspondant

212 StarOffice 7 Manuel de programmation Basic

ButtonType (Enum) action lie au bouton (valeur par dfaut partir de com.sun.star.form.FormButtonType).

Par l'intermdiaire de la proprit ButtonType, vous avez la possibilit de dfinir une action s'excutant automatiquement lorsque le bouton est enfonc. Le groupe com.sun.star.form.FormButtonType associ de constantes fournit les valeurs suivantes :

PUSH bouton standard. SUBMIT fin de l'entre du formulaire (particulirement pertinent pour les formulaires HTML). RESET rinitialise toutes les valeurs du formulaire leurs valeurs d'origine. URL appel de l'URL dfini dans TargetURL (est ouvert dans la fentre spcifie par l'intermdiaire de TargetFrame).

Les types de bouton OK et Annuler que l'on trouve dans les botes de dialogue ne sont pas supports dans les formulaires.

Boutons d'option
Les proprits suivantes d'un bouton d'option sont disponibles par l'intermdiaire de son objet model :

Enabled (Boolean) l'lment de contrle peut tre activ. Tabstop (Boolean) l'lment de contrle peut tre atteint par l'intermdiaire de la touche de tabulation. TabIndex (Long) position de l'lment de contrle dans la squence d'activation. FontName (String) nom du type de police. FontHeight (Single) hauteur de caractre en points (pt). Tag (String) chane contenant des informations supplmentaires, pouvant tre enregistres dans le bouton pour l'accs par programmation. Label (String) inscription du bouton. Printable (Boolean) l'lment de contrle peut tre imprim. State (Short) si 1, l'option est active, sinon, elle est dsactive. RefValue (String) chane pour enregistrer des informations supplmentaires (par exemple, pour administrer les ID des enregistrements de donnes). TextColor (Long) couleur du texte de l'lment de contrle. HelpText (String) texte d'aide s'affichant automatiquement lorsque le curseur de la souris se trouve au-dessus de l'lment de contrle. HelpURL (String) URL de l'aide en ligne pour l'lment de contrle correspondant

Le mcanisme de regroupement des boutons d'option fait la distinction entre les lments de contrle pour les botes de dialogue et les formulaires. Tandis que les lments de contrle apparaissant l'un aprs l'autre dans les botes de dialogue sont automatiquement combins pour constituer un groupe, le
Chapitre 12 Formulaires 213

regroupement des formulaires s'effectue sur la base des noms. Pour ce faire, tous les boutons d'option d'un groupe doivent contenir le mme nom. StarOffice combine les lments de contrle groups dans une matrice afin que les boutons individuels d'un programme StarOffice Basic puissent tre atteints de la mme manire que prcdemment. L'exemple suivant montre comment dterminer le modle d'un groupe d'lments de contrle.
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 prcdent permettant de dterminer un simple modle de contrle d'lment. Il effectue une recherche en boucle dans tous les formulaires du document texte courant et utilise la mthode HasByName pour vrifier si le formulaire correspondant contient un lment comportant le nom MyOptions qu'il recherche. Si c'est le cas, l'accs la matrice du modle s'effectue en utilisant la mthode GetGroupByName (plutt que la mthode GetByName pour dterminer des modles simples).

Cases cocher
L'objet Model d'un formulaire de cases cocher fournit les proprits suivantes :

Enabled (Boolean) l'lment de contrle peut tre activ. Tabstop (Boolean) l'lment de contrle peut tre atteint par l'intermdiaire de la touche de tabulation. TabIndex (Long) position de l'lment de contrle dans la squence d'activation. FontName (String) nom du type de police. FontHeight (Single) hauteur de caractre en points (pt). Tag (String) chane contenant des informations supplmentaires, pouvant tre enregistres dans le bouton pour l'accs par programmation. Label (String) tiquette du bouton. Printable (Boolean) l'lment de contrle peut tre imprim. State (Short) si 1, l'option est active, sinon, elle est dsactive.

214 StarOffice 7 Manuel de programmation Basic

RefValue (String) chane pour enregistrer des informations supplmentaires (par exemple, pour administrer les ID des enregistrements de donnes). TextColor (Long) couleur du texte de l'lment de contrle. HelpText (String) texte d'aide s'affichant automatiquement lorsque le curseur de la souris se trouve au-dessus de l'lment de contrle. HelpURL (String) URL de l'aide en ligne pour l'lment de contrle correspondant

Champs de texte
Les objets Model des formulaires de champs de texte fournissent les proprits suivantes :

Align (short) orientation du texte (0 : align gauche, 1 : centr, 2 : align droite). BackgroundColor (long) couleur d'arrire-plan de l'lment de contrle. Border (short) type de bordure (0 : pas de bordure, 1 : bordure 3D, 2 : bordure simple). EchoChar (String) caractre cho pour le champ de mot de passe. FontName (String) nom du type de police. FontHeight (Single) hauteur de caractre en points (pt). HardLineBreaks (Boolean) des retours automatiques la ligne sont insrs en permanence dans le texte de l'lment de contrle. HScroll (Boolean) le texte a une barre de dfilement horizontale. MaxTextLen (Short) longueur maximale du texte ; si 0 est indiqu, il n'existe aucune limite. MultiLine (Boolean) permet les entres sur plusieurs lignes. Printable (Boolean) l'lment de contrle peut tre imprim. ReadOnly (Boolean) le contenu de l'lment de contrle est en lecture seule. Enabled (Boolean) l'lment de contrle peut tre activ. Tabstop (Boolean) l'lment de contrle peut tre atteint par l'intermdiaire de la touche de tabulation. TabIndex (Long) position de l'lment de contrle dans la squence d'activation. FontName (String) nom du type de police. FontHeight (Single) hauteur de caractre en points (pt). Text (String) couleur du texte de l'lment de contrle. TextColor (Long) couleur du texte de l'lment de contrle. VScroll (Boolean) le texte a une barre de dfilement verticale. HelpText (String) texte d'aide s'affichant automatiquement lorsque le curseur de la souris se trouve au-dessus de l'lment de contrle.
Chapitre 12 Formulaires 215

HelpURL (String) URL de l'aide en ligne pour l'lment de contrle correspondant.

Zones de liste
L'objet Model des formulaires de zone de liste fournit les proprits suivantes :

BackgroundColor (long) couleur d'arrire-plan de l'lment de contrle. Border (short) type de bordure (0 : pas de bordure, 1 : cadre 3D, 2 : cadre simple). FontDescriptor (struct) structure comportant les dtails de la police utilise (correspondant la structure com.sun.star.awt.FontDescriptor). LineCount (Short) nombre de lignes dans l'lment de contrle. MultiSelection (Boolean) permet la slection de plusieurs entres. SelectedItems (Array of Strings) liste des entres mises en vidence. StringItemList (Array of Strings) liste de toutes les entres. ValueItemList (Array of Variant) liste contenant des informations supplmentaires pour chaque entre (par exemple, pour administrer les ID des enregistrements de donnes). Printable (Boolean) l'lment de contrle peut tre imprim. ReadOnly (Boolean) le contenu de l'lment de contrle est en lecture seule. Enabled (Boolean) l'lment de contrle peut tre activ. Tabstop (Boolean) l'lment de contrle peut tre atteint par l'intermdiaire de la touche de tabulation. TabIndex (Long) position de l'lment de contrle dans la squence d'activation. FontName (String) nom du type de police. FontHeight (Single) hauteur de caractre en points (pt). Tag (String) chane contenant des informations supplmentaires, pouvant tre enregistres dans le bouton pour l'accs par programmation. TextColor (Long) couleur du texte de l'lment de contrle. HelpText (String) texte d'aide s'affichant automatiquement lorsque le curseur de la souris se trouve au-dessus de l'lment de contrle. HelpURL (String) URL de l'aide en ligne pour l'lment de contrle correspondant.
Par l'intermdiaire de leur proprit ValueItemList, les formulaires de zone de liste fournissent un quivalent de la proprit VBA, ItemData, par l'intermdiaire duquel vous pouvez administrer des informations supplmentaires pour des entres de liste individuelles.

De plus, les mthodes suivantes sont fournies par l'intermdiaire de l'objet View de la zone de liste :

addItem (Item, Pos) insre la chane spcifie dans Item dans la liste la position Pos. addItems (ItemArray, Pos) insre les entres rpertories dans le champ de saisie ItemArray de la chane dans la liste la position Pos removeItems (Pos, Count) supprime les entres Count partir de la position Pos.

216 StarOffice 7 Manuel de programmation Basic

selectItem (Item, SelectMode) active ou dsactive la mise en vidence de l'lment spcifi dans la chane Item suivant la variable SelectMode. makeVisible (Pos) fait dfiler le champ de la liste pour rendre visible l'entre spcifie avec Pos.

Formulaires de base de donnes


Il est possible de lier directement les formulaires StarOffice une base de donne. Les formulaires crs de cette manire offrent toutes les fonctions d'une base de donnes frontale complte, sans recours la programmation indpendante. L'utilisateur peut parcourir et rechercher les tables et requtes slectionnes, ainsi que modifier des enregistrements de donnes et en insrer de nouveaux. StarOffice vrifie automatiquement que les donnes pertinentes sont rcupres partir de la base de donnes et que toute modification effectue est rcrite dans la base de donnes. Un formulaire de base de donnes correspond en fait un formulaire StarOffice standard. Outre les proprits standard, les proprits spcifiques des bases de donnes suivantes doivent galement tre dfinies dans le formulaire :

DataSourceName (String) nom de la source de donnes (reportez-vous au chapitre 10, Accs aux bases de donnes; Accs aux bases de donnes ; la source de donnes doit tre globalement cre dans StarOffice). Command (String) nom de la table, requte, ou commande SQL select vers laquelle un lien doit tre tabli. CommandType (Const) - spcifie si la Command est une table, requte, ou commande SQL (valeur partir de l'numration com.sun.star.sdb.CommandType).

L'numration com.sun.star.sdb.CommandType recouvre les valeurs suivantes :


TABLE Table QUERY - Requte COMMAND commande SQL

Les champs de la base de donnes sont assigns aux lments de contrle individuels par l'intermdiaire de cette proprit :

DataField (String) nom du champ de la base de donnes lie.

Tables
Un autre lment de contrle est fourni pour utiliser des bases de donnes : l'lment de contrle de table. Ceci reprsente le contenu d'une table ou requte de base de donnes complte. Dans le scnario le plus simple, un lment de contrle de table est li une base de donnes en utilisant le formulaire autopilote reliant toutes les colonnes aux champs correspondants de la base de donnes, conformment aux spcifications de l'utilisateur. Du fait que API associe est relativement complexe, nous n'en fournirons pas une description complte pour l'instant.

Chapitre 12 Formulaires 217

218 StarOffice 7 Manuel de programmation Basic

13

Annexe
Conseils de migration VBA
List of words (Word) 93 List of sentences (Word) 93 List of characters (Word) 93 Font object (Excel, Word) 95 List of borders (Word) 95 Shading object (Word) 95 ParagraphFormat object (Word) 95 Range.MoveStart method (Word) 100 Range.MoveEnd method (Word) 100 Range.InsertBefore method (Word) 100 Range.InsertAfter method (Word) 100 Find object (Word) 106 Replacement object (Word) 106 Tables.Add method (Word) 109 Frames.Add method (Word) 114 Fields.Add method (Word) 116 List of columns (Excel) 124 List of rows (Excel) 124 Range.Insert method (Excel) 129 Range.Delete method (Excel) 129 Range.Copy method (Excel) 129 Interior object (Excel) 130 PageSetup object (Excel, Word) 133 Worksheet.ChartObjects (Excel) 170 ADO Library 179 Recordset object (DAO, ADO) 185 Snapshot object (ADO, DAO) 187 Dynaset object (ADO, DAO) 187 Dialogs 189 Twips 193

Conseils de migration StarOffice 5.x


Documents.Open method 81 Document object 84 Border object 95 Paragraph object 95 Font object 95 SearchSettings object 106 List of tables 110 DeleteUserField method 117 InsertField method 117 SetCurField method 117 Application.OpenTableConnection method 185 Application.DataNextRecord method 185

219

Index

of diagrams................................................................174

A
AdjustBlue.......................................................................162 AdjustContrast................................................................162 AdjustGreen....................................................................162 AdjustLuminance...........................................................162 AdjustRed........................................................................162 Affichage de messages....................................................67 afterLast...........................................................................188 Alignment........................................................................171 AllowAnimations...........................................................168 AnchorType....................................................................108 AnchorTypes...................................................................108 Annotations........................................................................... as field in text documents........................................119 ANSI...................................................................................22 Area..................................................................................172 ArrangeOrder.................................................................175 Arrays.................................................................................... checking.......................................................................53 dynamic size changes.................................................30 multi-dimensional......................................................30 simple...........................................................................29 Valeur spcifique pour l'indice de dbut................30 Arrire-plan de page......................................................133 ASCII..................................................................................21 AsTemplate.......................................................................82 Author..............................................................................119 AutoMax..........................................................................175 AutoMin..........................................................................175 AutoOrigin......................................................................175 AutoStepHelp.................................................................175 AutoStepMain.................................................................175 Axes........................................................................................

B
BackColor......................................................110f., 114, 133 BackGraphicFilter...........................................................133 BackGraphicLocation.....................................................133 BackGraphicURL............................................................133 BackTransparent.............................................................133 Beep....................................................................................68 beforeFirst........................................................................188 Bitmaps............................................................................152 Bookmark.............................................................................. com.sun.star.Text......................................................120 in text documents.....................................................120 Boolean values...................................................................... converting....................................................................52 Boolean variables.................................................................. comparing....................................................................36 declaring......................................................................28 linking...........................................................................35 BorderBottom..................................................................146 BorderLeft.......................................................................146 BorderRight.....................................................................146 BorderTop.......................................................................146 BottomBorder..................................................................134 BottomBorderDistance..................................................135 BottomMargin.................................................110, 114, 134 Boucles...............................................................................38 Buttons................................................................................... of dialogues...............................................................202 of forms......................................................................212 ByRef..................................................................................44 ByVal..................................................................................44

221

C
Cadres texte.....................................................................113 cancelRowUpdates.........................................................188 CBool..................................................................................52 CDate..................................................................................52 CDbl...................................................................................52 CellAddress........................................................................... com.sun.star.table.....................................................129 CellBackColor.................................................................130 CellContentType................................................................... com.sun.star.table.....................................................126 CellFlags................................................................................ com.sun.star.sheet....................................................142 CellProperties........................................................................ com.sun.star.table.....................................................130 CellRangeAddress................................................................ com.sun.star.table.....................................................127 Cellules............................................................................125 CenterHorizontally........................................................139 CenterVertically..............................................................139 Cercles..............................................................................158 chanes...............................................................................23 Champs texte..................................................................116 Chapter name........................................................................ as field in text documents........................................119 Chapter number................................................................... as field in text documents........................................119 ChapterFormat................................................................119 CharacterProperties............................................................. com.sun.star.style.......................................................95 CharacterSet................................................................83, 85 CharBackColor..................................................................95 CharColor..........................................................................95 CharFontName.................................................................95 CharHeight (Float) CharHeight..................................95 CharKeepTogether...........................................................95 CharStyleName................................................................95 CharUnderline..................................................................95 CharWeight.......................................................................95 Checkboxes............................................................................ of dialogues...............................................................203 of forms......................................................................214 CInt.....................................................................................52 CircleEndAngle..............................................................158 CircleKind.......................................................................158 CircleStartAngle.............................................................158

CLng...................................................................................52 Close...................................................................................65 codes de contrle............................................................104 collapseToEnd.................................................................102 collapseToStart................................................................102 Collate................................................................................86 Columns................................................................................. in spreadsheets..........................................................123 Command........................................................................182 Commentaires...................................................................18 Constantes.........................................................................35 Content.............................................................................119 ConvertFromUrl...............................................................80 ConvertToUrl....................................................................80 CopyCount........................................................................86 copyRange.......................................................................128 CornerRadius..................................................................157 couches.............................................................................145 coupure de mot...............................................................104 createTextCursor............................................................100 CreateUnoDialog............................................................190 CSng...................................................................................52 CStr.....................................................................................52 Current page......................................................................... as field in text documents........................................118 CustomShow...................................................................168

D
DatabaseContext................................................................... com.sun.star.sdb.......................................................180 date.....................................................................................28 Date..................................................................................119 Date........................................................................................ current system date....................................................60 Date and time details........................................................... as field in text documents........................................119 checking.......................................................................53 comparing....................................................................36 converting....................................................................52 declaring......................................................................28 editing...........................................................................58 formatting in spreadsheets......................................132 linking...........................................................................35 System date and time.................................................60 DateTimeValue...............................................................119 Day.....................................................................................59

222 StarOffice 7 Manuel de programmation Basic 2003

DBG_methods...................................................................74 DBG_properties................................................................74 DBG_supportetInterfaces................................................74 Deep.................................................................................178 Defining printer paper tray...........................................134 Dgrad de couleurs......................................................149 des modles d'lment de caractres.............................88 des modles de cadre.......................................................88 des modles de caractre.................................................88 des modles de cellule.....................................................88 des modles de numrotation........................................88 des modles de page........................................................88 des modles de paragraphe............................................88 des modles de prsentation..........................................88 Desktop.................................................................................. com.sun.star.frame.....................................................79 Diagrammes barres.....................................................178 Diagrammes secteurs..................................................178 Diagrammes de surface.................................................178 Diagrammes linaires....................................................177 Dim.....................................................................................20 Dim3D..............................................................................177 Dir.......................................................................................61 Direct formatting..............................................................94 DisplayLabels..................................................................175 dispose.............................................................................190 Do...Loop...........................................................................40 Documents............................................................................. creating.........................................................................83 exporting......................................................................84 importing.....................................................................81 opening.........................................................................81 printing.........................................................................86 saving...........................................................................84 DrawPages......................................................................145

Eof.......................................................................................66 Events..................................................................................... for dialogue and forms............................................195 Execute.............................................................................190 return values.............................................................191 Exit Function.....................................................................43 Exit Sub..............................................................................43

F
feuilles..............................................................................122 file:///...............................................................................80 FileCopy.............................................................................63 FileDateTime.....................................................................64 FileLen................................................................................64 FileName...........................................................................86 FillBitmapURL................................................................152 FillColor...........................................................................148 FillTransparence.............................................................152 FilterName...................................................................83, 85 FilterOptions...............................................................83, 85 first....................................................................................188 FirstPage..........................................................................168 Floor.................................................................................173 Fonctions............................................................................42 Fonctions de conversion..................................................51 FooterBackColor.............................................................137 FooterBackGraphicFilter...............................................137 FooterBackGraphicLocation.........................................137 FooterBackGraphicURL................................................137 FooterBackTransparent.................................................137 FooterBodyDistance.......................................................136 FooterBottomBorder......................................................137 FooterBottomBorderDistance.......................................137 FooterHeight...................................................................136 FooterIsDynamicHeight................................................136 FooterIsOn.......................................................................136 FooterIsShared................................................................137 FooterLeftBorder............................................................136 FooterLeftBorderDistance.............................................137 FooterLeftMargin...........................................................136 FooterRightBorder..........................................................136 FooterRightBorderDistance..........................................137 FooterRightMargin.........................................................136 Footers..............................................................................135 FooterShadowFormat....................................................137 FooterText........................................................................138

E
Editing directories............................................................62 Editing files.......................................................................61 Editing text files................................................................65 ellipses..............................................................................158 EllipseShape.......................................................................... com.sun.star.drawing...............................................158 end....................................................................................168 endExecute......................................................................191 Environ..............................................................................69

Index 223

FooterTextLeft.................................................................138 FooterTextRight..............................................................138 FooterTopBorder............................................................137 FooterTopBorderDistance.............................................137 For...Next...........................................................................38 Format................................................................................57 Format de fichier XML....................................................80 Format de page...............................................................133 formatage direct...............................................................98 Formes polygonales.......................................................160 Formes rectangulaires....................................................157 Function.............................................................................42

GraphicColorMode........................................................162 GraphicURL....................................................................162

H
Hachures..........................................................................150 hasByName.......................................................................76 HasLegend......................................................................171 hasLocation.......................................................................84 HasMainTitle..................................................................170 hasMoreElements.............................................................78 HasSecondaryXAxis......................................................174 HasSecondaryXAxisDescription..................................174 HasSubTitle.....................................................................171 HasUnoInterfaces...........................................................211 HasXAxis.........................................................................174 HasXAxisDescription.....................................................174 HasXAxisGrid.................................................................174 HasXAxisHelpGrid........................................................174 HasXAxisTitle.................................................................174 Hatch...................................................................................... com.sun.star.drawing...............................................151 HeaderBackColor...........................................................136 HeaderBackGraphicFilter.............................................136 HeaderBackGraphicLocation.......................................136 HeaderBackGraphicURL...............................................136 HeaderBackTransparent...............................................136 HeaderBodyDistance.....................................................135 HeaderBottomBorder....................................................136 HeaderBottomBorderDistance.....................................136 HeaderFooterContent.......................................................... com.sun.star.sheet....................................................138 HeaderHeight.................................................................135 HeaderIsDynamicHeight..............................................135 HeaderIsOn.....................................................................135 HeaderIsShared..............................................................136 HeaderLeftBorder..........................................................135 HeaderLeftBorderDistance...........................................136 HeaderLeftMargin.........................................................135 HeaderRightBorder........................................................135 HeaderRightBorderDistance.........................................136 HeaderRightMargin.......................................................135 Headers............................................................................135 HeaderShadowFormat..................................................136 HeaderText......................................................................138 HeaderTextLeft...............................................................138 HeaderTextRight............................................................138

G
Gamma.............................................................................162 GapWidth........................................................................175 GeneralFunction................................................................... com.sun.star.sheet....................................................141 GetAttr...............................................................................63 getColumns.....................................................................111 getControl........................................................................191 getCurrentControler......................................................210 getElementNames............................................................76 getPropertyState...............................................................98 getRows...........................................................................111 getTextTables..................................................................109 Global.................................................................................33 goLeft...............................................................................101 goRight.............................................................................101 gotoEnd............................................................................101 gotoEndOfParagraph.....................................................101 gotoEndOfSentence........................................................101 gotoEndOfWord.............................................................101 gotoNextParagraph........................................................101 gotoNextSentence...........................................................101 gotoNextWord................................................................101 gotoPreviousParagraph.................................................101 gotoPreviousSentence....................................................101 gotoPreviousWord.........................................................101 gotoRange........................................................................101 gotoStart...........................................................................101 gotoStartOfParagraph....................................................101 gotoStartOfSentence.......................................................101 gotoStartOfWord............................................................101 Gradient................................................................................. com.sun.star.awt.......................................................149

224 StarOffice 7 Manuel de programmation Basic 2003

HeaderTopBorder..........................................................135 HeaderTopBorderDistance...........................................136 Height..............................................111, 114, 123, 134, 146 HelpMarks.......................................................................175 HoriJustify.......................................................................131 HoriOrient.......................................................................114 Hour...................................................................................59

IsReadOnly......................................................................181 IsStartOfNewPage..........................................................123 isStartOfParagraph.........................................................101 isStartOfSentence............................................................101 isStartOfWord.................................................................101 IsTextWrapped...............................................................131 IsVisible.........................................................................122f.

I
If...Then...Else....................................................................36 Images..............................................................................162 Imitated properties...........................................................72 implicites et explicites......................................................51 Indirect formatting.....................................................95, 98 Info...................................................................................181 initialize...........................................................................109 InputBox............................................................................68 insertByIndex....................................................................78 insertByName...................................................................77 insertCell..........................................................................127 insertTextContent...........................................................109 InStr....................................................................................56 interfaces............................................................................73 isAfterLast.......................................................................188 IsAlwaysOnTop..............................................................168 IsArray...............................................................................53 IsAutoHeight..................................................................111 IsAutomatic.....................................................................168 isBeforeFirst.....................................................................188 IsCellBackgroundTransparent.....................................130 isCollapsed......................................................................102 IsDate.........................................................................53, 119 IsEndless..........................................................................168 isEndOfParagraph..........................................................102 isEndOfSentence.............................................................101 isEndOfWord..................................................................101 isFirst................................................................................188 IsFixed..............................................................................119 IsFullScreen.....................................................................168 IsLandscape.....................................................................133 isLast................................................................................188 isModified.........................................................................84 IsMouseVisible................................................................168 IsNumeric..........................................................................53 IsPasswordRequired......................................................181 isReadonly.........................................................................84

J
JDBC.................................................................................179 JumpMark.........................................................................83

K
Key.......................................................................................... of diagrams................................................................170 Kill......................................................................................63

L
last.....................................................................................188 Left......................................................................................55 LeftBorder........................................................................134 LeftBorderDistance........................................................134 LeftMargin......................................................110, 114, 134 LeftPageFooterContent..................................................137 LeftPageHeaderContent................................................137 Legend.............................................................................171 Len......................................................................................55 Level.................................................................................119 Lignes...............................................................................159 Line break.............................................................................. in program code..........................................................17 in strings.......................................................................21 LineColor.........................................................................153 LineJoint...........................................................................153 Lines.................................................................................177 LineStyle..........................................................................153 LineStyle................................................................................ com.sun.star.drawing...............................................153 LineTransparence...........................................................153 LineWidth........................................................................153 List boxes............................................................................... of dialogues...............................................................205 of forms......................................................................216 loadComponentFromURL..............................................79 LoadLibrary....................................................................190 Logarithmic.....................................................................175

Index 225

M
Map AppFont..................................................................193 Marge...............................................................................134 Marks...............................................................................175 Marqueur...........................................................................19 matrices..............................................................................29 Max...................................................................................175 Mthodes...........................................................................73 Mid...............................................................................55, 57 Min...................................................................................175 Minute................................................................................59 MkDir.................................................................................62 Modles..............................................................................88 Modules.............................................................................73 montaires.........................................................................25 Month.................................................................................59 moveRange......................................................................128 MsgBox..............................................................................67

N
Name.................................................................63, 86, 181f. next...................................................................................187 nextElement.......................................................................78 Notation exponentielle....................................................27 notation URL.....................................................................80 Now....................................................................................60 Number............................................................................146 Number of characters.......................................................... as field in text documents........................................118 Number of words................................................................. as field in text documents........................................118 NumberFormat...............................................119, 132, 176 NumberFormatsSupplier..............................................181 NumberingType.............................................................118 NumberOfLines..............................................................178 Numbers................................................................................ checking.......................................................................53 comparing....................................................................36 converting....................................................................52 declaring......................................................................24 formatting....................................................................57 linking...........................................................................35

On Error.............................................................................46 Open ... For........................................................................65 Oprateurs.........................................................................35 Oprateurs de comparaison............................................36 Oprateurs logiques.........................................................35 Oprateurs mathmatiques.............................................35 Operators............................................................................... comparable..................................................................36 logical...........................................................................35 mathematical...............................................................35 mathematical operators.............................................35 OptimalHeight................................................................123 OptimalWidth.................................................................123 Option Buttons...................................................................... of dialogues...............................................................203 of forms......................................................................213 Options de la mthode ...................................................85 Orientation..............................................................131, 146 Origin...............................................................................175 Overlap............................................................................175 Overwrite...........................................................................85

P
Page margin....................................................................134 Page numbers........................................................................ as field in text documents........................................118 Page shadow...................................................................134 Pages..................................................................................86 Pages de code....................................................................22 PageStyle.........................................................................122 PaperFormat......................................................................87 PaperOrientation..............................................................86 PaperSize...........................................................................87 ParaAdjust.........................................................................96 ParaBackColor..................................................................96 ParaBottomMargin...........................................................96 Paragraph.............................................................................. com.sun.star.text.........................................................92 Paragraphes.......................................................................92 ParagraphProperties............................................................ com.sun.star.style.......................................................96 ParaLeftMargin.................................................................96 ParaLineSpacing...............................................................96 ParamArray.......................................................................45 Paramtres facultatifs......................................................45 ParaRightMargin..............................................................96

O
ODBC...............................................................................179 Offset................................................................................118

226 StarOffice 7 Manuel de programmation Basic 2003

ParaStyleName.................................................................96 ParaTabStops....................................................................96 ParaTopMargin.................................................................96 Passage de paramtres....................................................44 Password.............................................................83, 85, 181 Pause................................................................................168 Percent.............................................................................177 Plages de cellules............................................................140 PolyPolygonShape............................................................... com.sun.star.drawing...............................................160 Porte.................................................................................31 portions de paragraphe...................................................92 PresentationDocument........................................................ com.sun.star.presentation........................................168 previous...........................................................................188 Print....................................................................................65 PrintAnnotations............................................................139 PrintCharts......................................................................139 PrintDownFirst...............................................................139 PrintDrawing..................................................................139 PrinterPaperTray............................................................134 PrintFormulas.................................................................139 PrintGrid..........................................................................139 PrintHeaders...................................................................139 PrintObjects.....................................................................139 PrintZeroValues..............................................................140 Private................................................................................34 Procdures.........................................................................42 PropertyState........................................................................ com.sun.star.beans.....................................................98 Proprits...........................................................................72 Proprits de caractre....................................................95 Proprits de cellules.....................................................130 Proprits de page..........................................................133 Proprits de paragraphe................................................96 Proprits Fill..................................................................148 Proprits Shadow.........................................................156 Public..................................................................................33

Regular expressions...............................................105, 107 rehearseTimings.............................................................168 removeByIndex.................................................................78 removeByName................................................................77 removeRange..................................................................128 removeTextContent.......................................................109 Remplissages unis..........................................................148 RepeatHeadline..............................................................110 Replace................................................................................... in text documents.....................................................107 replaceByName................................................................77 Requtes...........................................................................182 ResultSetConcurrency...................................................187 ResultSetType.................................................................187 Resume...............................................................................47 Right...................................................................................55 RightBorder.....................................................................134 RightBorderDistance......................................................134 RightMargin....................................................110, 114, 134 RightPageHeaderContent.............................................137 RmDir.................................................................................63 RotateAngle.............................................................131, 165 Rotating.................................................................................. of drawing elements.................................................165 Rows....................................................................................... in spreadheets...........................................................123

S
SDBC................................................................................179 Search..................................................................................... in text documents.....................................................104 SearchBackwards...........................................................105 SearchCaseSensitive.......................................................105 SearchDescriptor.................................................................. com.sun.star.util........................................................104 SearchRegularExpression..............................................105 SearchSimilarity..............................................................105 SearchSimilarityAdd......................................................105 SearchSimilarityExchange.............................................105 SearchSimilarityRelax....................................................105 SearchSimilarityRemove...............................................105 SearchStyles.....................................................................105 SearchWords...................................................................105 Second................................................................................59 SecondaryXAxis.............................................................174 Select...Case.......................................................................37

R
ReadOnly...........................................................................83 Recherche de similarit..................................................106 RectangleShape..................................................................... com.sun.star.drawing...............................................157 Rcursivit.........................................................................46 Rfrence de l'API............................................................75

Index 227

services...............................................................................73 Set of characters................................................................21 ANSI.............................................................................22 ASCII............................................................................21 defining for documents........................................83, 85 Unicode........................................................................22 SetAttr................................................................................64 Shadow............................................................................156 ShadowColor..................................................................156 ShadowFormat.......................................................130, 135 ShadowTransparence....................................................156 ShadowXDistance..........................................................156 ShadowYDistance..........................................................157 ShearAngle......................................................................165 Shearing................................................................................. of drawing elements.................................................165 Shell....................................................................................69 Sort.....................................................................................86 SplineOrder.....................................................................178 SplineResolution.............................................................178 SplineType.......................................................................178 SpreadsheetDocument......................................................... com.sun.star.sheet....................................................121 SQL ..................................................................................179 Stacked.............................................................................177 StackedBarsConnected..................................................178 StarDesktop.......................................................................79 start...................................................................................168 Starting programs (external)...........................................69 StartWithNavigator........................................................168 StepHelp..........................................................................175 StepMain..........................................................................175 store....................................................................................84 String................................................................................171 Strings.................................................................................... comparing....................................................................36 converting....................................................................52 declaring......................................................................21 editing...........................................................................55 linking...........................................................................35 StyleFamilies.....................................................................88 StyleFamily............................................................................ com.sun.star.style.......................................................88 Sub......................................................................................44 Sub-title.................................................................................. of diagrams................................................................170

Subtitle.............................................................................171 supportsService................................................................74 SuppressVersionColumns.............................................181 SymbolBitmapURL........................................................177 SymbolSize......................................................................177 SymbolType....................................................................177

T
TableColumns....................................................................... com.sun.star.table.....................................................123 TableFilter........................................................................181 TableRows............................................................................. com.sun.star.table.....................................................123 TableTypeFilter...............................................................181 Text fields.............................................................................. of dialogues...............................................................204 of forms......................................................................215 TextAutoGrowHeight....................................................155 TextAutoGrowWidth.....................................................155 TextBreak.........................................................................176 TextCanOverlap.............................................................176 TextContent........................................................................... com.sun.star.text.......................................................108 TextCursor.......................................................................100 TextField................................................................................ com.sun.star.text.......................................................116 TextFrame.............................................................................. com.sun.star.text.......................................................113 TextHorizontalAdjust....................................................155 TextLeftDistance.............................................................155 TextLowerDistance........................................................156 Textproperty......................................................................... of drawing objects.....................................................154 TextRightDistance..........................................................155 TextRotation............................................................171, 175 TextTable............................................................................... com.sun.star.text.................................................92, 109 TextUpperDistance........................................................155 TextVerticalAdjust.........................................................155 TextWrap.........................................................................108 Time....................................................................................60 Title...................................................................................171 Title......................................................................................... of diagrams................................................................170 TopBorder........................................................................134 TopBorderDistance........................................................134

228 StarOffice 7 Manuel de programmation Basic 2003

TopMargin......................................................110, 114, 134 Traitement des erreurs....................................................46 Transparence...................................................................152 Transparency..................................................................162 Twips................................................................................193 type double........................................................................25 type entier..........................................................................24 type entier long.................................................................24 type simple........................................................................25

W
Wait....................................................................................69 Wall..................................................................................173 Weekday............................................................................59 Width...............................................110, 114, 123, 133, 146

X
XAxis................................................................................174 XAxisTitle........................................................................174 XComponentLoader............................................................. com.sun.star.frame.....................................................79 XEnumeration....................................................................... com.sun.star.container...............................................78 XEnumerationAccess........................................................... com.sun.star.container...............................................78 XHelpGrid.......................................................................174 XIndexAccess........................................................................ com.sun.star.container...............................................77 XIndexContainer.................................................................. com.sun.star.container...............................................78 XMainGrid.......................................................................174 XMultiServiceFactory.......................................................... com.sun.star.lang........................................................75 XNameAccess....................................................................... com.sun.star.container...............................................76 XNameContainer.................................................................. com.sun.star.container...............................................77 XRangeMovement................................................................ com.sun.star.sheet....................................................127 XStorable................................................................................ com.sun.star.frame.....................................................84

U
un espace protg...........................................................104 un retour la ligne.........................................................104 un saut de paragraphe...................................................104 Unicode..............................................................................22 Unpacked..........................................................................85 UpdateCatalogName.....................................................182 updateRow......................................................................188 UpdateSchemaName.....................................................182 UpdateTableName.........................................................182 URL..................................................................................181 UsePn...............................................................................168 User..................................................................................181

V
Valeurs hexadcimales....................................................27 Valeurs octales..................................................................28 Variable declaration............................................................. explicit..........................................................................20 global............................................................................33 implicit.........................................................................20 local...............................................................................32 private..........................................................................34 public domain.............................................................33 Variable names.................................................................19 Variable types....................................................................... Boolean values............................................................28 data fields.....................................................................29 Date and time details.................................................28 Nombres.......................................................................24 strings...........................................................................23 Variant..........................................................................20 Variant...............................................................................20 Vertical.............................................................................178 VertJustify........................................................................131 VertOrient................................................................111, 114

Y
Year.....................................................................................59

Z
Zone de saisie....................................................................68

Index 229