Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD10]Position X Y d'une zone de saisie

2 réponses
Avatar
Pascal ROY
Bonjour,

Je cherche à connaitre par programmation la position X et Y
d'une zone de saisie.
Attention, je ne parle pas d'un champs de saisie, ça je sais, mais
de la zone de saisie d'un champs !


Quelqu'un sait comment faire ?
--
Pascal ROY
(Service Informatique - SODALEC)

2 réponses

Avatar
Pascal F
Pascal ROY avait prétendu :
Bonjour,

Je cherche à connaitre par programmation la position X et Y
d'une zone de saisie.
Attention, je ne parle pas d'un champs de saisie, ça je sais, mais
de la zone de saisie d'un champs !


Quelqu'un sait comment faire ?



J'ai développé dans un composant gérant une simili combo, une fonction pour positionner l'ouverture de ma fenetre, sur le bord
gauche de la zone de saisie d'un champ et sous la zone de saisie donc je te fournis le code qui gère ça:

//
// Syntaxe :
//EntreeChamp (<NomCol>, <cNomChamp> [, <peCol> [, <peLign>]])
//
// Paramètres :
// NomCol : Nom de la colonne de la combo sur laquelle on va faire les recherches
// cNomChamp : Nom du champ appelant la méthode d'entrée du champ (MoiMême..nom= champ courant)
// peCol (valeur par défaut=0) : Offset supplémentaire de colonne pour l'affichage de la combo (en pixel)
// peLign (valeur par défaut=0) : Offset supplementaire de ligne pour l'affichage de la combo (en pixel)
// Valeur de retour :
// Aucune
// Notes :
// Cette méthode est appellée à chaque fois que l'on entre dans un champ utilisant la ComboFLO
// L'évènement de déplacement par les flèches est créé, puis les champs défini par les variables de l'instances sont sauvés
(SauveChamps)
// Si la fenetre existe, les colonnes sont triés sur la colonne, puis la fenetre est préparée et affichée
// La position de la zone de saisie est automatiquement calculée.
//
// Exemple :
// Comboc:EntreeChamp("_Col2",moimeme..nom)
//



PROCEDURE ComboHF::EntreeChamp(NomCol,cNomChamp,peCol=0,peLign=0)

eInt est un entier
eLargeur est un entier

:m_cNomCol=NomCol
:ColCle=NomCol[[5 A ]]
:Taille_champ=0
cChamp est une chaîne=cNomChamp
cParent est une chaîne=ParentObjet(cChamp)
SI Position(cChamp,".") ALORS
cChamp=ExtraitChaîne(cChamp,2,".")
FIN

:ChampCourant=:Mere+"."+cNomChamp
// Récupère la largeur de la zone de saisie du champ de saisie
stSaisieRECT est un prep_combo.RECT
SendMessage(Handle(:ChampCourant), 0x00B2, 0, &stSaisieRECT) // 0x00B2 = EM_GETRECT : récupère les dimensions de la zone de
saisie d'un champ de saisie
eLargeur = stSaisieRECT:nPosDroite - stSaisieRECT:nPosGauche

// Calcule la position de la popup par rapport à la zone de saisie du champ de saisie

:m_nPosY={:ChampCourant,indChamp}..Y+FenIntPosY(:Mere)+peLign
:m_nPosX={:ChampCourant,indChamp}..X+FenIntPosX(:Mere)+({:ChampCourant, indChamp}..Largeur - eLargeur-6)+peCol
SI {cParent,indChamp}..Type=typTable ALORS
// gestion dans les tables
:m_nPosX+={cParent,indChamp}..X
// calcul de la position d'affichage dans la table
eLargeur=TableSelect({cParent,indChamp}..Nom)-TablePosition({cParent,indChamp}..Nom)
SI :m_eHligne=0 ALORS :m_eHligne=({cParent, indChamp}[1]..Hauteur+1)
SI :m_eHtitre=0 ALORS :m_eHtitre=({cParent, indChamp}..HauteurLigne*2)
:m_nPosY+={cParent,indChamp}..Y+(:m_eHligne*eLargeur)+:m_eHtitre+3
SINON
:m_nPosY+={:ChampCourant, indChamp}..Hauteur
FIN


Definition de la structure Rect:
RECT est une structure // récupération de la position de la zone de saisie d'un champ avec saisie
nPosGauche, nPosHaut, nPosDroite, nPosBas sont des entiers
FIN

--
Pascal

Ne garder que le prénom pour me joindre
Avatar
Jacques Bratières
Le Fri, 03 Aug 2007 10:39:56 +0200, Pascal ROY a
écrit:

Bonjour,

Je cherche à connaitre par programmation la position X et Y
d'une zone de saisie.
Attention, je ne parle pas d'un champs de saisie, ça je sais, mais
de la zone de saisie d'un champs !


Quelqu'un sait comment faire ?



TableinfoXY et ses frères et soeurs.

--
J.Bratières