Evenement formulaire

4D - Documentation   Français   English   German   4e Dimension, Commandes par thèmes   4e Dimension, Liste alphabétique des commandes   4e Dimension, Constantes par thèmes   Retour   Précédent   Suivant

version 2004.2 (Modifiée)


Evenement formulaire Numérique

ParamètreTypeDescription
Cette commande ne requiert pas de paramètre
RésultatNumériqueNuméro d'événement formulaire

Description

Evenement formulaire retourne une valeur numérique qui identifie le type d'événement formulaire qui vient de se produire. Généralement, Evenement formulaire s'utilise dans une méthode formulaire ou une méthode objet.

4e Dimension fournit des constantes prédéfinies (placées dans le thème "Evénements formulaire") permettant de comparer les valeurs retournées par la commande Evenement formulaire.

Certains événements sont génériques (générés pour tout type d'objet), d'autres sont spécifiques à un type d'objet particulier.

Evénements génériques

Les événements suivants sont générés pour tout formulaire ou objet :

ConstanteValeurDescription
Sur chargement1Le formulaire s'affiche ou s'imprime
Sur libération24Le formulaire se referme et est déchargé
Sur validation3La saisie des données dans l'enregistrement est validée
Sur clic4Un clic est survenu sur un objet
Sur double clic13Un double-clic est survenu sur un objet
Sur avant frappe clavier17Un caractère vient d'être saisi dans l'objet qui a le focus
Lire texte edite retourne le contenu sans ce caractère
Sur après frappe clavier28Un caractère vient d'être saisi dans l'objet qui a le focus
Lire texte edite retourne le contenu avec ce caractère
Sur après modification45Le contenu de l'objet saisissable qui a le focus vient
d'être modifié
Sur gain focus15Un objet de formulaire prend le focus
Sur perte focus14Un objet de formulaire perd le focus
Sur activation11La fenêtre du formulaire passe au premier plan
Sur désactivation12La fenêtre du formulaire passe en arrière-plan
Sur appel extérieur10Le formulaire a reçu un appel de la commande
APPELER PROCESS
Sur déposer16Des données sont déposées sur un objet
Sur glisser21Des données peuvent être déposées sur un objet
Sur début survol35Le curseur de la souris entre dans la zone graphique
d'un objet
Sur survol37Le curseur de la souris bouge (d'au moins un pixel)
alors qu'il se trouve dans la zone graphique d'un objet
Sur fin survol36Le curseur de la souris sort de la zone graphique d'un
objet
Sur menu sélectionné18Une commande de menu a été sélectionnée
Sur données modifiées20Les données d'un objet ont été modifiées
Sur appel zone du plug in19Un plug-in demande que sa méthode objet
soit exécutée
Sur entête5L'en-tête du formulaire va être imprimé ou affiché
Sur impression corps23Le corps du formulaire va être imprimé
Sur impression sous total6Une rupture du formulaire va être imprimée
Sur impression pied de page7Le pied de page du formulaire va être imprimé
Sur case de fermeture22On a cliqué sur la case de fermeture de la fenêtre
Sur affichage corps8Un enregistrement va être affiché dans la liste
Sur ouverture corps25On a double-cliqué sur un enregistrement et on passe
au formulaire entrée
Sur fermeture corps26Le formulaire entrée se referme et on retourne au
formulaire sortie
Sur nouvelle sélection31 List box : la sélection courante de lignes ou de
colonnes est modifiée
Enregistrements en liste : l'enregistrement courant ou
la sélection courante de lignes est modifié(e) dans un
formulaire en liste ou un sous-formulaire
Liste hiérarchique : la sélection dans la liste est
modifiée à la suite d'un clic ou de la frappe d'une
touche au clavier
Sur chargement ligne40En mode saisie en liste, un enregistrement est chargé
en modification (l'utilisateur a cliqué sur la ligne de
l'enregistrement et un champ passe en édition)
Sur minuteur27Le nombre de ticks défini par FIXER MINUTEUR est atteint
Sur redimensionnement29La fenêtre du formulaire est redimensionnée

List box

Les événements suivants sont générés uniquement pour les objets de type List box :

ConstanteValeurDescription
Sur avant saisie41Une cellule de list box est sur le point de passer en
mode édition
Sur déplacement colonne32Une colonne de list box est déplacée par l'utilisateur
via le glisser-déposer
Sur déplacement ligne34Une ligne de list box est déplacée par l'utilisateur via
le glisser-déposer
Sur redimensionnement colonne33La largeur d'une colonne de list box est modifiée
Sur clic entête42Un clic est survenu dans l'en-tête d'une colonne de
list box
Sur après tri30Un tri standard vient d'être effectué dans une
colonne de list box

Boutons 3D

Les événements suivants sont générés uniquement pour les objets de type bouton 3D :

ConstanteValeurDescription
Sur clic long39Un bouton 3D reçoit un clic et le bouton de la souris
reste enfoncé pendant un certain laps de temps
Sur clic flèche38La zone "flèche" d'un bouton 3D reçoit un clic

Listes hiérarchiques

Les événements suivants sont générés uniquement pour les objets de type Liste hiérarchique :

ConstanteValeurDescription
Sur déployer43Un élément de liste hiérarchique a été déployé via un
clic ou une touche du clavier
Sur contracter44Un élément de liste hiérarchique a été contracté via un
clic ou une touche du clavier

Evénements et méthodes


Lorsqu'un événement formulaire se produit, 4e Dimension effectue les actions suivantes :

En premier lieu, il examine chaque objet du formulaire et appelle la méthode de ceux dont la propriété d'événement correspondante a été sélectionnée et qui sont impliqués dans l'événement.

Ensuite, il appelle la méthode formulaire si la propriété d'événement correspondante a été sélectionnée pour le formulaire.

Les différentes méthodes objet ne sont pas appelées dans un ordre particulier. La règle est que les méthodes objet sont toujours appelées avant la méthode formulaire. Dans le cas des sous-formulaires, les méthodes objet du formulaire sortie du sous-formulaire sont d'abord appelées, puis la méthode formulaire du formulaire sortie, puis enfin 4D appelle les méthodes objet du formulaire parent. Autrement dit, lorsqu'un objet est un sous-formulaire, 4D utilise la même règle pour les méthodes formulaire et objet dans le sous-formulaire.

Lorsque, pour un événement particulier, la propriété d'événement du formulaire n'est pas sélectionnée, cela n'empêche pas les appels aux méthodes des objets pour lesquels l'événement est sélectionné. Autrement dit, la sélection ou la désélection d'un événement au niveau du formulaire n'a pas d'effet sur les propriétés d'événements des objets.

ATTENTION : Ce principe ne s'applique pas aux événements Sur chargement et Sur libération. Ces événements ne seront générés pour un objet que si les propriétés d'événement correspondantes ont été sélectionnées à la fois pour l'objet et pour le formulaire auquel il appartient. Si les propriétés sont sélectionnées pour l'objet uniquement, les événements ne seront pas générés ; ces deux événements doivent être sélectionnés au niveau du formulaire.

Le nombre d'objets impliqués par un événement dépend de la nature de l'événement. En particulier :

Pour l'événement Sur chargement, les méthodes objet de tous les objets du formulaire (sur toutes les pages) pour lequels la propriété d'événement Sur chargement est sélectionnée seront appelées. Si l'événement Sur chargement est sélectionné pour le formulaire, la méthode formulaire sera appelée.

Pour les événements Sur activation ou Sur redimensionnement, aucune méthode objet ne sera appelée car ces événements s'appliquent au formulaire, pas à un objet en particulier. Par conséquent, si ces événements sont sélectionnés pour le formulaire, seule la méthode formulaire sera appelée.

L'événement Sur minuteur n'est généré que si la méthode formulaire contient un appel préalable à la commande FIXER MINUTEUR. Seule la méthode formulaire reçoit cet événement, aucune méthode objet ne sera appelée.

Pour l'événement Sur glisser, seule la méthode de l'objet déposable impliqué par l'événement sera appelée (si, bien entendu, la propriété d'événement Sur glisser est sélectionnée pour l'objet). La méthode formulaire ne sera pas appelée.

ATTENTION : Contrairement à tous les autres événements, la méthode d'un objet, pendant l'événement Sur glisser, est exécutée dans le contexte du process de l'objet source du glisser-déposer, et non dans celui du process de l'objet de destination de l'opération. Pour plus d'informations, reportez-vous aux descriptions des commandes PROPRIETES GLISSER DEPOSER et Position deposer.

Si les événements Sur début survol, Sur survol et Sur fin survol sont cochés pour le formulaire, ils sont générés pour chaque objet du formulaire. S'ils sont cochés pour un objet, ils sont générés pour cet objet uniquement. En cas de superposition d'objets, l'événement est généré par le premier objet capable de le gérer dans l'ordre des plans du haut vers le bas. Les objets rendus invisibles par la commande CHOIX VISIBLE ne génèrent pas ces événements. Pendant la saisie d'un objet, les autres objets peuvent recevoir les événements de survol en fonction de la position de la souris.

Enregistrements en liste : l'enchaînement d'appels des méthodes et des événements formulaires dans les formulaires liste affichés via MODIFIER SELECTION / VISUALISER SELECTION et les sous-formulaires est le suivant :

   Pour chaque objet de la zone d'en-tête :
      Méthode objet avec événement Sur entête
   Méthode formulaire avec événement Sur entête
   Pour chaque enregistrement :
      Pour chaque objet de la zone de corps :
         Méthode objet avec événement Sur affichage corps 
      Méthode formulaire avec événement Sur affichage corps 

L'appel depuis les événements Sur affichage corps et Sur entête d'une commande 4D provoquant l'affichage d'une boîte de dialogue est interdit et provoque une erreur de syntaxe.

Les commandes concernées sont notamment : ALERTE, DIALOGUE, CONFIRMER, Demander, AJOUTER ENREGISTREMENT, MODIFIER ENREGISTREMENT, VISUALISER SELECTION et MODIFIER SELECTION.

Le tableau suivant résume, pour chaque type d'événement, l'appel des méthodes formulaire et objet :

EvénementMéthode(s)MéthodeQuel(s)
objetformulaireobjet(s)
Sur chargementOuiOuiTous
Sur libérationOuiOuiTous
Sur validationOuiOuiTous
Sur clicOui (si cliquable) (*)OuiSeul l'objet impliqué
Sur double clicOui (si cliquable) (*)OuiSeul l'objet impliqué
Sur avant frappe clavierOui (si saisissable) (*)OuiSeul l'objet impliqué
Sur après frappe clavierOui (si saisissable) (*)OuiSeul l'objet impliqué
Sur après modificationOui (si saisissable) (*)OuiSeul l'objet impliqué
Sur gain focusOui (si tabulable) (*)OuiSeul l'objet impliqué
Sur perte focusOui (si tabulable) (*)OuiSeul l'objet impliqué
Sur activationJamaisOuiAucun
Sur désactivationJamaisOuiAucun
Sur appel extérieurJamaisOuiAucun
Sur déposerOui (si déposable) (*)OuiSeul l'objet impliqué
Sur glisserOui (si déposable) (*)JamaisSeul l'objet impliqué
Sur début survolOuiOuiTous
Sur survolOuiOuiTous
Sur fin survolOuiOuiTous
Sur menu sélectionnéJamaisOuiAucun
Sur données modifiéesOui (si modifiable) (*)OuiSeul l'objet impliqué
Sur appel zone du plug inOuiOuiSeul l'objet impliqué
Sur entêteOuiOuiTous
Sur impression corpsOuiOuiTous
Sur impression sous totalOuiOuiTous
Sur impression pied de pageOuiOuiTous
Sur case de fermetureJamaisOuiAucun
Sur affichage corpsOuiOuiTous
Sur ouverture corpsJamaisOuiAucun
Sur fermeture corpsJamaisOuiAucun
Sur redimensionnementJamaisOuiAucun
Sur nouvelle sélectionOui (**)OuiSeul l'objet impliqué
Sur chargement ligneJamaisOuiAucun
Sur minuteurJamaisOuiAucun
Sur avant saisieOui (List box)JamaisSeul l'objet impliqué
Sur déplacement colonneOui (List box)JamaisSeul l'objet impliqué
Sur déplacement ligneOui (List box)JamaisSeul l'objet impliqué
Sur redimensionnement colonne Oui (List box)JamaisSeul l'objet impliqué
Sur clic entêteOui (List box)JamaisSeul l'objet impliqué
Sur après triOui (List box)JamaisSeul l'objet impliqué
Sur clic longOui (Bouton 3D)OuiSeul l'objet impliqué
Sur clic flècheOui (Bouton 3D)OuiSeul l'objet impliqué
Sur déployerOui (Liste hiér.)JamaisSeul l'objet impliqué
Sur contracterOui (Liste hiér.)JamaisSeul l'objet impliqué

(*) Référez-vous ci-dessous au paragraphe "Evénements, objets et propriétés" pour plus d'informations.

(**) Seuls les objets de type List box, Liste hiérarchique et Sous-formulaire prennent en charge cet événement.

IMPORTANT : Gardez constamment à l'esprit que, pour chaque événement, la méthode d'un formulaire ou d'un objet est appelée si l'événement correspondant a été sélectionné pour le formulaire ou l'objet. L'avantage de désactiver des événements en mode Structure (en utilisant la Liste des propiétés de l'éditeur de formulaires) est que vous pouvez réduire de manière très importante le nombre d'appels aux méthodes et donc optimiser la vitesse d'exécution des formulaires.

Evénements, objets et propriétés


Une méthode objet est appelée si l'événement peut réellement se produire pour l'objet en fonction de sa nature et de ses propriétés. Ce paragraphe détaille les événements à utiliser pour gérer les différents types d'objets.

A noter que la Liste des propriétés de l'éditeur de formulaires n'affiche que les événements compatibles avec l'objet sélectionné ou le formulaire.

Objets cliquables

Les objets cliquables sont gérés principalement avec la souris. Ces objets sont les suivants :

Variables ou champs saisissables de type Booléen

Boutons, boutons par défaut, boutons radio, cases à cocher, grilles de boutons

Boutons 3D, boutons radio 3D, cases à cocher 3D

Pop up menus, pop up menus hiérarchiques, menus Images

Listes déroulantes, menus,

Zones de défilement, listes hiérarchiques, list box

Boutons invisibles, boutons inversés, boutons radio image

Thermomètres, règles, cadrans

Onglets,

Séparateurs.

Lorsque l'événement Sur clic ou Sur double clic est sélectionné pour un de ces objets, vous pouvez détecter et gérer les clics sur l'objet à l'aide de la la commande Evenement formulaire qui retourne Sur clic ou Sur double clic selon le cas.

Si les deux événements sont sélectionnés pour un même objet, les événements Sur clic puis Sur double clic seront générés en cas de double-clic sur l'objet.

Pour tous les objets cliquables, l'événement Sur clic se produit une fois que le bouton de la souris est relâché. Il y a cependant des exceptions :

Avec les boutons invisibles et les onglets, l'événement Sur clic se produit dès qu'un clic a été détecté — sans attendre le relâchement du bouton de la souris.

Avec les thermomètres, règles et cadrans, si le format d'affichage indique que la méthode objet doit être appelée pendant que vous faites glisser les curseurs de contrôle, l'événement Sur clic survient dès que le clic est détecté.

Avec les boutons 3D, l'événement Sur clic flèche est généré lorsque l'utilisateur clique sur la "flèche" (dès que le bouton de la souris est enfoncé), voir ci-dessous.

Note : Quelques objets peuvent être activés par le clavier. Une case à cocher, par exemple, une fois qu'elle a le focus, peut être sélectionnée à l'aide de la barre d'espace. Dans ce cas, l'événement Sur clic est quand même généré.

ATTENTION : Les combo-boxes ne sont pas considérées comme des objets cliquables. Une combo-box doit être perçue comme une zone de texte saisissable dont la liste déroulante fournit les valeurs par défaut. Par conséquent, vous gérez la saisie des données dans une combo-box à l'aide des événements Sur avant frappe clavier, Sur après frappe clavier et Sur données modifiées.

Objets saisissables par clavier

Les objets saississables par clavier sont des objets dans lesquels vous saisissez des données par le clavier et pour lesquels vous pouvez filtrer les données au plus bas niveau en détectant les événements Sur après modification, Sur avant frappe clavier et Sur après frappe clavier.

Les objets et types de données saisissables sont les suivants :

Tous les champs saisissables de type alpha, texte, date, heure, numérique ou (Sur après modification uniquement) image

Toutes les variables saisissables de type alpha, texte, date, heure, numérique ou (Sur après modification uniquement) image

Combo-boxes

List boxes

Note : Bien qu'objets "saisissables", les listes hiérarchiques ne gèrent pas les événements formulaire Sur après modification, Sur avant frappe clavier et Sur après frappe clavier (voir aussi le paragraphe "Listes hiérarchiques" ci-dessous).

Sur avant frappe clavier et Sur après frappe clavier

Note : A compter de la version 2004.2 de 4e Dimension, l'événement Sur après frappe clavier peut généralement être avantageusement remplacé par l'événement Sur après modification (cf. ci-dessous).

Une fois que les événements Sur avant frappe clavier et Sur après frappe clavier ont été sélectionnés pour un objet, vous pouvez détecter et gérer la saisie par le clavier dans l'objet à l'aide de la commande Evenement formulaire qui va retourner Sur avant frappe clavier puis Sur après frappe clavier (pour plus d'informations, reportez-vous à la description de la commande Lire texte edite). Ces événements sont également activés par les commandes du langage simulant une action utilisateur, telles que GENERER FRAPPE CLAVIER.

A noter que les modifications des utilisateurs non effectuées via le clavier (coller, glisser-déposer, etc.) ne sont pas prises en compte. Pour traiter ces événements, vous devez utiliser Sur après modification.

Note : Les événements Sur avant frappe clavier et Sur après frappe clavier ne sont pas générés lors de l'utilisation d'une méthode d'entrée. Une méthode d'entrée (ou IME, Input Method Editor) est un programme ou un composant système permettant la saisie de caractères complexes ou de symboles (par exemple japonais ou chinois) à l'aide d'un clavier occidental.

Sur après modification

Lorsqu'il est utilisé, cet événement est généré après chaque modification du contenu d'un objet saisissable, quelle que soit l'action à l'origine de cette modification, c'est-à-dire :

- les actions d'édition standard entraînant une modification du contenu telles que coller, couper, effacer ou annuler ;

- le déposer d'une valeur (action similaire au coller) ;

- toute saisie au clavier effectuée par l'utilisateur ; dans ce cas, l'événement Sur après modification est généré après les événements Sur avant frappe clavier et Sur après frappe clavier s'ils sont utilisés.

- une modification effectuée via une commande du langage simulant une action utilisateur (i.e. GENERER FRAPPE CLAVIER).

Attention, les actions suivantes ne déclenchent PAS cet événement :

- les actions d'édition ne modifiant pas le contenu de la zone, comme copier ou tout sélectionner ;

- le glisser d'une valeur (action similaire au copier) ;

- les modifications de contenu effectuées par programmation, à l'exception des commandes simulant une action utilisateur.

Cet événement permet de contrôler les actions utilisateur afin, par exemple, d'interdire de coller un texte trop volumineux, de filtrer certains caractères ou d'empêcher le couper d'un champ de mot de passe.

Objets modifiables

Les objets modifiables sont des objets ayant une source de données, dont la valeur peut être modifiée à l'aide de la souris ou du clavier, mais qui ne sont pas gérés par l'événement Sur clic. Ces objets sont les suivants :

Tous les champs saisissables (sauf sous-tables et BLOB)

Toutes les variables saisissables (sauf BLOB, pointeurs et tableaux)

Combo-boxes

Objets externes (pour lesquels la saisie de données est validée par le plug-in)

Listes hiérarchiques

List box

Ces objets reçoivent l'événement Sur données modifiées. Lorsque l'événement Sur données modifiées est sélectionné pour un de ces objets, vous pouvez détecter et gérer la modification des valeurs à l'aide de la commande Evenement formulaire qui retourne Sur données modifiées au moment où l'objet perd le focus.

Objets tabulables

Les objets tabulables sont ceux qui peuvent recevoir le focus lorsque vous utilisez la touche Tab et/ou si vous cliquez dessus. L'objet qui a le focus est celui qui reçoit les caractères saisis via le clavier et qui ne sont pas les accélerateurs (Windows) ou les raccourcis-clavier (Mac OS) d'une commande de menu ou d'un objet tel qu'un bouton.

TOUS les objets sont tabulables SAUF ceux listés ci-dessous :

Variables ou champs non saisissables

Grilles de boutons

Boutons 3D, boutons radio 3D, cases à cocher 3D

Pop-up/listes déroulantes

Menus déroulants hiérarchiques

Pop-up menus Image

Zones de défilement

Boutons invisibles, boutons inversés, boutons radio Images

Graphes

Objets externes (pour lesquels la saisie de données est validée par le plug-in 4D)

Onglets

Séparateurs

Lorsque les événements Sur gain focus et/ou Sur perte focus sont sélectionnés pour un objet tabulable, vous pouvez détecter et gérer la modification du focus à l'aide de la commande Evenement formulaire qui retournera Sur gain focus ou Sur perte focus en fonction de l'événement.

Boutons 3D

Les boutons 3D autorisent la mise en place d'interfaces graphiques avancées (pour une description des boutons 3D, reportez-vous au manuel Mode Structure). Outre les événements génériques, deux événements spécifiques permettent de gérer de ces boutons :

Sur clic long : cet événement est généré lorsqu'un bouton 3D reçoit un clic et que le bouton de la souris reste enfoncé pendant un certain laps de temps. En pratique, le délai à l'issue duquel l'événement est généré est égal au délai maximal séparant un double-clic, tel qu'il a été défini dans les préférences du système.

Cet événement peut être généré pour tous les styles de boutons 3D, boutons radio 3D et cases à cocher 3D, à l'exception des boutons 3D "ancienne génération" (style Décalage du fond) et des zones de flèche des boutons 3D avec pop up menu (cf. ci-dessous).

Cet événement est généralement utilisé pour afficher des pop up menus en cas de clics longs sur des boutons. L'événement Sur clic, s'il est coché, est généré si l'utilisateur relâche le bouton de la souris avant le délai du "clic long".

Sur clic flèche : certains styles de boutons 3D peuvent être associés à un pop up menu et afficher une flèche. Un clic sur cette flèche fait généralement apparaître un menu de sélection proposant des actions supplémentaires en rapport avec l'action principale du bouton.

4e Dimension vous permet de gérer ce type de bouton à l'aide de l'événement Sur clic flèche. Cet événement est généré lorsque l'utilisateur clique sur la "flèche" (dès que le bouton de la souris est enfoncé) :

- si le pop up menu est de type "Séparé", l'événement est généré uniquement en cas de clic sur la zone fléchée du bouton.

- si le pop up menu est de type "Lié", l'événement est généré en cas de clic sur n'importe quelle partie du bouton. A noter qu'avec ce type de bouton, l'événement Sur clic long ne peut pas être généré.

Les styles de boutons 3D, boutons radio 3D et cases à cocher 3D acceptant la propriété "Avec pop up menu" sont : Aucun, Bouton barre outils, Bevel, Bevel arrondi et Office XP.

List box

Sept événements formulaires permettent de prendre en charge les spécificités des list box :

Sur avant saisie : cet événement est généré juste avant qu'une cellule de list box passe en mode édition (c'est-à-dire, avant que le curseur de saisie soit affiché). Cet événement permet au développeur, par exemple, d'afficher un texte différent selon que l'utilisateur est en mode affichage ou édition.

Sur nouvelle sélection : cet événement est généré à chaque fois que la sélection courante de lignes ou de colonnes de la list box est modifiée. Cet événement est également généré pour les listes d'enregistrements et les listes hiérarchiques.

Sur déplacement colonne : cet événement est généré lorsqu'une colonne de list box est déplacée par l'utilisateur via le glisser-déposer. Il n'est pas généré si la colonne est glissée et déposée à son emplacement initial. La commande Numero colonne listbox deplacee permet de connaître le nouvel emplacement de la colonne.

Sur déplacement ligne : cet événement est généré lorsqu'une ligne de list box est déplacée par l'utilisateur via le glisser-déposer. Il n'est pas généré si la ligne est glissée et déposée à son emplacement initial.

Sur redimensionnement colonne : cet événement est généré lorsque la largeur d'une colonne de list box est modifiée (via la souris ou par programmation à l'aide de la commande FIXER LARGEUR COLONNE LISTBOX).

Sur clic entête : cet événement est généré lorsqu'un clic se produit sur l'en-tête d'une colonne de list box. Dans ce cas, la commande Self permet de connaître l'en-tête de colonne sur laquelle le clic s'est produit. L'événement Sur clic est généré lorsqu'un clic droit (Windows) ou un Ctrl+clic (Mac OS) se produit sur une colonne ou un en-tête de colonne.

Si la propriété Triable a été cochée pour la list box, il est possible d'autoriser ou non le tri standard sur la colonne en passant la valeur 0 ou -1 dans la variable $0 :

- Si $0 vaut 0, le tri standard est effectué.

- Si $0 vaut -1, le tri standard n'est pas effectué et l'en-tête n'affiche pas la flèche de tri. Le développeur peut toutefois générer un tri des colonnes sur des critères personnalisés à l'aide des commandes de gestion des tableaux de 4e Dimension.

Si la propriété Triable n'a pas été cochée pour la list box, la variable $0 n'est pas utilisée.

Sur après tri : cet événement est généré juste après qu'un tri standard ait été effectué (par conséquent, il n'est pas généré si $0 retourne -1 dans l'événement Sur clic entête). Ce mécanisme est utile pour conserver le sens du dernier tri effectué par l'utilisateur. Dans cet événement, la commande Self retourne un pointeur sur la variable de la colonne ayant été triée.

Listes hiérarchiques

Outre les événements génériques, trois événements formulaires spécifiques permettent de prendre en charge les actions utilisateurs effectuées sur les listes hiérarchiques :

Sur nouvelle sélection : cet événement est généré à chaque fois que la sélection dans la liste hiérarchique est modifiée à la suite d'un clic ou de la frappe d'une touche au clavier.

Cet événement est également généré dans les objets list box et les listes d'enregistrements.

Sur déployer : cet événement est généré à chaque fois qu'un élément de la liste hiérarchique a été déployé via un clic ou une touche du clavier.

Sur contracter : cet événement est généré à chaque fois qu'un élément de la liste hiérarchique a été contracté via un clic ou une touche du clavier.

Ces événements ne sont pas mutuellement exclusifs. Ils peuvent être générés les uns après les autres pour une liste hiérarchique :

- Suite à la frappe d'une touche clavier (dans l'ordre) :

EvénementContexte
Sur données modifiéesUn élément était en édition
Sur déployer / Sur contracterOuverture/fermeture de sous-liste à l'aide des touches
fléchées -> ou <-
Sur nouvelle sélectionSélection d'un nouvel élément
Sur clicActivation de la liste par le clavier

- Suite à un clic souris (dans l'ordre) :

EvénementContexte
Sur données modifiéesUn élément était en édition
Sur déployer / Sur contracterOuverture/fermeture de sous-liste via un clic sur
l'icône de déploiement/contraction
ou bien
Double-clic sur une sous-liste non éditable
Sur nouvelle sélectionSélection d'un nouvel élément
Sur clic / Sur double clicActivation de la liste par un clic ou un double-clic

Exemples

Dans tous les exemples ci-dessous, nous supposons que les propriétés d'événements des formulaires et des objets ont été sélectionnées de manière appropriée.

(1) L'exemple suivant trie une sélection de sous-enregistrements pour la sous-table [Parents]Enfants avant qu'un formulaire de la table [Parents] ne soit affiché à l'écran :

      ` Méthode d'un formulaire pour la table [Parents]
   Au cas ou
      : (Evenement formulaire=Sur chargement)
         TRIER SOUS ENREGISTREMENTS([Parents]Enfants;[Parents]Enfants'Prénom;>)
         ` ...
   Fin de cas

(2) L'exemple suivant montre l'utilisation de l'événement Sur validation pour affecter automatiquement la date lorsque l'enregistrement est modifié :

      ` Méthode d'un formulaire
   Au cas ou
         ` ...
      : (Evenement formulaire=Sur validation)
         [LaTable]Date de modification:=Date du jour 
   Fin de cas

(3) Dans l'exemple suivant, la gestion complète d'un menu déroulant (initialisation, clics et relâchement de l'objet) est placée dans la méthode de l'objet :

      ` Méthode objet du menu déroulant taTaille
   Au cas ou
      : (Evenement formulaire=Sur chargement)
         TABLEAU ALPHA(31;taTaille;3)
         taTaille{1}:="Petit"
         taTaille{2}:="Moyen"
         taTaille{3}:="Grand"
      : (Evenement formulaire=Sur clic)
         Si (taTaille#0)
            ALERTE("Vous avez choisi la taille "+taTaille{taTaille}+".")
         Fin de si
      : (Evenement formulaire=Sur libération)
         EFFACER VARIABLE(taTaille)
   Fin de cas

(4) L'exemple suivant montre comment, dans une méthode objet, gérer et valider l'opération de glisser-déposer à partir d'un champ qui n'accepte que des images.

      ` Méthode objet du champ Image [LaTable]uneImage
   Au cas ou
      : (Evenement formulaire=Sur glisser)
            ` On est en train de glisser-déposer un objet et la souris est au-dessus d'un champ
            ` Obtenir les informations sur l'objet source
         PROPRIETES GLISSER DEPOSER ($vpObjetSource;$vlElémentSource;$lProcessSource)
            ` Notez que nous n'avons pas besoin de tester le numéro de process source
            ` pour la méthode objet exécutée parce qu'elle est dans le même process
         $vlTypeDonnées:=Type ($vpSrcObject->)
            ` Les données source sont-elles une image (champ, variable ou tableau) ?
         Si (($vlTypeDonnées=Est une image) | ($vlTypeDonnées=Est un tableau image))
               ` Accepter l'opération
               ` Notez que le bouton de la souris est toujours enfoncé, 4D affiche l'objet en vidéo inversée 
               ` afin d'informer l'utilisateur que les données source peuvent être déposées sur cet objet
            $0:=0
         Sinon
               ` Sinon, refuser l'opération
            $0:=-1
               ` Dans ce cas, l'objet n'est pas affiché en vidéo inversée
         Fin de si
      : (Evenement formulaire=Sur déposer)
            ` Les données source ont été déposées sur l'objet, donc nous avons besoin de les copier dans l'objet.
            ` Obtenir les informations sur l'objet source
         PROPRIETES GLISSER DEPOSER ($vpObjetSource;$vlElémentSource;$lProcessSource)
         $vlTypeDonnées:=Type ($vpSrcObject->)   
         Au cas ou
               ` L'objet source est un champ ou une variable de type Image
            : ($vlTypeDonnées=Est une image)
                  ` Est-ce que l'objet source est dans le même process (dans la même fenêtre et le même
                    formulaire) ?
               Si ($lProcessSource=Numero du process courant)
                     ` Copier la valeur source
                  [LaTable]uneImage:=$vpObjetSource->
               Sinon
                     ` Sinon, est-ce que l'objet source est une variable ?
                  Si (Est une variable ($vpObjetSource))
                         ` Obtenir la valeur du process source
                     LIRE VARIABLE PROCESS ($lProcessSource;$vpObjetSource->;$vgImageGlissée)
                     [LaTable]uneImage:=$vgImageGlissée
                  Sinon
                     ` Sinon, utiliser APPELER PROCESS pour obtenir la valeur du champ du process source
                  Fin de si
               Fin de si
               ` L'objet source est un tableau de type Image
            : ($vlTypeDonnées=Est un tableau image)
                  ` Est-ce que l'objet source est dans le même process (dans la même fenêtre et le même
                    formulaire) ?
               Si ($lProcessSource=Numero du process courant)
                     ` Copier la valeur source
                  [LaTable]uneImage:=$vpSrcObject->{$vlElémentSource}
               Sinon
                     ` Sinon, obtenir la valeur du process source
                  LIRE VARIABLE PROCESS ($lProcessSource;$vpObjetSource
                        ->{$vlElémentSource};$vgImageGlissée)
                  [LaTable]uneImage:=$vgImageGlissée
               Fin de si
         Fin de cas
   Fin de cas

Note : Pour d'autres exemples sur la gestion des événements Sur glisser et Sur déposer, référez-vous aux exemples de la commande PROPRIETES GLISSER DEPOSER.

(5) L'exemple suivant est une méthode formulaire générique. Elle fait apparaître chacun des événements qui peuvent survenir lorsqu'un formulaire est utilisé comme formulaire sortie :

      ` Méthode formulaire d'un formulaire sortie
   $vpFormTable:=Table du formulaire courant 
   Au cas ou
         ` ...
      : (Evenement formulaire=Sur entête)
            ` La zone en-tête va être imprimée ou affichée
         Au cas ou
            : (Avant selection($vpFormTable->))
               ` Le code pour la première rupture d'en-tête doit être placé ici
            : (Niveau = 1)
               ` Le code pour la rupture d'en-tête niveau 1 doit être placé ici
            : (Niveau = 2)
               ` Le code pour la rupture d'en-tête niveau 2 doit être placé ici
               ` ...
         Fin de cas
      : (Evenement formulaire=Sur impression corps)
            ` Un enregistrement va être imprimé
            ` Le code pour chaque enregistrement doit être placé ici
      : (Evenement formulaire=Sur impression sous total)
            ` Une rupture va être imprimée
         Au cas ou
            : (Niveau = 0)
               ` Le code pour la rupture 0 doit être placé ici
            : (Niveau = 1)
               ` Le code pour la rupture 1 doit être placé ici
               ` ...
         Fin de cas
      : (Evenement formulaire=Sur impression pied de page)
         Si (Fin de selection($vpFormTable->))
            ` Le code pour le dernier pied de page doit être placé ici
         Sinon
            ` Le code pour le pied de page doit être placé ici
         Fin de si      
   Fin de cas

(6) L'exemple suivant montre une méthode formulaire générique qui gère les événements pouvant survenir dans un formulaire sortie quand il s'affiche à l'aide de VISUALISER SELECTION ou MODIFIER SELECTION. Dans un but informatif, elle affiche l'événement dans la barre de titre de la fenêtre.

      ` Une méthode formulaire exemple
   Au cas ou
      : (Evenement formulaire=Sur chargement)
         $vaEvénement:="Le formulaire va être affiché"
      : (Evenement formulaire=Sur libération)
         $vaEvénement:="Le formulaire sortie vient de se fermer et va disparaître de l'écran"
      : (Evenement formulaire=Sur affichage corps)
         $vaEvénement:="Affichage de l'enregistrement n°"+Chaine(Numero dans selection([LaTable]))
      : (Evenement formulaire=Sur menu sélectionné)
         $vaEvénement:="Une commande de menu a été sélectionnée"
      : (Evenement formulaire=Sur entête)
         $vaEvénement:="L'en-tête va être imprimé ou affiché"
      : (Evenement formulaire=Sur clic)
         $vaEvénement:="On a cliqué sur un enregistrement"
      : (Evenement formulaire=Sur double clic)
         $vaEvénement:="On a double-cliqué sur un enregistrement"
      : (Evenement formulaire=Sur ouverture corps)
         $vaEvénement:="On a double-cliqué sur l'enregistrement n°"+Chaine
                                       (Numero dans selection([LaTable]))
      : (Evenement formulaire=Sur fermeture corps)
         $vaEvénement:="Retour au formulaire sortie"
      : (Evenement formulaire=Sur activation)
         $vaEvénement:="La fenêtre du formulaire passe au premier plan"
      : (Evenement formulaire=Sur désactivation)
         $vaEvénement:="La fenêtre du formulaire n'est plus au premier plan"
      : (Evenement formulaire=Sur menu sélectionné)
         $vaEvénement:="Une ligne de menu a été sélectionnée"
      : (Evenement formulaire=Sur appel extérieur)
         $vaEvénement:="Un appel extérieur a été reçu"
      Sinon
         $vaEvénement:="Que se passe-t-il ? L'événement n°"+Chaine(Evenement formulaire)
   Fin de cas
   CHANGER TITRE FENETRE ($vaEvénement)

(7) Pour des exemples de gestion des événements Sur avant frappe clavier et Sur après frappe clavier, référez-vous aux exemples des commandes Lire texte edite, Frappe clavier et FILTRER FRAPPE CLAVIER.

(8) L'exemple suivant montre comment traiter de la même manière les clics et double-clics dans une zone de défilement :

      ` Méthode objet pour la zone de défilement taChoix
   Au cas ou
      : (Evenement formulaire=Sur chargement)
         TABLEAU ALPHA (...;taChoix;...)
            ` ...
         taChoix:=0
      : ((Evenement formulaire=Sur clic) | (Evenement formulaire=Sur double clic))
         Si (taChoix#0)
               ` On a cliqué sur un élément, faire quelque chose
               ` ...
         Fin de si
            ` ...
   Fin de cas

(9) L'exemple suivant montre comment traiter les clics et double-clics de manière différente (notez l'utilisation de l'élément zéro pour conserver la valeur de l'élément sélectionné) :

      ` Méthode objet pour la zone de défilement taChoix
   Au cas ou
      : (Evenement formulaire=Sur chargement)
         TABLEAU ALPHA (...;taChoix;...)
            ` ...
         taChoix:=0
         taChoix{0}:="0"
      : (Evenement formulaire=Sur clic)
         Si (taChoix#0)
            Si (taChoix#Num(taChoix))
                  ` On a cliqué sur un élément, faire quelque chose
                  ` ...
                  ` Sauvegarder l'élément nouvellement sélectionné pour la prochaine fois
               taChoix{0}:=Chaine(taChoix)
            Fin de si
         Sinon
            taChoix:=Num(taChoix{0})
         Fin de si
      : (Evenement formulaire=Sur double clic souris)
         Si (taChoix#0)
               ` On a double-cliqué sur un élément, faire quelque chose
         Fin de si
            ` ...
   Fin de cas

(10) L'exemple suivant montre comment maintenir une zone contenant du texte à partir d'une méthode formulaire à l'aide des événements Sur gain focus et Sur perte focus :

      ` Méthode formulaire [Contacts];"Entrée"
   Au cas ou
      : (Evenement formulaire=Sur chargement)
         C_TEXTE(vtZoneEtat)
         vtZoneEtat:=""
      : (Evenement formulaire=Sur gain focus)
         RESOUDRE POINTEUR (Objet focus;$vsNomVar;$vlNumTable;$vlNumChamp)
         Si (($vlNumTable#0) & ($vlNumChamp#0))
            Au cas ou
               : ($vlNumChamp=1) ` Champ nom
                  vtZoneEtat:="Saisissez le nom du contact, il sera automatiquement mis en majuscules."
                     ` ...
               : ($vlNumChamp=10) ` Champ code postal
                  vtZoneEtat:="Saisissez un code postal, il sera automatiquement vérifié et validé."
                     ` ...
            Fin de cas
         Fin de si
      : (Evenement formulaire=Sur perte focus)
         vtZoneEtat:=""
            ` ...   
   Fin de cas

(11) L'exemple suivant montre comment traiter l'événement de fermeture de fenêtre avec un formulaire utilisé pour l'entrée des données :

      ` Méthode pour un formulaire entrée
   $vpFormulaireTable:=Table du formulaire courant 
   Au cas ou
         ` ...
      : (Evenement formulaire=Sur case de fermeture)
         Si (Enregistrement modifie($vpFormulaireTable->))
            CONFIRMER ("Cet enregistrement a été modifié. Voulez-vous sauvegarder les modifications ?")
            Si (OK=1)
               VALIDER 
            Sinon
               NE PAS VALIDER 
            Fin de si
         Sinon
            NE PAS VALIDER 
         Fin de si
            ` ...
   Fin de cas

(12) L'exemple suivant montre comment mettre en majuscules un champ Texte ou Alphanumérique chaque fois que la valeur est modifiée :

      ` Méthode objet pour [Contacts]Prénom
   Au cas ou
         ` ...
      : (Evenement formulaire=Sur données modifiées)
         [Contacts]Prénom:= Majusc(Sous chaine([Contacts]Prénom;1;1))
                        +Minusc(Sous chaine([Contacts]Prénom;2))
            ` ...
   Fin de cas

Référence

APPELER PROCESS, FILTRER FRAPPE CLAVIER, FIXER MINUTEUR, Frappe clavier, Lire texte edite, PROPRIETES GLISSER DEPOSER, Table du formulaire courant.


4D - Documentation   Français   English   German   4e Dimension, Commandes par thèmes   4e Dimension, Liste alphabétique des commandes   4e Dimension, Constantes par thèmes   Retour   Précédent   Suivant