image gauche logo Clairinfo image droite

Version du : 28/01/2007

TUTORIAL PARADOX POUR WINDOWS

Leçon 5 - La fiche menu, ses événements

Introduction :

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.

Continuons avec notre fiche Menu.fsl :

Nous allons maintenant finir de coder les principales méthodes de notre fiche Menu.

Définir des variables globales au niveau fiche :

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.

Déclarer les méthodes de bibliothèque que nous allons utiliser dans 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.

La méthode Open de la fiche :

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 !

La méthode Close de la fiche :

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

Coder les boutons d'accès de notre fiche menu :

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"

Un exemple de menu surgissant :

- 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