Première utilisation ; appel d'une fonction publique de Ponx Ouvrez Paradox. Créez une nouvelle fiche. Ajoutez un bouton. Dans le code du "PushButton" du bouton, ajoutez : var px oleauto str string endvar px.open("Ponx.Mci") str = px.PVersion() msginfo("Version de PONX", str)
Explications : On commence par ouvrir Ponx (se connecter à Ponx), dans la variable px. Cela est fait avec la ligne px.open("Ponx.Mci"). A noter que la session de Ponx sera ouverte jusqu'à la sortie de Paradox. La ligne suivante str = px.PVersion() appelle une fonction de Ponx, et récupère le résultat dans la variable str. La dernière ligne affiche le résultat. Nous venons de voir, ici, comment appeler une fonction simple de Ponx. Apprenez les éléments suivants : - Les fonctions publiques sont appelées directement ; aucune déclaration n'est nécessaire. - en cas d'erreur de syntaxe, le compte-rendu de l'erreur sera retourné dans la variable de retour. Deuxième utilisation ; exécution d'un code-source Ponx Dans un nouveau bouton, mettez le code suivant : var px oleauto str,sret string endvar px.open("Ponx.Mci") str="a=123456789012345678901234567890 b=987654321 c=11223344 r=str(int(a*b/c)) chaineretour=str(r)" sret=px.PRun(str) msgStop("Résultat : ",sret)
Explications : Le code Ponx proprement dit est mis dans la variable str. Ensuite, on le fait exécuter par ponx, et on récupère le résultat. On peut donc voir ce que fait la fonction publique PRun ; elle exécute simplement un code-source python, passé en paramètre. Ponx permettant d'exécuter du code Python à la volée, il n'y a plus de limites à son usage. Au passage, notez que la possibilité de gérer, en ObjectPal, des chaînes littérales multi-lignes facilite largement la lecture du code. Dommage que ces chaînes littérales soient limitées à 255 caractères (en ObjectPal). Remarquez aussi que, Paradox ne gérant pas les entiers aussi grands, le résultat a été retourné sous forme d'une chaîne de caractères. Troisième utilisation ; Ponx dynamique Dans un nouveau bouton, mettez le code suivant : var pd oleauto str,sret string endvar pd.open("Ponxd.Mci") ; remarquez le 'd' (d comme dynamique) sret=pd.sinverse("AAbbccddee") msgStop("Inverse de 'AAbbccddee'",sret)
Explications : La fonction sinverse inverse simplement une chaîne de caractère (ABC ==> CBA). Il faut savoir que sinverse n'est pas une fonction publique. L'intérêt de Ponx dynamique, c'est que cela permet d'appeler n'importe quelle fonction de Ponx directement. Mais, aussi, n'importe quelle fonction de Python, ou des modules importés par Ponx. De plus, comme rien n'empêche de créer des fonctions à la volée, depuis votre programme en ObjectPal, un mécanisme est prévu pour rendre ces fonctions accessibles par Ponx dynamique. Enfin, une syntaxe spéciale permet d'accéder aux méthodes d'une classe définie dans Ponx. Cependant, on ne peut pas tout faire. Il ne faut pas oublier : - Que l'on passe par COM (OLE-automation), et donc par des appels / retour. - Les limites de Paradox et d'ObjectPal : impossible de passer des tableaux en paramètres, de recevoir plusieurs valeurs en retour, d'utiliser des procédures comme paramètres, d'utiliser des objets complexes, de faire du callback, etc. Quatrième utilisation ; Ponx V Dans PonxV, le V signifie "Variable". Le principe, c'est de partager des variables, entre l'appelant et Ponx. Dans un nouveau bouton, mettez le code suivant : var px,pv oleauto sret anytype endvar px.open("Ponx.Mci") pv.open("Ponxv.Mci") ;notez le 'v' pv.ABC="AABBCC" msginfo("Paradox pv.ABC",pv.ABC) px.PRun("msginfo('vpublic.ABC',vpublic.ABC)") sret=px.PRet("vpublic.ABC") msginfo("Retourné par Ponx (ABC)",pv.ABC) pv.NOMBRE=1111.11 msginfo("NOMBRE Etape_1", pv.NOMBRE) px.PRun("vpublic.NOMBRE+=222.22") msginfo("NOMBRE Etape_2", pv.NOMBRE) pv.NOMBRE=pv.NOMBRE+333.33 msginfo("NOMBRE Etape_3", pv.NOMBRE) px.PRun("msginfo('vpublic.NOMBRE',str(vpublic.NOMBRE))")
Explications : La ligne pv.ABC="AABBCC" permet de créer, depuis ObjectPAL, une variable dans Ponx. Dès lors, la variable est accessible des deux côtés. Dans ObjectPAL, par pv.ABC ; dans Ponx, par vpublic.ABC. Un point important : Avec ObjectPAL, les noms des variables doivent toujours être en majuscules. Cela n'est pas nécessaire avec d'autres langages. Les lignes suivantes montrent comment on peut visualiser la variable dans ObjectPAL, ou dans Ponx. Le deuxième paragraphe montre que l'on peut bien modifier une variable, créée depuis ObjectPAL, aussi bien dans Ponx que dans objectPAL.
|