![]() |
![]() |
![]() |
Les leçons précédentes nous ont permis de définir un schéma des données à gérer, nous avons construit les tables dans Paradox puis nous avons constuit notre première fiche Paradox pour constituer le menu de notre application. Nous avons constitué une bibliothèque centralisée de méthodes utiles que nous allons maintenant pouvoir utiliser dans toutes nos fiches.
Nous allons maintenant finir de coder les principales méthodes de notre fiche Menu.
Les variables peuvent se déclarer à différents endroits (globalement pour la fiche, dans une bibliothèque ce qui nécessite d'utiliser des méthodes d'accès, dans une méthode particulière et dans tous les conteneurs d'une fiche : page, boite etc...). Déclarer notre variable au niveau fiche nous évite de le faire dans chaque méthode appelant notre bibliothèque. Les variables globales sont à utiliser avec parcimonie car elles compliquent le déboggage.
- Ouvrez la fiche Menu.fsl en conception
- Menu Outils / Explorateur d'objets
(dans les versions antérieurs de Paradox il faut sélectionner
la fiche en cliquant sur sa barre de titre lorsqu'elle n'est pas maximisée
puis bouton droit de la souris , demander méthode puis choisir open)
- Cliquez sur l'onglet méthode et double-cliquez sur Var
- Saisissez le code suivant puis fermer la fenêtre de code en vérifiant
au préalable votre syntaxe par <F9>:
Var Lib Library Ap Application endVar |
Ce code déclare au niveau fiche une variable nommée Lib de type Library qui nous permettra d'appeler les méthodes de notre bibliothèque ainsi qu'une variable nommée Ap de type Application qui nous permettra de définir le titre de notre application et la taille de notre application. Ces variables seront accessibles à tous les objets de la fiche.
- Menu Outils / Explorateur d'objets
- Cliquez sur l'onglet méthode et double-cliquez sur Uses
- Saisissez le code suivant puis fermer la fenêtre de code en vérifiant
au préalable votre syntaxe par <F9>:
Uses ObjectPal OpenForm() ConstMenu(Const NomEtat String) endUses |
Maintenant la fiche sait comment compiler ces appels à des routines
externes.
Cette fiche Menu est particulière car étant la première lancée par notre application il lui revient de définir un peu le cadre graphique de notre application. Concrètement c'est elle qui va définir le titre de notre application , la taille de celle-ci et son menu général. On peut utiliser la méthode open ou éventuellement la méthode init (apparue avec Paradox 7-16 bit) pour cela.
- Menu Outils / Explorateur d'objets
- Cliquez sur l'onglet événement et double-cliquez sur open
- saisissez le code suivant :
method open(var eventInfo Event) Var sysUtil DynArray[ ] AnyType EndVar if eventInfo.isPreFilter() then ;// This code executes for each object on the form else ;// This code executes only for the form ;// Titre de l'application Ap.SetTitle("Gestion Commerciale") ;// Positionner le bureau en fonction de la résolution sysInfo(sysUtil) switch case sysutil["ScreenWidth"]=640 : MsgStop("Attention !","Ce programme nécessite une résolution de 800x600 minimum...") exit() case sysutil["ScreenWidth"]=800 : Ap.Maximize() case sysutil["ScreenWidth"]=1024 : Ap.SetPosition(1500,1000,12000,9000) endswitch ;// Appel de notre routine standard d'ouverture de fiche Lib.open(":App:Lib") Lib.OpenForm() Lib.close() endIf endMethod |
Nous déclarons 1 variable sysUtil de type tableau dynamique de type quelconque qui va nous permettre de récupérer toutes les informations de configuration du poste client dont la résolution écran que nous allons analyser pour adapter la taille de notre application.
Le code suivant est un test classique en programmation pour traiter différent cas possibles : le switch case... endswitch. Si la résolution écran est de 640 en largeur nous envoyons un message d'erreur signalant que notre application nécessite une résolution minimum de 800 x 600, puis, grâce à la commande exit(), nous quittons complètement Paradox ou le runtime pour revenir à windows. Si la résolution est supérieure nous adaptons la taille de notre application en conséquence.
Enfin nous appelons notre routine centralisée en bibliothèque d'ouverture de fiche qui va notamment construire notre menu standard.
L'avantage de procéder ainsi apparaitra plus clairement quand votre application aura 200 fiches et que vous voudrez modifier le menu de votre application !
Nous souhaitons à la sortie de l'application demander à l'utilisateur s'il souhaite rester dans Paradox ou s'il préfère revenir à windows. La méthode close est un bon endroit pour placer ce code. Dans une application réelle il conviendrait de protéger les tables par mot de passe donc en cryptant les données et d'offrir ici la possibilité de rester dans Paradox avec les tables en lecture seule afin que l'utilsateur puisse faire ses propres requêtes sans risque pour ses données. Un écran de connexion serait alors nécessaire pour saisir le code utilisateur et le mot de passe afin d'identifier la personne et de lui ouvrir ses droits.
- Menu Outils / Explorateur d'objets
- Cliquez sur l'onglet événement et double-cliquez sur close
- saisissez le code suivant :
method close(var eventInfo Event) if eventInfo.isPreFilter() then ;// This code executes for each object on the form else ;// This code executes only for the form ;// désactiver le comportement par défaut DisableDefault ;// Quitter complètement l'application ? if MsgQuestion("Sortie de l'application :","Restez dans Paradox ?")="Yes" then ShowToolBar() Ap.SetTitle("Paradox pour Windows") else exit() endif endif endMethod |
Nous pouvons enfin très simplement compléter le code de nos boutons même si les fiches associées n'existent pas encore.
- Sélectionnez le bouton Client et modifier la méthode PushButton :
method pushButton(var eventInfo Event) Var F Form EndVar Pousoir.Color=Gray F.open(":App:Client") endMethod |
Ce code demande donc d'ouvrir une fiche qui s'appelle Client et que nous allons construire par la suite. Vous pouvez également bien que ce ne soit pas ici nécessaire modifier le nom du bouton par exemple en BtClient. Ce n'est pas nécessaire car nous ne prévoyons pas de modifier notre bouton par code.
- Faites pareil avec le bouton Produits en demandant l'ouverture de la fiche "Produit" puis avec le bouton Factures en demandant l'ouverture de la fiche "Facture"
- Occupons nous maintenant du bouton Editions. Nous voulons faire apparaître un sous-menu affichant les différents choix :
method pushButton(var eventInfo Event) Var Pm PopUpMenu F Form sChoix String EndVar Pousoir.Color=Gray ;// Construction du menu Pm.AddStaticText("Menu des éditions :") Pm.AddSeparator() Pm.AddText("Edition des clients") Pm.AddText("Edition des produits") Pm.AddText("Edition des factures") sChoix=Pm.Show() if sChoix="" then return endif ;// Traitement du choix de menu switch case sChoix="Edition des clients" : F.open(":App:EdClient") case sChoix="Edition des produits" : F.open(":App:EdProd") case sChoix="Edition des factures" : F.open(":App:EdFact") endswitch endMethod |
Rien de sorcier maintenant pour vous, admirez la simplicité et la clarté du code ! Il nous faudra bien entendu construire les fiches nécessaires, des fiches qui nous permettront de laisser l'utilisateur choisir la forme de son édition et les critères qu'il désire...
- Le bouton Autres travaux devra offrir de même un petit menu surgissant offrant la fonctionnalité suivante :
Utilitaire d'épuration des factures lançant la fiche "EpurFact"
Accès aux derniers N°pièces lançant la fiche "NoPiece"
Bon dans une application réelle d'autres utilitaires sont incontournables (Réindexation des tables, Changement d'un CodeClient, d'un CodeProduit, Accès direct aux tables pour maintenance avec le runtime etc...). Exemple tout bête les taux de TVA devraient être paramétrables par l'utilisateur. Ce tutorial introduira peut-être par la suite de tels exemples.
- Reste le bouton Quitter et là attention... le code est plutôt compliqué !
method pushButton(var eventInfo Event) Pousoir.Color=Gray close() endMethod |
Voilà notre menu est terminé, nous allons pouvoir aborder la création des fiches spécialisées...
Haut de page Précédent Suivant
© Copyright 2000-2007 , Clairinfo ® , http://www.clairinfo.fr