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 :
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
(
Pi
xel_departement)
$xMax
:=
Taille tableau
(
Pi
xel_departement{$ymax
})
Si
((
$x
<=
$xMax
)
&
(
$y
<=
$yMax
)
&
(
$x
>
0
)
&
(
$y
>
0
))
$Region
:=
Pi
xel_departement{$y
}{$x
}
Sinon
$Region
:=
255
Fin de si
Si
(
$Region
#
255
)
CHERCHER
([
Departements];[
Departements]
Num
eroDepartement=
$Region
)
vdepartement:=[
Departements]
Nom
vNrDepart:=[
Departements]
Num
eroDepartement
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 :
Au cas ou
: (
Evenement formulaire
=
Sur survol
)
|
(
Evenement formulaire
=
Sur clic
)
|
(
Evenement formulaire
=
Sur clic long
)
POSITION SOURIS
(
$x
;
$y
;
$bt
)
$yMax
:=
Taille tableau
(
Pi
xel_departement)
$xMax
:=
Taille tableau
(
Pi
xel_departement{$ymax
})
Si
((
$x
<=
$xMax
)
&
(
$y
<=
$yMax
)
&
(
$x
>
0
)
&
(
$y
>
0
))
$Departement
:=
Pi
xel_departement{$y
}{$x
}
Sinon
$Departement
:=
255
Fin de si
Si
(
$Departement
#
255
)
CHERCHER
([
Departements];[
Departements]
Num
eroDepartement=
$Departement
)
CHARGER SUR LIEN
([
Departements])
vRegion:=[
Régions]
Région
vCapitale:=[
Régions]
Capitale
vRegion_ID:=[
Régions]
Num
eroRegion
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 :
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]
Num
eroRegion=
$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.