4D v15

OBJECT GET COORDINATES

Accueil

 
4D v15
OBJECT GET COORDINATES

OBJECT GET COORDINATES  


 

 

OBJECT GET COORDINATES ( {* ;} objet ; gauche ; haut ; droite ; bas )

Introduit dans 4D v14 R5

Thème : Objets (Formulaires)

La commande OBJECT GET COORDINATES peut désormais retourner les coordonnées de parties spécifiques des list box, c.-à-d. des colonnes, en-têtes ou pieds, et non uniquement celles de l'objet list box parent.

Dans les versions précédentes de 4D, cette commande retournait toujours les coordonnées de la list box parente, quelle que soit la zone passée en paramètre. Désormais, lorsque le paramètre objet référence un en-tête, une colonne ou un pied de list box, ce sont les coordonnées de ce sous-objet qui sont retournées.

Vous pouvez utiliser ce nouveau fonctionnement, par exemple, pour afficher une petite icône dans la cellule d'en-tête d'une list box lorsqu'elle est survolée par le curseur, indiquant à l'utilisateur qu'il peut cliquer pour afficher un menu contextuel.

Note de compatibilité : Si vous utilisiez cette commande avec un en-tête, une colonne ou un pied de list box dans vos applications existantes, les coordonnées retournées seront différentes après conversion en 4D v14 R5 ou supérieure. Si vous souhaitez obtenir les coordonnées de la list box elle-même, vous devez modifier votre code de manière à ce que la commande soit appliquée à l'objet list box et non à l'un de ses sous-objets.

Pour des raisons de cohérence, le cadre de référence utilisé par la commande est le même, qu'elle travaille avec un objet list box ou un sous-objet de la list box : le point d'origine est le coin supérieur gauche du formulaire contenant l'objet. Pour les sous-objets de list box, les coordonnées retournées sont théoriques ; elles prennent en compte le défilement appliqué à la list box avant tout éventuel clipping (c.-à-d. le découpage effectué en fonction des coordonnées de la list box parente). Par conséquent, le sous-objet peut ne pas être visible, ou être partiellement visible, et ses coordonnées peuvent se trouver en-dehors des limites du formulaire (voire être négatives). Pour déterminer si le sous-objet est visible (et quelle partie est visible), vous devez comparer les coordonnées retournées avec celles de la list box elle-même, en tenant compte des règles suivantes : 

  • Les limites des sous-objets dépendent des coordonnées de leur list box parente (telles que retournées par la commande OBJECT GET COORDINATES pour la list box).
  • Les sous-objets en-tête et pied sont affichés au-dessus du contenu de la colonne : lorsque les coordonnées d'une colonne coupent celles d'une ligne d'en-tête ou de pied, la colonne n'est pas affichée à l'emplacement de l'intersection.
  • Les éléments des colonnes verrouillées sont affichés au-dessus des éléments des colonnes défilables : lorsque les coordonnées d'un élément d'une colonne défilable croisent celles d'un élement d'une colonne verrouillée, il n'est pas affiché à l'emplacement de l'intersection.

Par exemple, examinez le schéma suivant, dans lequel les coordonnées de la colonne Capital sont symbolisées par un rectangle rouge :

Comme vous pouvez le voir dans la première image, la colonne est plus grande que la list box, donc ses coordonnées dépassent la limite basse de la list box, pied inclus. Dans la seconde image, la list box a défilé, et donc la colonne a également été déplacée "sous" les zones de la colonne Language et d'en-tête. Dans tous les cas, pour calculer la partie réellement visible de la colonne (représentée par la zone verte), vous devez soustraire les zones rouges.

Exemple  

Pour les besoins de votre interface, vous souhaitez entourer d'un rectangle rouge la zone sur laquelle l'utilisateur a cliqué :

Dans la méthode objet de la list box, vous écrivez :

 OBJECT SET VISIBLE(*;"rectangleInfo";False//initialiser un rectangle rouge
 $ptr:=OBJECT Get pointer(Object current)
 OBJECT GET COORDINATES($ptr->;$x1;$y1;$x2;$y2)
 OBJECT SET VISIBLE(*;"RedRect";True)
 OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
 
 OBJECT GET COORDINATES(*;"LB1";$lbx1;$lby1;$lbx2;$lby2)
 If($lby1>$y1)|($lby2<$y2// si la zone cliquée est en-dehors de la list box
    OBJECT SET VISIBLE(*;"Alerte";True//afficher une alerte
 Else
    OBJECT SET VISIBLE(*;"Alerte";False)
 End if

La méthode retourne les coordonnées théoriques. Si la list box est redimensionnée, vous pourrez avoir besoin de calculer le détourage afin de savoir quelle partie est visible :

 
PROPRIÉTÉS 

Produit : 4D
Thème : Langage

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

4D v15 - Mise à jour (édition standard) ( 4D v15)