Nouveaux événements formulaires en 4D 2004

Jean-Yves FOCK-HOON

Cette note technique illustre les nouveaux événements formulaires ajoutés en 4D 2004 pour les boutons 3D, Sur clic long, Sur clic flèche ainsi que les événements Sur début survol, Sur survol, Sur fin survol. ♪

- Titre : Nouveaux événements formulaires en 4D 2004

- Auteur : Jean-Yves FOCK-HOON

- Parution : 1 janvier 2006

- Licence : Ce document est issu de https://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Sommaire

- Introduction

- Les nouveaux événements formulaires

- Événements dans l'exemple 1

- Les événements de l'exemple 2

- Conclusion

- Base exemple

Introduction

Cette note technique illustre les nouveaux événements formulaires ajoutés en 4D 2004 pour les boutons 3D.

Cette note reprend une interface et une technique utilisée par Gérard Czwiklinski dans la note 4D-200208-25-FR "Une carte au menu".

Les nouveaux événements formulaires

Avec 4D 2004, les objets comme les boutons 3D et les boutons image ont été améliorés. Ainsi de nouveaux événements ont été implémentés pour tirer parti de ces nouvelles fonctionnalités.

Cette note technique couvre les événements suivants :

· sur début survol ;
· sur survol ;
· sur fin survol ;
· sur clic long ;
· sur clic flèche.

Dans les versions précédentes, vous deviez écrire beaucoup de code pour obtenir ce que vous souhaitiez et peut-être même deviez-vous utiliser des commandes comme APPELER SUR EVENEMENT ou utiliser l'événement SUR MINUTEUR.

Avec l'apparition des nouveaux événements en version 2004 vous allez pouvoir mieux maîtriser les survols. Ces nouveaux événements sont générés pour les objets visibles dans la fenêtre de premier plan. Si vous manipulez plusieurs process, l'événement sera généré pour le process de premier plan seulement, excepté si les autres process sont aussi des palettes flottantes. Par exemple, si vous avez une palette flottante avec un objet qui utilise l'événement Sur survol, et une fenêtre principale, une fenêtre normale, avec le même objet, déplacer la souris sur un des objets lancera l'événement pour chaque process. Si les deux process sont des fenêtres standards, seulement le process de premier plan recevra l'événement.

Si plusieurs objets l'un sur l'autre lance le même événement, l'événement sera seulement retourné par l'objet de premier plan.

Événements dans l'exemple 1

Notre base exemple affiche deux dialogues avec une carte de France. En utilisant les nouveaux événements, nous allons améliorer l'interface. Notre base est construite pour être utilisée en Menus Créés : elle utilise un Menu Démonstration avec deux lignes de Menus, Démo 1 et Démo 2.

En sélectionnant la ligne de Menu Démo 1, on affiche une carte de France. Lorsque vous déplacez le pointeur de la souris au-dessus de la carte, vous verrez que quelques variables s'affichent. Quand le pointeur est au-dessus d'un département, ces variables affichent le nom du département et le nom de sa région. Si le pointeur se situe en dehors de la carte, seulement les coordonnées du curseur sont affichées.

Voyons comment cela fonctionne...

La ligne de Menu Démo 1 exécute la Méthode projet AfficheCarte1.
Cette méthode exécute la Méthode projet Creer_Masque, qui construit le masque de la carte, de façon à pouvoir localiser le pointeur de la souris sur un département.
La méthode principale appelle alors un dialogue avec le formulaire [Interface]DisplayMap1.
Ce formulaire contient un bouton image, vMap, avec la Méthode objet suivante :

code 4D - Méthode objet du bouton vMap

vMap:=0

Au cas ou

: (Evenement formulaire=Sur survol ) | (Evenement formulaire=Sur clic )
POSITION SOURIS($x;$y;$bt)
`$x:=$x-20
`$y:=$y-20

`looking for state #
$yMax:=Taille tableau(Pixel_departement)
$xMax:=Taille tableau(Pixel_departement{$ymax})
Si (($x<=$xMax) & ($y<=$yMax) & ($x>0) & ($y>0))
$Region:=Pixel_departement{$y}{$x}
Sinon
$Region:=255
Fin de si

Si ($Region#255)
CHERCHER([Departements];[Departements]NumeroDepartement=$Region)
vdepartement:=[Departements]Nom
vNrDepart:=[Departements]NumeroDepartement
CHARGER SUR LIEN([Departements])
vRegion:=[Régions]Région
Sinon
vdepartement:=""
vNrDepart:=""
vRegion:=""
Fin de si

vXYMouse:="X: "+Chaine($x)+"-"+"Y: "+Chaine($y)

: (Evenement formulaire=Sur début survol )
CHOIX VISIBLE(*;"yv@";Vrai)

: (Evenement formulaire=Sur fin survol )
CHOIX VISIBLE(*;"yv@";Faux)

Fin de cas

Comme vous le constatez, le Au cas où gère nos trois premiers événements formulaires :

• l'événement Sur debut survol intervient lorsque le pointeur de la souris pénètre dans la zone définie pour un objet. La Méthode objet est appelée une seule fois. Dans notre exemple, l'information sur les départements, la capitale administrative et les coordonnées de la souris sont invisibles par défaut. Quand le pointeur de la souris pénètre dans une zone spécifique, nous rendons ces informations visibles ;

• l'événement Sur survol intervient chaque fois que la souris se déplace au moins d'un pixel à l'intérieur de la zone. La Méthode objet est appelée à chaque fois que c'est possible. Par exemple, si l'exécution de la méthode qui gère l'événement est très rapide, un certain nombre d'événements sera généré en déplaçant la souris. Ainsi, quand la méthode prend plus de temps à être exécutée, moins d'événements sont générés.

Gardez à l'esprit que l'exécution des événements Sur minuteur ou Sur appel extérieur peut interférer avec cet événement puisque'une seule méthode peut être exécutée à la fois dans votre process courant. Dans l'exemple, nous retrouvons les coordonnées de la souris. Si les nouvelles coordonnées sont valides, vous pouvez vérifier dans le tableau défini dans la Méthode Créer_Masque pour voir si la souris est en haut d'un département. Le tableau retournera l'ID du département ou la valeur 255. En fonction de cette valeur, nous pouvons chercher le département et la région et renseigner les variables qui sont désormais visibles.

• l'événement Sur fin survol intervient lorsque la souris quitte la zone graphique définie par un objet. La Méthode objet est appelée une fois. Dans notre exemple, nous rendons à nouveau nos informations invisibles à nouveau lorsque le curseur n'est plus sur notre zone graphique.

Les événements de l'exemple 2

Voyons maintenant l'exemple 2. Un dialogue similaire apparaît. Mais les fonctionnalités de ce dialogue sont complètement différentes de l'exemple 1. Nous ne cachons plus les informations. Lorsque nous déplaçons la souris au-dessus de la carte, nous pouvons voir que les informations sont toujours à jour, mais le nom de la région à une apparence différente.

Le nom de la région est maintenant un bouton image 3D, mais avec aucune image, seulement un titre. On peut voir une flèche à la droite du bouton. Ceci affiche un pop-up menu. Dans les anciennes versions, vous pouviez avoir à dessiner un second objet, comme un autre bouton image avec une image représentant une flèche et créer le script qui affichera le pop-up menu. Il y a maintenant de nouvelles fonctionnalités avec les boutons 3D : vous pouvez automatiquement ajouter la flèche dans l'objet bouton. Nous verrons plus tard comment cela fonctionne. Un clic sur la flèche affiche le pop-up menu. Un clic sur le bouton lui-même affiche les informations de la région et un clic long sur le bouton affiche le drapeau.

La carte elle-même est un bouton image 3D qui gère les événements Sur clic et Sur clic long. Cliquez n'importe où sur la carte et un nouveau dialogue s'affichera avec toutes les informations sur cette région. Cliquez sur n'importe quelle région et maintenez le bouton et l'événement Sur clic long est géré. Un autre dialogue qui contient le drapeau de la région est alors affiché.

Ces deux dialogues peuvent être fermés par un simple clic sur la fenêtre.

Voyons comment cela fonctionne...

La méthode utilisée est AfficheCarte2.
Cette méthode est identique à la première, mais elle utilise un formulaire différent, [Interface]AfficheCarte2.
Voici la méthode objet de cette carte :

code 4D - Méthode objet de la carte

Au cas ou

: (Evenement formulaire=Sur survol ) | (Evenement formulaire=Sur clic )
| (Evenement formulaire=Sur clic long )
POSITION SOURIS($x;$y;$bt)

$yMax:=Taille tableau(Pixel_departement)
$xMax:=Taille tableau(Pixel_departement{$ymax})

Si (($x<=$xMax) & ($y<=$yMax) & ($x>0) & ($y>0))
$Departement:=Pixel_departement{$y}{$x}
Sinon
$Departement:=255
Fin de si

Si ($Departement#255)
CHERCHER([Departements];[Departements]NumeroDepartement=$Departement)
CHARGER SUR LIEN([Departements])
vRegion:=[Régions]Région
vCapitale:=[Régions]Capitale
vRegion_ID:=[Régions]NumeroRegion
TITRE BOUTON(bRegion;vRegion)

Au cas ou

: (Evenement formulaire=Sur clic )
$ref:=Nouveau process("M_afficheRegion";?ProcessStack;
"Edit_"+vRegion;vRegion_ID;*)
PASSER AU PREMIER PLAN($ref)

: (Evenement formulaire=Sur clic long )
$ref:=Nouveau process("M_afficheDrapeau";?ProcessStack;
"Flag_"+vRegion;vRegion_ID;*)
PASSER AU PREMIER PLAN($ref)

Fin de cas

Fin de si

vXYMouse:="X: "+Chaine($x)+"-"+"Y: "+Chaine($y)

Fin de cas

Comme nous pouvons le voir, la Méthode objet est presque la même que celle utilisée dans le premier exemple.

L'événement Sur clic long est un événement généré lorsqu’un clic long a été détecté. Le temps utilisé par 4D pour générer cet événement est le temps défini dans votre OS pour détecter le double clic. C'est le temps qui permet au système de faire la différence entre deux simples clics et un double clic. Dans notre exemple, nous lançons un nouveau process qui affiche le drapeau grâce à la méthode projet M_afficheDrapeau.

L'événement Sur clic long est très différent de l'événement Sur clic. Sur notre formulaire, un simple clic lance un autre process basé sur la Méthode M_afficheRegion.

L'objet qui affiche le nom de la région est un bouton image 3D nommé bRegion.
Voici la Méthode objet de ce bouton :

code 4D - Méthode objet du bouton bRegion

Au cas ou

: (Evenement formulaire=Sur clic )
Si (vRegion#"")
$ref:=Nouveau process("M_afficheRegion";<>ProcessStack;"Edit_"+vRegion;vRegion_ID;*)
Fin de si

: (Evenement formulaire=Sur clic long )
Si (vRegion#"")
$ref:=Nouveau process("M_afficheDrapeau";<>ProcessStack;"Flag_"+vRegion;vRegion_ID;*)
Fin de si

: (Evenement formulaire=Sur clic flèche )
$RegionID:=Pop up menu(<>PopupRegions)
Si ($RegionID>0)
CHERCHER([Régions];[Régions]NumeroRegion=$RegionID)
TITRE BOUTON(bRegion;[Régions]Région)
vCapitale:=[Régions]Capitale
Fin de si

Fin de cas

L'événement Sur clic flèche est généré aussitôt que l'utilisateur clique sur la flèche. C'est ici que vous pouvez exécuter votre code, comme construire un pop-up menu et l'afficher. Une fois que l'utilisateur a sélectionné un item, nous cherchons les informations sur la région et les affichons.

Un clic sur le nom de la région créera un nouveau process qui affichera les données, tandis que le clic long affichera le drapeau. Ceci illustre la différence de comportement entre le clic long et le clic.

À noter :
Si sous Windows, les données concernant les régions et départements ne s'affichent pas, vérifiez la version de Quicktime installée. Il devrait suffire de faire une mise à jour pour que les niveaux de gris de l'image "Masque" permettent le fonctionnement.

Conclusion

Les nouveaux événements sont très pratiques si nous voulons peaufiner notre interface. Avec l'événement Sur clic long, vous n'avez plus besoin d'utiliser un code complexe pour l'exécution de différentes tâches. Avec les événements Sur survol, Sur début survol et Sur fin survol, vous suivez très facilement les déplacements

Base exemple

Télécharger la base exemple.