|
dBulletin n°18 Appeler
une Procédure
Traduction approximative. Source originale Techniquement une procédure/fonction, qui appartient à un objet, (comme un formulaire), s'appelle une MÉTHODE de cet objet. Une procédure qui est en dehors de l'objet est juste nommée une procédure, comme toujours. Nous parlons d'une
MÉTHODE pour un formulaire. Ouvrez un nouveau formulaire, et faites un glisser-lâcher
pour placer un « Pusbutton » sur le formulaire en cours de création. Dans
l'inspecteur, cliquez sur l'onglet « Properties » (propriétés) et changez la
propriété Name par « pbQuit ». Si vous voulez créer une méthode qui
réponde au bouton-poussoir quand vous cliquez dessus, dans le concepteur de formulaire,
choisissez le bouton-poussoir et dans l'inspecteur de propriété , cliquez l'onglet
des événements (events), placez vous sur l'événement appelé onClick et cliquez l'icône
de la clé anglaise du côté droit. Cela crée le squelette d'une méthode dans l'éditeur
de code source nommée automatiquement PBQUIT_onClick dans
lequel vous pouvez écrire votre code d'exécution. De plus, en même temps, la
référence suivante est aussi automatiquement écrite dans le code de constructeur du
bouton-poussoir pbQuit (1).
C'est ce code qui indique à l'objet de commande de pbQuit où trouver la fonction, (comme pour les procédures dans les versions de Windows de dBASE), qui doit être exécutée quand l'objet est cliqué. Le symbole :: s'appelle un opérateur de résolution et indique, dans ce cas-ci, à l'objet que la fonction est dans la même classe qui définit l'objet. Si la classe est un formulaire, alors une référence automatique est produite pour FORM de type this.<objectName >, exemple this.onClose = class::FORM_ONCLOSE. Maintenant, comment
manipuler une seule méthode qui agira pour plusieurs objects ? Un exemple classique est
un ensemble de trois boutons-radio. L'événement déclenchant est onChange. Chaque fois
que vous cliquez sur un des boutons-radio, son événement onChange se déclenche, mais
aussi l'événement onChange du bouton-radio précédemment sélectionné! Ainsi ce
que vous voudriez avoir est un traiteur d'événement, (la méthode), où vous pouvez
coder ce que vous voulez exécuter quand n'importe lequel d'entre-eux est cliqué. Avec le
formulaire ouvert en mode de conception et 3 boutons-radio déjà placés, cliquez sur
l'option Method du menu principal (sous la barre de titre de la fenêtre de dBase) puis
sélectionnez New Method (nouvelle méthode) . L'éditeur de code créera le
squellete d'une méthode appelée fonction Method . Changez immédiatement le nom de la fonction en quelque
chose qui signifie quelque chose comme radiobutton_Change. Cette fonction doit être
exécutée si les boutons- radio changent de valeur. Écrivez le
code correspondant aux actions à exécuter selon le nouveau bouton-radio choisi.
This est une référence automatiquement crée par chaque objet qui s'identifie ainsi lui-même en appelant une méthode, (semblable à Sender employé par plusieurs autres langues). Après l'installation de la méthode comme décrit ci-dessus, et tandis que le curseur est toujours dans la méthode de l'éditeur de code, cliquez à nouveau sur le choix Method du menu et cliquez alors sur le choix «link evenement » . Une boite de dialogue s'ouvre alors et vous pouvez choisir l'objet et l'événement de l'objet qui appelleront la méthode. Dans cet exemple choisissez l'objet radiobutton1 et son événement(event) onChange . Recommencez pour les objets radiobutton2 et radiobutton3 et leur événement onChange. Cette boîte de dialogue écrit le code approprié dans CHAQUE code constructeur d'objet pour appeler votre méthode commune. Juste comme précédemment pour l'objet bouton-poussoir qui appelle sa méthode onClick(). Tout se passe comme si vous aviez écrit vous-même ce code dans chaque événement onChange de chaque bouton-radio. Avouez que c'est plus facile, tant à écrire qu'à maintenir. En outre, vous pouvez
écrire une procédure, (c'est à dire qui n'est pas une méthode de la classe) de la
même façon. Voici un exemple que vous pouvez créer et tester. Dans le concepteur de
formulaire (Menu File, New, designer) placez un bouton-poussoir et nommez-le
« pbTestWrite ». Dans l'éditeur de code (F12) , descendez en bas et
placez-vous sur « bottom », et cliquez sur l'icône « Bottom »
dans la partie gauche du treeview. A droite, au-dessous du mot endclass écrivez la
fonction suivante:
Sélectionnez le
bouton-poussoir « pbTestWrite » et choisissez l'icône de la clé
anglaise pour l 'événement onClick dans l'inspecteur de propriété . Complétez le
squelette automatique ainsi
Les parenthèses() qui suivent writeTest correspondent à l'opérateur d'Appel de procédure/fonction. Maintenant lancez le formulaire et cliquez sur le bouton que vous venez de placer : la boite de dialogue s'affiche. Bien sûr ceci est un exemple, en réalité ce serait moins de travail de saisir directement dans la méthode PBTestWrite_onClick(): msgbox("Appel d'une fonction extérieure à la classe" , "Test"). En conclusion, si
vous avez un procédure/fonction que vous vous voulez appeler à partir d'un autre dossier
tel que .PRG , .CC , .WFM Vous devez simplement devez créer une référence à
elle. Par exemple, dans l'événement onOpen d'un formulaire vous pouvez écrire...
Stingex.cc est un
fichier comprenant de nombreuses fonctions et se trouve dans le répertoire dUflp.
Ensuite, de n'importe où vous pouvez appeler la fonction appelée AllTrim() de
Stringex.cc et votre code travaillera ainsi:
Notez que le mot additive dans la ligne de commande set procedure to a été ajouté dans les versions de Windows afin que dBase sache qu'il ne faut pas effacer les autres procédures déjà chargée en mémoire. L'absence du mot additive est une des raisons les plus fréquentes de l'échec du code dans les versions de Windows parce qu'il détruit alors tous les liens vers les fichiers de procédures précédemment lancés. Depuis dBase Plus 2.5 , l'option additive est automatiquement incluse. C'est cependant une bonne habitude de continuer à le préciser. Pour plus de d'informations consulter Set Procedure dans l'aide. En espérant que ceci vous aide Si vous êtes pressés, vous pouvez copier/coller ce code dans un fichier .wfm et le lancer ou le télécharger.
** END HEADER -- do not remove this line // // Generated on 01/11/2005 parameter bModal local f f = new test_dbulletin18_proceduresForm() |