Developpez.com - 4D
X

Choisissez d'abord la catégorieensuite la rubrique :


Nouveaux événements formulaires en 4D 2004

Date de publication : Janvier 2006

Par Jean-Yves FOCK-HOON (4D Inc.)
 

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.

Introduction
Les nouveaux événements formulaires
Evenements 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 un 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énément 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énément.

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.


Evenements 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és.

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 ou 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 penè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.

idea 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 lebouton 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é lorsque 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.

info A 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.

__________________________________________________
Copyright © 1985-2009 4D SA - Tous droits réservés
Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible.
Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte. L'auteur et 4D S.A. déclinent donc toute responsabilité quant à l'utilisation qui pourrait être faite de ces éléments, tant à l'égard de leurs utilisateurs que des tiers.
Les informations contenues dans ce document peuvent faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager 4D SA. La fourniture du logiciel décrit dans ce document est régie par un octroi de licence dont les termes sont précisés par ailleurs dans la licence électronique figurant sur le support du Logiciel et de la Documentation afférente. Le logiciel et sa documentation ne peuvent être utilisés, copiés ou reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette licence.
Aucune partie de ce document ne peut être reproduite ou recopiée de quelque manière que ce soit, électronique ou mécanique, y compris par photocopie, enregistrement, archivage ou tout autre procédé de stockage, de traitement et de récupération d'informations, pour d'autres buts que l'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA.
4D, 4D Calc, 4D Draw, 4D Write, 4D Insider, 4ème Dimension ®, 4D Server, 4D Compiler ainsi que les logos 4e Dimension, sont des marques enregistrées de 4D SA.
Windows,Windows NT,Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation.
Apple, Macintosh, Power Macintosh, LaserWriter, ImageWriter, QuickTime sont des marques enregistrées ou des noms commerciaux de Apple Computer,Inc.
Mac2Win Software Copyright © 1990-2002 est un produit de Altura Software,Inc.
4D Write contient des éléments de "MacLink Plus file translation", un produit de DataViz, Inc,55 Corporate drive,Trumbull,CT,USA.
XTND Copyright 1992-2002 © 4D SA. Tous droits réservés.
XTND Technology Copyright 1989-2002 © Claris Corporation.. Tous droits réservés ACROBAT © Copyright 1987-2002, Secret Commercial Adobe Systems Inc.Tous droits réservés. ACROBAT est une marque enregistrée d'Adobe Systems Inc.
Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.
__________________________________________________
 



Valid XHTML 1.1!Valid CSS!

Ce document est issu de http://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.
Contacter le responsable de la rubrique 4D