|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Bienvenue dans la deuxième partie d'une série d'articles sur CanDo. J'espère que vous avez apprécié la première partie qui comparait CanDo 2.0 avec Visual Basic 2.0 (version Windows). Je viens de recevoir Visual Basic 3.0 et j'ai hâte de l'installer et de l'essayer. Je crois également savoir qu'INOVAtronics va bientôt sortir CanDo 2.5. Je ne connais pas les nouvelles fonctionnalités qu'il offrira, à l'exception de la gestion d'AmigaDOS 3.0 et des graphismes AGA. Comme je l'ai promis, cet article traite de l'utilisation des documents CanDo en conjonction avec des variables définies par l'utilisateur, ainsi que de l'initiation à la programmation de bases de données. Tout d'abord, permettez-moi de dire que mon intention n'est pas de présenter un tutoriel détaillé du langage de programmation CanDo dans cet article. Je vous montrerai plutôt comment combiner diverses fonctionnalités de CanDo pour effectuer des tâches intéressantes et utiles. Si vous avez des questions sur la syntaxe de l'une des déclarations de mes programmes, je vous renvoie au manuel CanDo ou au système d'aide en ligne disponible dans le logiciel CanDo. Je vais vous présenter deux programmes. Le premier vous montre comment les documents et les variables définies par l'utilisateur peuvent être combinés de façon utile. La technique présentée peut être utilisée dans de nombreuses applications différentes. Le deuxième programme montre à quel point il est facile de développer des applications de base de données avec CanDo. Extraits d'un budget simple Le premier programme que je vais présenter est un extrait d'une application que je suis en train d'écrire, intitulée "SimpleBudget". Comme vous l'avez peut-être deviné, il s'agit d'une application de budget familial. En écrivant SimpleBudget, j'ai dû faire un usage intensif de documents et de variables définies par l'utilisateur. L'extrait de programme dont je vais vous parler est centré sur l'une de plusieurs cartes et ses routines de gestion. L'objectif de cette carte est de permettre à l'utilisateur d'entrer les noms des comptes financiers qu'il possède et les noms des différentes catégories dans lesquelles chaque compte est divisé. Par exemple, l'utilisateur peut avoir un compte appelé "Checking" qui est divisé en catégories telles que "Car Payment" (factures de la voiture), "Mortgage" (hypothèque), "Food" (alimentation), "Clothes" (vêtements), etc. et un autre compte appelé "Savings" (économies) avec les catégories "Johnny's Education" (éducation de John) et "Sue's Summer Trip" (voyage d'été de Sue). Chacun de ces comptes représente un compte réel dans une banque, une coopérative de crédit ou une autre institution financière. Les catégories ne sont que des divisions artificielles des comptes créées par l'utilisateur à des fins de budgétisation. La carte illustrée à la figure 1 s'appelle "Create_Accounts". Sur cette carte se trouvent plusieurs objets CanDo. Il y a deux objets TextField appelés "Field_Account" et "Field_Category". Il s'agit des deux rectangles biseautés situés en haut de l'écran, qui servent à saisir les nouveaux noms de compte et de catégorie. Directement sous ces objets se trouvent deux grandes boîtes biseautées qui sont des objets List nommés "Document_Accounts" et "Document_Categories". Elles sont utilisées pour afficher des listes de noms de comptes et de catégories. Enfin, il y a six objets TextButton. Les deux situés à gauche de l'objet List Document_Accounts sont nommés "DeleteAccount" et "SortAccount". Le premier permet à l'utilisateur de supprimer un seul compte sélectionné, tandis que le second permet au programme de trier la liste des noms de comptes. Les deux boutons de texte situés à gauche de Document_Categories sont appelés "DeleteCategory" et "SortCategory". Ils effectuent la suppression et le tri des noms de catégories. Les deux derniers boutons de texte sont situés dans le coin inférieur droit de l'écran et s'appellent "OK" et "Cancel". Le premier permet à l'utilisateur d'accepter les modifications apportées aux noms de compte et de catégorie, tandis que le second permet d'annuler les modifications. ![]() Figure 1 - carte "Create_Accounts" ![]() Figure 2 - carte "Create_Accounts" avec catégories Maintenant que l'interface utilisateur a été conçue et que nous savons comment elle doit fonctionner, il est temps de faire un peu de travail administratif. Nous devons décider comment gérer les données de l'utilisateur. C'est là que les variables flexibles définies par l'utilisateur de CanDo deviennent extrêmement utiles. Tout d'abord, il faut choisir un nom de variable primaire. J'utilise le nom "Budget", qui est controversé, mais qui donne à réfléchir. Plusieurs niveaux de noms secondaires seront suspendus à ce nom de variable primaire. La variable Budget ressemble à ceci :
Remarquez que Budget gère un tableau dynamique (représenté par les parenthèses) de noms de comptes et un tableau dynamique de noms de catégories pour chaque compte, ainsi que d'autres types d'informations. La structure de données de Budget est assez longue et n'est pas présentée dans son intégralité. La carte Create_Accounts n'utilise que les huit premiers éléments de la structure. Les autres éléments de la structure de données du budget sont utilisés par d'autres cartes de SimpleBudget et ne sont pas abordés dans cet article. L'avantage de stocker toutes les données dans une structure définie par l'utilisateur, telle que présentée ci-dessus, est qu'il est très simple de sauvegarder et de récupérer les données dans un fichier disque. Par exemple, si vous voulez sauvegarder la structure de données Budget, vous pouvez lancer la commande suivante dans le code CanDo :
Vous pouvez tout aussi facilement récupérer ces données dans la variable Budget avec cette commande :
Cette fonctionnalité rend CanDo extrêmement utile pour le développement d'applications. Il n'est pas nécessaire d'avoir des boucles dans des boucles dans des boucles autour d'une commande PRINT ou WRITE comme c'est le cas en BASIC. Plus d'informations sur l'interface utilisateur Le Listing 1 présente toutes les informations relatives à la carte Create_Accounts. Le listing a été généré par un utilitaire fourni avec CanDo, et les numéros de ligne ont été ajoutés à l'aide de la commande Shell "TYPE filename OPT N". Lorsque vous créez l'interface utilisateur dont nous avons parlé plus haut, vous pouvez utiliser les informations de ce listing pour vous aider à mettre en page l'interface exactement comme elle apparaît sur la figure 1. Les informations relatives à la fenêtre de la carte sont indiquées aux lignes 64 à 77. Toutes les informations nécessaires à la disposition des différents objets sont présentées dans les sections Définition du listing. Remarquez aux lignes 270-299 qu'il y a deux objets TextMenu attachés à la carte. Il s'agit de menus déroulants. Vous n'avez pas besoin d'ajouter ces objets si vous ne le souhaitez pas. Ils offrent simplement une alternative aux boutons textuels "OK" et "Cancel".
Ajout de fonctionnalités Une fois l'interface définie dans CanDo, il est temps d'y ajouter des fonctionnalités en ajoutant du code. Le code peut être ajouté sous forme de routines d'événements ou de routines globales. Les routines d'événement sont exécutées lorsqu'un événement survient sur un objet ou une carte. Les routines globales sont des sous-programmes qui peuvent être appelés à partir de routines d'événement ou d'autres routines globales et sont généralement utilisées lorsque certaines tâches doivent être accomplies à partir de plus d'une routine. Si le programmeur n'ajoute aucun code à une routine d'événement, rien ne se passe lorsque l'événement se produit. Commençons par la carte Create_Accounts. Elle possède deux routines d'événement : BeforeAttachment et AfterAttachment (lignes 34-52 et 53-63). La première est exécutée juste avant l'affichage d'une carte à l'écran et est normalement utilisée pour attribuer des valeurs aux variables utilisées par la carte. La seconde est exécutée après l'affichage de la carte et sert normalement à imprimer du texte et des graphismes sur la carte. La routine BeforeAttachment est extrêmement importante pour la carte Create_Accounts. Elle transfère les informations stockées dans la variable Budget vers plusieurs documents. Dans CanDo, les documents sont comme des chaînes de caractères de longueur variable, sauf que des opérations sophistiquées peuvent être effectuées sur les documents. De plus, un document peut être attaché à un objet List de sorte que lorsque le document change, l'objet List est automatiquement mis à jour. L'objet List Document_Accounts a le document Accounts attaché à lui (ligne 86) ; l'objet List Document_Categories a le document Categories attaché à lui (ligne 202). Ces affectations d'attachement sont effectuées lors de la conception des objets List. Comme il existe un tableau de noms de catégories pour chaque compte, un mécanisme est nécessaire pour créer une multitude de documents avec des noms différents, un pour chaque compte. Une fois ces documents créés, le texte de ces documents peut être déplacé dans le document Categories lorsque l'utilisateur sélectionne différents comptes. Ceci est nécessaire car le nom du document attaché à un objet List ne peut pas changer, mais le texte du document attaché peut être modifié. Par conséquent, j'ai décidé de créer, en substance, un tableau de documents. Les documents ne peuvent pas réellement faire partie d'un tableau ; il faut donc faire preuve d'un peu d'ingéniosité. Comme les documents sont référencés par des variables de type chaîne, il est possible d'utiliser l'opérateur de concaténation de chaînes pour créer le tableau de documents. Chaque document du tableau aura un nom de la forme "Categories.AccountName" où "AccountName" peut être n'importe quel nom de compte utilisateur. Ainsi, si l'utilisateur possède trois comptes nommés "Checking" (compte de chèques), "Savings" (économies) et "MutualFund" (fonds communs), trois documents seront créés sous les noms "Categories.Checking", "Categories.Savings" et "Categories.MutualFund" pour stocker les trois listes de noms de catégories pour les comptes. La routine BeforeAttachment de la carte Create_Accounts est utilisée pour déplacer les noms actuels des comptes et des catégories dans la variable Budget vers des documents nommés de manière appropriée. L'utilisateur peut ensuite manipuler les documents à sa guise. Une fois que l'utilisateur a terminé de modifier les comptes et les catégories, il peut sélectionner le bouton de texte "OK" ou le menu de texte "OK", auquel cas les informations contenues dans les documents modifiés seront replacées dans la variable Budget pour être enregistrées ultérieurement à l'aide de la commande "SaveVariable". Cependant, si l'utilisateur sélectionne le bouton de texte "Annuler" ou le menu de texte "Annuler", le contenu du document n'est pas transféré dans la variable Budget, laissant ainsi les valeurs originales intactes. Par conséquent, les documents servent de zones de stockage temporaire pour les nouvelles entrées. Le code de BeforeAttachment est assez simple. Il définit le document de travail comme Accounts, l'efface, détermine le nombre de comptes dans la variable Budget, puis utilise une boucle intégrée pour construire le document Accounts et chacun des documents Categories.AccountName. Chaque nom est inséré dans le document approprié à l'aide de la commande "Type" (lignes 40 et 46). Remarquez le paramètre "NEWLINE" à la fin de cette commande. Il permet au pointeur du document d'avancer à la ligne suivante. Sans ce paramètre, tous les noms apparaîtraient sur la même ligne. Routines globales Avant d'examiner le code du reste des routines d'événement de la carte Create_Accounts, jetons un coup d'oeil aux sept routines de gestion globales des listes 2 à 8. Cela vous aidera à mieux comprendre ce que font les routines d'événements lorsqu'elles appellent l'une de ces routines globales. Le Listing 2 est la routine d'annulation des comptes. Elle n'est appelée que lorsque l'élément de menu "Annuler" est sélectionné (le bouton "Annuler" a le même code que la routine d'événement elle-même. C'est juste pour vous montrer qu'il existe différentes façons d'accomplir la même tâche). Cette routine globale dirige simplement le programme vers une carte appelée "Intro". Il s'agit d'une autre carte de l'application SimpleBudget qui n'est pas abordée dans cet article. Jetez un coup d'oeil à la ligne 3. CanDo ne permet pas à un commentaire de résider seul sur une ligne ; il doit suivre une commande. Par conséquent, la commande "Nop" (qui signifie "No Operation") est utilisée pour précéder le commentaire. C'est quelque chose que j'aimerais voir corrigé dans une prochaine version de CanDo.
Le Listing 3 est la routine "Display Categories". Elle est utilisée pour déplacer le document Categories.AccountName approprié dans le document Categories afin qu'il soit affiché dans l'objet List Document_Categories. En général, cette routine est appelée lorsque l'utilisateur sélectionne un nom de compte dans l'objet Document_Accounts avec le bouton gauche de la souris. Comme il ne peut y avoir qu'un seul document de travail à la fois, cette routine affecte d'abord le nom du document de travail actuel, stocké dans la variable système DocumentName, à la variable CurrentDocument. Ensuite, le document de travail est changé en Accounts et le nom qui est stocké dans la ligne actuellement sélectionnée de Document_Comptes est affecté à la variable ChosenAccount. La Ligne est une variable système utilisée pour stocker le texte de la ligne actuellement sélectionnée du document de travail en cours. Si la valeur de ChosenAccount n'est pas NULL, le document de travail est modifié en fonction du Categories.AccountName approprié à l'aide de la commande "WorkWithDocument". Cette commande créera le document s'il n'existe pas déjà.
Ensuite, le texte de ce document, s'il y en a un, est attribué à la variable chaîne NewCategoryDocument. Le document de travail est changé en Categories (celui qui est attaché à l'objet Document_Categories), vidé de son texte actuel, puis le texte de NewCategoryDocument lui est attribué. À ce stade, les catégories du compte sélectionné seront affichées. Étant donné que les documents Accounts et Categories ont toujours une ligne vide comme dernière ligne du document (utilisée comme point d'insertion pour un nom nouvellement saisi), il est possible que ChosenAccount soit NULL. Si c'est le cas, le document Categories est effacé car il n'y a pas de catégories pour ce nom de compte vide. Enfin, le document de travail original est réinitialisé. Le Listing 4 est la routine "OK Accounts". Elle est exécutée lorsque le bouton "OK" ou l'élément de menu "OK" est sélectionné par l'utilisateur. Elle est très similaire à la routine BeforeAttachment discutée précédemment, sauf qu'elle déplace toutes les informations des documents vers la variable Budget plutôt que l'inverse. Le nombre de comptes et de catégories dans chaque document est déterminé en prenant le nombre de lignes dans le document et en soustrayant un (lignes 5 et 13). L'unité est soustraite parce qu'il y a toujours une ligne blanche à la fin du document. La variable système LinesInDocument contient toujours le nombre de lignes du document de travail actuel. Les noms de compte et de catégorie sont extraits du document en déplaçant le curseur au début du document approprié (lignes 4 et 12) et en utilisant la variable système "TheLine" comme décrit précédemment. Le curseur du document est ensuite déplacé dans le document, une ligne à la fois (lignes 23 et 27), en extrayant les noms au fur et à mesure.
Le Listing 5 est la routine "Print Num Accounts". Elle met à jour l'affichage situé en haut de la carte Create_Accounts qui indique le nombre de comptes dans l'objet Document_Accounts. Pour ce faire, elle efface le nombre actuel sur la carte et affiche le nouveau nombre.
Le Listing 6 est la routine "Print Num Cats". Elle est identique à Print Num Accounts sauf qu'elle met à jour le nombre de catégories affichées dans l'objet Document_Categories.
Le Listing 7 est la routine "Sort the Document". Elle trie le document de travail actuel ; par conséquent, le document de travail doit être défini avant d'appeler cette routine. Le corps principal de la routine de tri (lignes 5 à 9) n'est exécuté que si le document contient au moins une ligne non vierge. La commande SortDocument est utilisée pour effectuer le tri et l'option "NOCASE" est utilisée pour rendre le tri non sensible à la casse. Une fois le tri terminé, la première ligne sera toujours la ligne d'insertion vide qui se trouve normalement à la fin du document. Le curseur du document doit donc être déplacé jusqu'à la première ligne du document et cette ligne doit être supprimée. Le curseur est ensuite déplacé à la fin du document et la commande NewLine est émise afin de laisser le document avec une ligne vierge à la fin.
Le Listing 8 est la routine "Update Categories". Elle déplace le contenu du document Categories dans le document Categories.AccountName approprié. Cette opération est normalement effectuée chaque fois que l'utilisateur sélectionne un nom de compte différent afin de s'assurer que les modifications apportées aux catégories du compte précédemment sélectionné sont correctement enregistrées. Cette routine est très similaire à la routine Display Categories.
Routines d'événements Il est maintenant temps d'examiner les autres routines d'événements de la carte Create_Accounts présentée dans le Listing 1. J'ai déjà parlé de la routine BeforeAttachment ; examinons maintenant la routine AfterAttachment (lignes 53-63). Cette routine affiche un texte à l'écran et imprime le nombre de comptes et de catégories via des routines globales. Enfin, elle active l'objet Field_Account, anticipant que la première chose que l'utilisateur voudra faire sera d'ajouter un nom de compte. À ce stade, l'application attendra simplement que l'utilisateur fasse quelque chose. Le code qui est exécuté dépend de l'action de l'utilisateur. Jetons un coup d'oeil à ces possibilités. L'objet Field_Account est associé à deux événements : OnClick (lignes 113-119) et OnRelease (lignes 106-112). La routine OnClick s'exécute lorsque l'utilisateur déplace le pointeur de la souris sur le champ et clique sur le bouton gauche de la souris. Cette routine définit le document de travail sur Accounts, déplace le curseur sur la dernière ligne de ce document, puis met à jour les catégories. La routine OnRelease s'exécute lorsque l'utilisateur appuie sur la touche "Entrée" alors qu'il se trouve dans le champ. Elle récupère le texte du champ, l'insère dans le document de travail, qui a été défini comme Comptes dans la routine OnClick, efface le champ, le réactive, puis met à jour le nombre d'Accounts. À ce stade, le nouveau nom de compte saisi par l'utilisateur sera affiché dans la liste des comptes de l'objet liste Document_Accounts. L'objet Field_Category possède également une routine d'événement OnClick (lignes 265-268) et une routine d'événement OnRelease (lignes 256-264). Ces routines exécutent des fonctions similaires aux routines OnClick et OnRelease de l'objet Field_Account. L'objet Document_Accounts est également associé aux routines OnClick (lignes 88-92) et OnRelease (lignes 93-95). Lorsque l'utilisateur clique sur un nom de compte dans cet objet, les catégories actuelles sont mises à jour, les catégories du compte choisi sont affichées et le nombre de catégories est mis à jour. La routine OnRelease active simplement l'objet Field_Category en anticipant que l'utilisateur voudra ajouter de nouvelles catégories au compte choisi. L'objet Document_Categories ne possède qu'une routine OnClick (lignes 204-206). Elle définit le document de travail à Categories. Le bouton DeleteAccount n'est associé qu'à une routine OnRelease (lignes 163-174). Lorsque l'utilisateur appuie et relâche le bouton gauche de la souris alors que le pointeur se trouve sur cet objet, cette routine s'exécute. Le fait d'en faire une routine OnRelease plutôt qu'une routine OnClick permet à l'utilisateur de changer d'avis sur la sélection après avoir cliqué sur le bouton de la souris en déplaçant le pointeur hors de l'objet avant de relâcher le bouton de la souris. La routine définit le document de travail approprié, affecte la variable DeletedAccount au nom du compte choisi, supprime le nom du compte, puis met à jour le nombre de comptes. Comme les catégories associées au compte supprimé ne sont plus valides, la routine efface le document Categories.AccountName associé au compte supprimé. Enfin, les informations relatives à la catégorie sont mises à jour. Le bouton DeleteCategory possède également une routine OnRelease (lignes 219-226). Elle supprime la catégorie choisie et met à jour les informations sur la catégorie, laissant Field_Category activé. Le bouton SortAccount possède une routine OnRelease (lignes 187-192) qui met à jour la liste des catégories actuelles, fait de Accounts le document de travail, puis appelle la routine globale "Sort the Document". N'oubliez pas que le document de travail doit être défini avant d'appeler la routine de tri. Enfin, l'objet Field_Account est activé. Le bouton SortCategory possède une routine OnRelease (lignes 239-245) qui fonctionne de manière similaire à la routine SortAccount OnRelease. Enfin, la routine OnRelease (lignes 132-134) pour le bouton "OK" et la routine Occurred (lignes 281-283) pour l'élément de menu "OK" appellent simplement la routine globale "OK Accounts" décrite précédemment. Les routines équivalentes pour le bouton "Cancel" (lignes 147-150) et l'élément de menu "Cancel" (lignes 296-298) vont dans une autre carte nommée "Intro" (non traitée dans cet article). J'espère que cet extrait de programme CanDo vous a permis de voir à quel point les variables définies par l'utilisateur, associées à des pseudo-tableaux de documents, peuvent être utiles pour la programmation d'applications. De nombreux types d'applications différentes pourraient bénéficier des techniques discutées. Tournons maintenant notre attention vers certaines des caractéristiques de CanDo qui facilitent la programmation des bases de données. Programmation de la base de données La figure 3 montre l'interface utilisateur d'une application de base de données simple. Le nom de la carte sur laquelle l'interface a été créée est "DataEntry" ; le programme est présenté dans le Listing 9. ![]() Figure 3 - carte "DataEntry"
Remarquez dans le Listing 9 que les noms de tous les objets TextField ont quelque chose en commun : ils commencent tous par un point. Ils sont nommés ".Name" (.nom), ".Address" (.adresse), ".City" (.ville), ".State" (.état) et ".ZipCode" (.codepostal). Lorsque les noms de ces champs commencent par un point, certaines commandes spéciales sont disponibles pour déplacer les données des champs vers des variables définies par l'utilisateur et vice versa. Le principal nom de variable utilisé dans le programme est "Address". Sa structure est la suivante :
Il s'agit d'un tableau dynamique d'adresses. Remarquez que tous les noms des extensions correspondent aux noms des objets TextField de la carte DataEntry. Cela est nécessaire pour que les commandes spéciales de la base de données fonctionnent correctement (cependant, c'est essentiellement un point discutable puisque les variables définies par l'utilisateur ne doivent pas être prédéfinies). Chaque objet TextField possède une routine OnRelease qui active simplement le champ suivant à l'écran. Ainsi, si l'utilisateur tape un nom dans le champ ".Name" et appuie sur "Entrée", le champ ".Address" sera activé et ainsi de suite. Cela permet à l'utilisateur de saisir facilement les données d'un enregistrement sans avoir à activer chaque champ par un clic de souris. Lorsque l'utilisateur appuie sur la touche "Entrée" dans le champ ".ZipCode", le champ ".Name" est réactivé. Les six objets TextButton sont également associés à des routines OnRelease. Examinons-les dans l'ordre. Le bouton "Add" est utilisé pour ajouter un autre enregistrement à la variable "Address". La routine OnRelease (lignes 129 à 134) utilise la variable système GetDBObjects. Cette variable, lorsqu'elle est affectée à l'enregistrement actuel de la variable "Address", qui est numérotée "CurIndex", déplace les valeurs de tous les champs spécialement nommés de la carte DataEntry dans la variable "Address" (sympa, non ?). Cela permet, en substance, de stocker l'enregistrement actuellement affiché. Ensuite, CurIndex est incrémenté, un nouvel enregistrement vide est inséré dans le tableau "Address" à l'aide de la commande "InsertArrayEntry", et la routine globale "Show Record" est appelée pour afficher à l'écran cet enregistrement vide nouvellement inséré, prêt à être saisi par l'utilisateur. Le Listing 10 présente la routine globale "Show Record". Elle utilise la commande SetDBObjects. Cette commande extrait l'enregistrement actuel de la variable "Address" et affiche les composants de l'enregistrement dans les champs appropriés de la carte. Ensuite, le titre de la fenêtre de la carte est modifié pour refléter le nouveau numéro d'enregistrement, et le champ ".Name" est activé, dans l'attente d'une saisie supplémentaire de l'utilisateur.
Revenons maintenant au Listing 9 et au bouton "Delete" (supprimer). La routine OnRelease (lignes 147-153) de ce bouton supprime d'abord l'enregistrement en cours à l'aide de la commande DeleteArrayIndex. Si l'enregistrement supprimé est le dernier de la base de données, alors le type de variable (obtenu avec la fonction VarType) de Address[CurIndex] sera désormais égal à "Nothing" (rien) puisqu'il n'existe pas. Si c'est le cas, la fonction LastArrayIndex est utilisée pour déterminer l'indice réel du dernier enregistrement dans la variable "Address". Cette valeur est affectée à CurIndex. Enfin, cet enregistrement est affiché. La routine OnRelease du bouton "Prev" (lignes 166-173) stocke l'enregistrement actuel, détermine le numéro de l'enregistrement précédent à l'aide de la fonction PreviousArrayIndex, et affiche cet enregistrement. S'il n'y a pas d'enregistrement précédent, ce qui signifie que l'enregistrement actuellement affiché est le premier du tableau, la variable système SearchFound aura la valeur "FALSE" (FAUX) lorsque la fonction PreviousArrayIndex sera exécutée. Dans ce cas, l'enregistrement actuel est défini comme le dernier enregistrement de la base de données. La routine OnRelease du bouton "Next" (lignes 186-193) fonctionne de la même manière que la routine du bouton "Prev", sauf qu'elle effectue une recherche en avant dans le tableau en utilisant la fonction NextArrayIndex. S'il n'y a pas d'enregistrement suivant, alors le premier enregistrement est affiché. Ceci, en combinaison avec le bouclage du premier au dernier du bouton "Prev", rend la base de données circulaire plutôt que linéaire. C'est comme autoriser un écart Roi-As-Deux au rami. La routine OnRelease du bouton "Load" (lignes 206-214) supprime toutes les données de la variable "Address" à l'aide de la commande Dispose. Elle utilise ensuite la fonction AskForFilename pour afficher une requête de fichier à l'écran. Une fois que l'utilisateur a sélectionné un nom de fichier et fermé la requête, le nom du fichier est renvoyé à la variable "FN". Si ce fichier existe, il est chargé dans la variable "Address" à l'aide de la fonction LoadVariable, et le premier enregistrement est affiché. Enfin, la routine OnRelease du bouton "Save" (lignes 227-231) stocke l'enregistrement actuellement affiché, obtient un nom de fichier de la part de l'utilisateur, puis utilise la commande SaveVariable pour enregistrer les données de la variable "Address" dans le fichier. Bien entendu, ce programme de base de données est très simple et d'autres codes doivent être ajoutés pour en faire un programme utilisable. Cependant, mon intention est de vous aider à vous familiariser avec l'utilisation des commandes et fonctions spéciales de la base de données. Commentaires de conclusion Eh bien, c'est suffisant, vous ne pensez pas ? Vous êtes probablement fatigué de lire, et je sais que je suis fatigué de taper sur ces fichues touches de clavier de mon ordinateur. J'espère que cet article vous a aidé à apprécier les outils inestimables disponibles dans CanDo pour écrire des logiciels pour Amiga.
|