version 11.2 (Modifiée)
Evenement formulaire Numérique
Paramètre | Type | Description | ||||
Cette commande ne requiert pas de paramètre | ||||||
Résultat | Numérique | Numé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.
4D 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 :
Constante | Valeur | Description |
Sur chargement | 1 | Le formulaire s'affiche ou s'imprime |
Sur libération | 24 | Le formulaire se referme et est déchargé |
Sur validation | 3 | La saisie des données dans l'enregistrement est validée |
Sur clic | 4 | Un clic est survenu sur un objet |
Sur double clic | 13 | Un double-clic est survenu sur un objet |
Sur avant frappe clavier | 17 | Un 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 clavier | 28 | Un 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 modification | 45 | Le contenu de l'objet saisissable qui a le focus vient |
d'être modifié | ||
Sur gain focus | 15 | Un objet de formulaire prend le focus |
Sur perte focus | 14 | Un objet de formulaire perd le focus |
Sur activation | 11 | La fenêtre du formulaire passe au premier plan |
Sur désactivation | 12 | La fenêtre du formulaire passe en arrière-plan |
Sur appel extérieur | 10 | Le formulaire a reçu un appel de la commande |
APPELER PROCESS | ||
Sur déposer | 16 | Des données sont déposées sur un objet |
Sur glisser | 21 | Des données peuvent être déposées sur un objet |
Sur début glisser | 46 | Un objet est en cours de glisser |
Sur début survol | 35 | Le curseur de la souris entre dans la zone graphique |
d'un objet | ||
Sur survol | 37 | Le curseur de la souris bouge (d'au moins un pixel) |
alors qu'il se trouve dans la zone graphique d'un objet | ||
Sur fin survol | 36 | Le curseur de la souris sort de la zone graphique d'un |
objet | ||
Sur menu sélectionné | 18 | Une commande de menu a été sélectionnée |
Sur données modifiées | 20 | Les données d'un objet ont été modifiées |
Sur appel zone du plug in | 19 | Un plug-in demande que sa méthode objet |
soit exécutée | ||
Sur entête | 5 | L'en-tête du formulaire va être imprimé ou affiché |
Sur impression corps | 23 | Le corps du formulaire va être imprimé |
Sur impression sous total | 6 | Une rupture du formulaire va être imprimée |
Sur impression pied de page | 7 | Le pied de page du formulaire va être imprimé |
Sur case de fermeture | 22 | On a cliqué sur la case de fermeture de la fenêtre |
Sur affichage corps | 8 | Un enregistrement va être affiché dans la liste |
Sur ouverture corps | 25 | On a double-cliqué sur un enregistrement et on passe |
au formulaire entrée | ||
Sur fermeture corps | 26 | Le formulaire entrée se referme et on retourne au |
formulaire sortie | ||
Sur nouvelle sélection | 31 | 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 ligne | 40 | En 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 minuteur | 27 | Le nombre de ticks défini par FIXER MINUTEUR est atteint |
Sur redimensionnement | 29 | La 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 :
Constante | Valeur | Description |
Sur avant saisie | 41 | Une cellule de list box est sur le point de passer en |
mode édition | ||
Sur déplacement colonne | 32 | Une colonne de list box est déplacée par l'utilisateur |
via le glisser-déposer | ||
Sur déplacement ligne | 34 | Une ligne de list box est déplacée par l'utilisateur via |
le glisser-déposer | ||
Sur redimensionnement colonne | 33 | La largeur d'une colonne de list box est modifiée |
Sur clic entête | 42 | Un clic est survenu dans l'en-tête d'une colonne de |
list box | ||
Sur après tri | 30 | Un 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 :
Constante | Valeur | Description |
Sur clic long | 39 | Un bouton 3D reçoit un clic et le bouton de la souris |
reste enfoncé pendant un certain laps de temps | ||
Sur clic flèche | 38 | La 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 :
Constante | Valeur | Description |
Sur déployer | 43 | Un élément de liste hiérarchique a été déployé via un |
clic ou une touche du clavier | ||
Sur contracter | 44 | Un élément de liste hiérarchique a été contracté via un |
clic ou une touche du clavier |
Zones Web
Les événements suivants sont générés uniquement pour les objets de type Zone Web :
Constante | Valeur | Description |
Sur chargement ressource URL | 48 | Une nouvelle ressource est chargée dans la zone Web |
Sur début chargement URL | 47 | Un nouvel URL est chargé dans la zone Web |
Sur erreur chargement URL | 50 | Une erreur s'est produite durant le chargement de l'URL |
Sur filtrage URL | 51 | Un URL a été bloqué par la zone Web |
Sur fin chargement URL | 49 | Toutes les ressources de l'URL ont été chargées |
Sur ouverture lien externe | 52 | Un URL externe a été ouvert dans le navigateur |
Sur refus ouverture fenêtre | 53 | Une fenêtre pop up a été bloquée |
Note : Les événements spécifiques des formulaires de sortie ne peuvent pas être utilisés avec les formulaires projet. Il s'agit de : Sur affichage corps, Sur ouverture corps, Sur fermeture corps, Sur chargement ligne, Sur entête, Sur impression corps, Sur impression sous total, Sur impression pied de page.
Evénements et méthodes
Lorsqu'un événement formulaire se produit, 4D 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 la propriété d'événement "Déposable" est sélectionnée pour l'objet). La méthode formulaire ne sera pas appelée.
A l'inverse, pour l'événement Sur début glisser, la méthode objet ou la méthode formulaire de l'objet glissé sera appelée (si la propriété d'événement "Glissable" est sélectionnée pour l'objet).
ATTENTION : Contrairement aux autres événements, pendant un événement Sur début glisser ou Sur glisser, la méthode appelée 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. Pour plus d'informations, reportez-vous à la section Présentation du Glisser-Déposer.
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énement | Méthode(s) | Méthode | Quel(s) |
objet | formulaire | objet(s) | |
Sur chargement | Oui | Oui | Tous |
Sur libération | Oui | Oui | Tous |
Sur validation | Oui | Oui | Tous |
Sur clic | Oui (si cliquable) (*) | Oui | Seul l'objet impliqué |
Sur double clic | Oui (si cliquable) (*) | Oui | Seul l'objet impliqué |
Sur avant frappe clavier | Oui (si saisissable) (*) | Oui | Seul l'objet impliqué |
Sur après frappe clavier | Oui (si saisissable) (*) | Oui | Seul l'objet impliqué |
Sur après modification | Oui (si saisissable) (*) | Oui | Seul l'objet impliqué |
Sur gain focus | Oui (si tabulable) (*) | Oui | Seul l'objet impliqué |
Sur perte focus | Oui (si tabulable) (*) | Oui | Seul l'objet impliqué |
Sur activation | Jamais | Oui | Aucun |
Sur désactivation | Jamais | Oui | Aucun |
Sur appel extérieur | Jamais | Oui | Aucun |
Sur début glisser | Oui (si glissable) (**) | Oui | Seul l'objet impliqué |
Sur déposer | Oui (si déposable) (**) | Oui | Seul l'objet impliqué |
Sur glisser | Oui (si déposable) (**) | Jamais | Seul l'objet impliqué |
Sur début survol | Oui | Oui | Tous |
Sur survol | Oui | Oui | Tous |
Sur fin survol | Oui | Oui | Tous |
Sur menu sélectionné | Jamais | Oui | Aucun |
Sur données modifiées | Oui (si modifiable) (*) | Oui | Seul l'objet impliqué |
Sur appel zone du plug in | Oui | Oui | Seul l'objet impliqué |
Sur entête | Oui | Oui | Tous |
Sur impression corps | Oui | Oui | Tous |
Sur impression sous total | Oui | Oui | Tous |
Sur impression pied de page | Oui | Oui | Tous |
Sur case de fermeture | Jamais | Oui | Aucun |
Sur affichage corps | Oui | Oui | Tous |
Sur ouverture corps | Jamais | Oui | Aucun |
Sur fermeture corps | Jamais | Oui | Aucun |
Sur redimensionnement | Jamais | Oui | Aucun |
Sur nouvelle sélection | Oui (***) | Oui | Seul l'objet impliqué |
Sur chargement ligne | Jamais | Oui | Aucun |
Sur minuteur | Jamais | Oui | Aucun |
Sur avant saisie | Oui (List box) | Jamais | Seul l'objet impliqué |
Sur déplacement colonne | Oui (List box) | Jamais | Seul l'objet impliqué |
Sur déplacement ligne | Oui (List box) | Jamais | Seul l'objet impliqué |
Sur redimensionnement colonne | Oui (List box) | Jamais | Seul l'objet impliqué |
Sur clic entête | Oui (List box) | Jamais | Seul l'objet impliqué |
Sur après tri | Oui (List box) | Jamais | Seul l'objet impliqué |
Sur clic long | Oui (Bouton 3D) | Oui | Seul l'objet impliqué |
Sur clic flèche | Oui (Bouton 3D) | Oui | Seul l'objet impliqué |
Sur déployer | Oui (Liste hiér.) | Jamais | Seul l'objet impliqué |
Sur contracter | Oui (Liste hiér.) | Jamais | Seul l'objet impliqué |
Sur chargement ressource URL | Oui (Zone Web) | Jamais | Seul l'objet impliqué |
Sur début chargement URL | Oui (Zone Web) | Jamais | Seul l'objet impliqué |
Sur erreur chargement URL | Oui (Zone Web) | Jamais | Seul l'objet impliqué |
Sur filtrage URL | Oui (Zone Web) | Jamais | Seul l'objet impliqué |
Sur fin chargement URL | Oui (Zone Web) | Jamais | Seul l'objet impliqué |
Sur ouverture lien externe | Oui (Zone Web) | Jamais | Seul l'objet impliqué |
Sur refus ouverture fenêtre | Oui (Zone Web) | Jamais | Seul l'objet impliqué |
(*) Référez-vous ci-dessous au paragraphe "Evénements, objets et propriétés" pour plus d'informations.
(**) Référez-vous à la section "Présentation du Glisser-Déposer" 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 Développement (en utilisant la Liste des proprié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 4D, 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 modificateurs 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 Développement). 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.
4D 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 4D.
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énement | Contexte | |
Sur données modifiées | Un élément était en édition | |
Sur déployer / Sur contracter | Ouverture/fermeture de sous-liste à l'aide des touches | |
fléchées -> ou <- | ||
Sur nouvelle sélection | Sélection d'un nouvel élément | |
Sur clic | Activation de la liste par le clavier |
- Suite à un clic souris (dans l'ordre) :
Evénement | Contexte | |
Sur données modifiées | Un élément était en édition | |
Sur déployer / Sur contracter | Ouverture/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élection | Sélection d'un nouvel élément | |
Sur clic / Sur double clic | Activation de la liste par un clic ou un double-clic |
Zones Web
Sept événements formulaires spécifiques sont disponibles pour les zones Web :
Sur début chargement URL : cet événement est généré au début du chargement d'un nouvel URL dans la zone Web. La variable "URL" associée à la zone Web vous permet de connaître l'URL en cours de chargement.
Note : L'URL en cours de chargement est différent de l'URL courant (reportez-vous à la description de la commande WA Lire URL courant).
Sur chargement ressource URL : cet événement est généré à chaque chargement d'une nouvelle ressource (image, frame, etc.) dans la page Web courante. La variable "Progression du chargement" associée à la zone vous permet de connaître l'état courant du chargement.
Sur fin chargement URL : cet événement est généré lorsque toutes les ressources de l'URL courant ont été chargées. Vous pouvez appeler la commande WA Lire URL courant afin de connaître l'URL chargé.
Sur erreur chargement URL : cet événement est généré lorsqu'une erreur a été détectée au cours du chargement d'un URL. Vous pouvez appeler la commande WA LIRE DERNIERE ERREUR URL afin d'obtenir des informations sur l'erreur.
Sur filtrage URL : cet événement est généré lorsque le chargement d'un URL a été bloqué par la zone Web du fait d'un filtre mis en place via la commande WA FIXER FILTRES URL. Vous pouvez alors connaître l'URL bloqué à l'aide de la commande WA Lire dernier URL filtre.
Sur ouverture lien externe : cet événement est généré lorsque le chargement d'un URL a été bloqué par la zone Web et que l'URL a été ouvert avec le navigateur courant du système, du fait d'un filtre mis en place via la commande WA FIXER FILTRES LIENS EXTERNES. Vous pouvez alors connaître l'URL bloqué à l'aide de la commande WA Lire dernier URL filtre.
Sur refus ouverture fenêtre : cet événement est généré lorsque l'ouverture d'une fenêtre pop up a été bloquée par la zone Web. En effet, les zones Web 4D ne permettent pas l'ouverture de fenêtres pop up. Vous pouvez alors connaître l'URL bloqué à l'aide de la commande WA Lire dernier URL filtre.
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 $0:=0 Sinon ` Sinon, refuser l'opération $0:=-1 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.