Exemples de correspondance entre Visual Basic et OXYGENE ++

Un exemple valant toujours mieux qu'un long discours, regardons l'exemple suivant.

Programme Visual Basic permettant d'afficher les noms de continents stockés dans le fichier Excel “\world.xls“ :

 

     Dim shtContinent As Excel.Worksheet

 

     On Error Resume Next                                         ' Ignorer les erreurs

     Set appWorld = GetObject(, "Excel.Application") 'Se rattacher à un Excel lancé

     If Err.Number <> 0 Then                                       'Si Excel n'est pas lancé

            Set appWorld = CreateObject("Excel.Application")         'le lancer

     End If

     Err.Clear   ' Effacer l'objet Err si une erreur est apparue.

    

     Set wbWorld = appWorld.Workbooks.Open("\world.xls")

    

     ' Parcourir la collection de pages :

    

     For Each shtContinent In wbWorld.Sheets

            MsgBox shtContinent.Name            ‘Afficher les noms des continents

     Next

 

     Set shtContinent = Nothing          ‘Effacer l'objet

 

     ‘ Forcer Excel à se décharger de la mémoire

     ‘ empêchant ainsi toute application de s'y connecter.

     Set appWorld = Nothing

     Set wbWorld = Nothing

 

Programme L4G correspondant :

VARIABLES :            Double nombreDElements, i

                        Chaine nomContinent

 

CreerContexteComposantCom “Excel.Application“, “appWorld“

// Se rattacher à un Excel déjà lancé :

RattacherComposantCom “appWorld“

Si ErreurRendue = 1 Alors               // Aucun Excel n'est lancé.

     // Lancer une instance :

     ConnecterComposantCom “appWorld“

FinSi

 

// Obtenir un objet (une interface) Workbook :

AppliquerMethodeComposantComGet “appWorld“.“Workbooks.Open“

(“wbWorld“, “\world.xls“)

 

// Parcourir la collection de pages :

// Commencer par obtenir le nombre d'éléments :

AppliquerMethodeComposantComGet “wbWorld“.“Sheets.Count“

(nombreDElements)

Pour i=1, i<nombreDElements Faire

     // Obtenir le i-ème continent :

     AppliquerMethodeComposantComGet “wbWorld“.“Sheets.Item“

(“shtContinent“, i)

     AppliquerMethodeComposantComGet “shtContinent“.“Name“

(nomContinent)

     BoiteMessage nomContinent     //Afficher les noms des continents

FinPour

 

DeconnecterComposantCom “shtContinent“        //Effacer l'objet

 

// Forcer Excel à se décharger de la mémoire

// empêchant ainsi toute application de s'y connecter.

DeconnecterComposantCom “wbWorld“

DeconnecterComposantCom “appWorld“

 

 

L'exemple suivant montre l'équivalence L4G avec l'instruction “With“ de Visual Basic. Cette instruction permet de ne pas répéter plusieurs fois des appels de méthodes donnant accès à une interface.

Lancement d'un mailing client sous Word :

Programme Visual Basic :

. . .

ActiveDocument.MailMerge.MainDocumentType = wdFormLetters

ActiveDocument.MailMerge.OpenDataSource Name:= _

     "maillingAgréés.xls", _

     ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _

     AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _

     WritePasswordDocument:="", WritePasswordTemplate:="", Revert :

AppliquerMethodeComposantCom "MON_DOC"."MailMerge.OpenDataSource"

("clients agréés.xls", ValeurCom("MON_DOC", "wdOpenFormatAuto"),

0, 0, -1, 0, "", "", 0, "", "", "Feuille de calcul entière", "", "")

AppliquerMethodeComposantCom "MON_DOC"."MailMerge.EditMainDocument"()

// Obtenir une connexion sur l'interface MailMerge :

AppliquerMethodeComposantComGet "MON_DOC"."MailMerge" ("MON_MAIL")

AppliquerMethodeComposantComSet "MON_MAIL"."Destination"

(ValeurCom("MON_MAIL", "wdSendToNewDocument"))

AppliquerMethodeComposantComSet "MON_MAIL"."MailAsAttachment" (0)

AppliquerMethodeComposantComSet "MON_MAIL"."MailAddressFieldName" ("")

AppliquerMethodeComposantComSet "MON_MAIL"."MailSubject" ("")

AppliquerMethodeComposantComSet "MON_MAIL"."SuppressBlankLines" (-1)

AppliquerMethodeComposantComSet "MON_MAIL"."DataSource.FirstRecord"

(ValeurCom("MON_MAIL", "wdDefaultFirstRecord"))

AppliquerMethodeComposantComSet "MON_MAIL"."DataSource.LastRecord"

(ValeurCom("MON_MAIL", "wdDefaultLastRecord"))

AppliquerMethodeComposantCom "MON_MAIL"."Execute" (-1)

 

 

Ainsi, il apparaît qu'une instruction With équivaut à définir un nouveau contexte en L4G. Ce contexte n'est pas créé à l'aide de l'instruction CreerContexteComposantCom, mais est renvoyé par l'appel d'une méthode du serveur COM, ici “MON_DOC“.“MailMerge“.

 

Toutefois, il n'est pas obligatoire de définir un contexte pour chaque With. Ainsi, il suffit de répéter “DataSource“ dans l'instruction AppliquerMethodeComposantComSet pour simuler le deuxième With.

 

Il est possible en L4G de simuler les emboîtements de With en définissant autant de contextes que nécessaire.

 

La dernière instruction montre que la valeur Vrai (True) vaut –1 lorsqu'on utilise COM.

La valeur Faux (False) vaut 0.