4D v16

Événements

Accueil

 
4D v16
Événements

Événements    


 

 

En complément des manipulations expliquées dans la vidéo, il faut noter que :

Tous les objets ne disposent pas des mêmes événements : il n’est pas possible par exemple de cocher l’événement "Sur données modifiées" pour un objet bouton, car on ne peut pas "saisir" son contenu (son titre).

voici quelques exemples :

  • Sur début survol
    Lorsque la souris "entre dans l’espace aérien" d’un objet.
  • Sur données modifiées
    A la sortie d’un champ ou un variable dont le contenu a été modifié.
    On l’utilise principalement pour des contrôles de saisie, formatage (majuscules, minuscules), recherches, recalculs
  • Sur clic
    Lors du clic sur un objet (principalement les boutons, popup, menus, ...)
    Peut également être utilisé sur des objets saisissables
  • Sur gain focus
    L’objet vient de recevoir le focus (on a cliqué dessus, on est arrivé avec la touche tabulation ou on y est allé par programmation)
  • Sur chargement
    Juste avant qu’un formulaire soit affiché à l’écran ou utilisé lors d’une impression.
    C’est lors de cet événement qu’on effectue en général les initialisations.
  • Sur impression corps
    Lors de l’impression d’un enregistrement.
    Permet par exemple de valoriser des variables de cumul, concaténation...

Cette liste vous permet de comprendre cette notion d’événement. Reportez-vous à la documentation de 4D pour la description complète des événements.

Une précision importante que se posent toujours les débutants : "Dois- je cocher les événements du formulaire ou les événements des objets ?"
Tout dépend de l’endroit où vous allez écrire votre méthode.
La méthode formulaire ne devrait en théorie contenir que ce qui concerne le traitement du formulaire en globalité :

  • redimensionnement
  • appel extérieur
  • affichage ou masquage d’objets
  • ...

et les méthodes objets ce qui est spécifique à chaque objet (bouton, champ...). Ça reste un principe, mais les raisons peuvent être multiples pour en justifier la transgression.

Retenez ceci :

  • Méthode formulaire : Centralisé, traitement global, facile à maintenir.
    Risque d’être exécuté plus que nécessaire
  • Méthode objet : Spécifique, adapté, exécuté seulement quand c’est nécessaire.
    Permet facilement le portage d’un objet par simple Copier-Coller (surtout si vous utilisez les pointeurs).
    Oblige à dupliquer la méthode ou l’appel de méthode dans chacun des objets.

Il arrive qu’on déplace certains traitements sur la méthode formulaire.

Par exemple vous devez recalculer une valeur en fonction de 10 paramètres saisissables. À chaque modification de paramètre, il est nécessaire de refaire le calcul. Plutôt que de mettre la formule (ou appel de méthode) dans chacun des 10 champs paramètres, il est possible de déplacer ce calcul dans la méthode formulaire.

Dans ce cas, c’est plus simple et centralisé, par contre, il est fort probable que le recalcul sera effectué plus souvent que nécessaire, notamment lors de la modification d’un zone qui n’entre pas dans le calcul final. (NB : 4D permet de savoir quel objet a été modifié, on peut donc conditionner le calcul en fonction de cette information).

Il est important en ce qui concerne les événements de bien en connaître l'ordre d'exécution. Par exemple pour un bouton, les événements sont exécutés dans l’ordre suivant :

  • sur début survol
  • sur survol
  • sur gain focus
  • sur clic (éventuellement)
  • sur fin survol
  • sur perte focus

Un champ ou une variable sur laquelle on clique :

  • sur début survol
  • sur survol
  • sur gain focus
  • sur données modifiées (éventuellement)
  • sur perte focus
  • sur fin survol

Pour gagner du temps dans l'écriture de votre code et le fiabiliser, pensez à paramétrer les macros (fichier "macros.xml").

Vous pourrez par exemple créer une macro qui écrit à votre place le code suivant lorsque vous tapez "$evt" dans votre méthode :

 $evt:=Evenement formulaire
 Au cas ou
    :($evt=Sur données modifiées)
 
    :($evt=Sur chargement)
 
 Fin de cas

Pendant votre phase d'apprentissage de 4D je vous conseille de mettre vos méthodes dans vos objets, vous aurez plus de souplesse pour corriger. Ensuite, commencez par utiliser des appels de méthodes génériques et enfin quand tout fonctionne correctement, voyez ce que vous pouvez déplacer de vos méthodes objets vers votre méthode formulaire ou méthodes projets et enfin passer des pointeurs.

Pour aller plus loin :
Analysez bien le fonctionnement des événements car ils vous permettront de comprendre précisément à quel moment s'exécute votre programmation. Vous y trouverez aussi de nombreuses idées pour des mises en oeuvre performantes en utilisant par exemple les événements :

  • sur glisser
  • sur déposer
  • sur nouvelle sélection
  • les trois ’sur survol’
et bien évidemment les grands classiques
  • sur clic
  • sur double clic
  • sur clic long
  • etc...

Bonjour,

dans cette vidéo nous allons apprendre le fonctionnement des événements et leur programmation.

Distinguons dans un premier temps :

  • les événements "formulaires" qui figurent dans les propriétés du formulaire
  • des événements "moteur" qui sont définis dans les propriétés d'une table, les événement moteurs étant associés aux triggers c'est à dire à la programmation qui va être exécutée lorsque les événements surviendront.

Les événements formulaires ne se déclenchent que lorsqu'un formulaire est utilisé (à l’écran ou à l’impression), donc lorsque l’interface est manipulée par un utilisateur (clic, glisser-déposer, sélection d’un menu, frappe clavier...).

Les événements moteur ne concernent que les 3 actions effectuées sur les données :

  • création
  • modification
  • suppression.

Ces 3 événements sont interceptés par le moteur de données. Cette remarque est importante car en Client/Serveur, le moteur de données tourne sur le serveur. Vous ne verrez donc jamais un événement moteur se réaliser sur votre poste client. Vous ne pourrez donc pas le tracer non plus à partir d’un poste client. Nous reviendrons ultérieurement sur les événements moteurs.

Dans un premier temps, nous allons nous amuser un peu et créer un bouton un peu "spécial".

  • allons en page 4 du formulaire Navigation, page des préférences
  • on trace un bouton
  • on modifie les propriétés comme ceci :
  •      - le Nom du bouton sera bSpecial
  •      - seul l’événement "Sur début survol" sera coché
  • et on édite la méthode du bouton (ALT-Clic sur le bouton)

vous y recopiez ce code-ci :

  //Emplacement de la souris au moment du déclenchement de la méthode
 POSITION SOURIS($Souris_H;$Souris_V;$BoutonSouris//A quelle position se trouve l'objet dans la fenêtre
 OBJET LIRE COORDONNEES(bSpecial;$Obj_G;$Obj_H;$Obj_D;$Obj_B)
 
  //On calcule le centre de l'objet
 $Centre_H:=$Obj_G+(($Obj_D-$Obj_G)/2)
 $Centre_V:=$Obj_H+(($Obj_B-$Obj_H)/2)
 
 $Decalage:=10 //Prévoir un décalage complémentaire de x pixels
 
 Si($Souris_H<$Centre_H//si la souris est à gauche du centre
    $H:=$Souris_H-$Obj_G+$Decalage  //déplacer l'objet à droite
 Sinon //la souris est à droite du centre
    $H:=-($Obj_D-$Souris_H+$Decalage//déplacer l'objet à gauche
 Fin de si

 Si($Souris_V<$Centre_V//si la souris est au dessus du centre
    $B:=$Souris_V-$Obj_H+$Decalage  //décaler vers le bas
 Sinon //la souris est en dessous du centre
    $B:=-($Obj_B-$Souris_V+$Decalage//décaler vers le haut
 Fin de si
 
  //Déplacer le bouton en fonction des informations définies ci-dessus
 OBJET DEPLACER(bSpecial;$H;$B)

qui signifie :

  • qu'on calculera la position de la souris
  • la position de l'objet (donc le bouton) pour en déterminer son centre
  • on prévoira de décaler l'objet d'un certain nombre de pixels
  • et ensuite on va calculer où se trouve la souris par rapport au centre du bouton, horizontalement et verticalement
  • par la suite il suffit de déplacer le bouton en X, Y

Voyons ce que ça donne.

  • affichons le formulaire (en utilisation la méthode Navigation)
  • allons sur la page des préférences
  • et essayons de cliquer sur le bouton :

Chaque fois qu'on s'approche du bouton, selon qu'on est placé au dessus, en dessous, à gauche ou à droite le bouton se déplace dans la position opposée.

Si le bouton sort de l'écran, il suffit de refermer le formulaire et de le redémarrer.

Voici un premier exemple d'utilisation des événements.

Prenons un autre exemple :  Lors de la saisie d'une intervention, nous souhaitons calculer la durée de l'intervention à partir des informations saisies dans l'heure de début et l'heure de fin.

Nous devons :

  • dans un premier temps ajouter le champ Heure de fin à la table.
    Pour gagner du temps, copions le champ Heure et collons-le dans la même table, puis il suffit de modifier son nom.
  • Nous l'ajoutons ensuite au formulaire entrée par duplication du champ heure de début et en adaptant leu champ concerné : heure d'intervention fin.
  • Nous devons également ajouter la durée pour vérifier que notre programmation fonctionne.
  • Ensuite, nous devons indiquer que la durée devra sera recalculée lorsque l'un de ces 2 champs heure sera modifié.
  • Nous cochons donc l'événément sur données modifiées et indiquons le calcul à effectuer.
    Attention ALT-Clic sur 2 objets qui n'ont pas encore de méthode ne crée la méthode que de l'objet sur lequel on a cliqué.

La durée sera recalculée comme étant la différence entre l'heure de fin moins l'heure d'intervention, à une condition, c'est que l'heure de fin soit renseignée c'est-à-dire qu'elle soit différente de 0.

On peut copier le code (copier) et maintenant réaliser la méthode de l'heure de fin.

Lorsqu'on va la modifier : il faudra que l'heure d'intervention soit renseignée et le mode de calcul de la durée sera toujours le même.
Vérifions bien évidemment que les heures soient saisissables puis testons sur une intervention

  • on prend toutes les interventions,  
  • on prend la première
  • on tape 14:00 et nous avons bien une durée de 2 heures qui est calculée
  • de 12:00 à 17:30 => 5:30
  • si on a commencé à 14:00 on a bien une durée de 03:30

La programmation a bien été effectuée au moment où on sortait du champ, c'est-à-dire dans le cadre du "sur données modifées".

Dans le chapitre suivant, nous aborderons la programmation des tableaux.

 
 

 
PROPRIÉTÉS 

Produit : 4D
Thème : Événements
Nom intl. : Events

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

Autoformation ( 4D v16)