PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Se positionner sur une colonne située tout à droite
Se positionner sur une colonne située tout à droite
Débuté par Vincent DUBREIL, 09 déc. 2025 14:42 - 8 réponses
Membre enregistré
71 messages
Posté le 09 décembre 2025 - 14:42
Bonjour le forum,

voici mon problème
J'ai une table mémoire qui contient beaucoup de colonnes, celles de droite étant du coup à droite et donc non visible à moins de scroller.
Je cherche un moyen de me positionner sur une de ces colonnes pour la montrer à l'utilisateur sans qu'il n'est besoin de scroller manuellement.
J'ai essayé avec des RepriseSaisie() et ce genre de fonction mais rien ne semble marcher
Si vous avez une idée?!

--
______________________________________
Vincent DUBREIL
Membre enregistré
290 messages
Posté le 09 décembre 2025 - 14:51
Bonjour,

Normalement avec la fonction AscenseurPosition() en spécifiant l'orientation "ascHorz"

Sinon, tu peux utiliser un message Windows :
SendMessage(Handle(Table1), 0x0114, 7, 0)


Cdlt
Membre enregistré
71 messages
Posté le 09 décembre 2025 - 15:50
Merci pour ta réponse Fabrice N, AscenseurPosition semble correspondre à mon besoin mais comment faire pour savoir à quelle position le situer justement.
J'ai essayé de mettre l'indice de la colonne, l'ascenseur bouge très légèrement mais ne se déplace pas pour montrer la colonne en question

Sais-tu à quoi correspond la position dans cette fonction ?

J'ai également essayé le SendMessage et là, pour le coup, l'ascenseur va directement tout à droite.
J'ai trouvé la documentation pour gérer l'ascenseur mais je ne pense pas que ça va correspondre

Je dois vraiment positionner l'ascenseur pour voir la colonne C, quelle soit au milieu, au 3/4, tout à droite,etc...

--
______________________________________
Vincent DUBREIL
Membre enregistré
21 messages
Posté le 09 décembre 2025 - 16:39
Bonjour,
Vous devriez arriver à faire cela avec AscenseurPosition() et AscenseurPositionMax()

L'ascenseur horizontal varie de 1 à AscenseurPositionMax()

A vous de gérer le positionnement proportionnel (selon la largeur de chaque colonne)

https://doc.pcsoft.fr/fr-FR/?1000021057&lang=fr-FR&productversion=xxF280095g

Bon dev.
Membre enregistré
290 messages
Posté le 09 décembre 2025 - 16:50
Vincent DUBREIL a écrit :
> Sais-tu à quoi correspond la position dans cette fonction ?
Si Orientation = ascHorz, c'est la position de départ de l’ascenseur horizontal par rapport au coté gauche (ou X) de la table

En principe, si tu ne vois pas la colonne, cela signifie que sa position X est supérieure à la largeur de la table.
L'idée que je propose serait de calculer la nouvelle position de l'ascenseur en fonction de la position X de la colonne. Et cela uniquement si la position X de cette colonne est supérieure à la largeur de la table.
Essayes avec ça. Il faudra peut être améliorer le code en fonction du style de la table (cadre inter/externe par ex)
AscenseurPosition(Table1, ascHorz, 1) // On positionne l'ascenseur à gauche
nPositionColonne est un entier = Colonne15..X+Colonne15..Largeur
nLargeurTable est un entier = Table1..Largeur-20 // On retire 20 pixels si la table dispose d'un sélecteur de ligne
SI nPositionColonne>nLargeurTable ALORS AscenseurPosition(Table1, ascHorz, nPositionColonne-nLargeurTable) // Nouvelle position de l'ascenseur


Sinon, il y a aussi la fonction TableDéplaceColonne()

Cdlt
Membre enregistré
953 messages
Posté le 09 décembre 2025 - 17:00
bonjour Vincent,

avez vous essayé comme le proposait Fabrice N, AscenseurPosition() avec en complément AscenseurPositionMax().

Est-ce que toute vos colonnes ont la même largeur ?

Nombre de colonnes visibles -> A
AscenseurPositionMax() -> T
Nombre de colonnes jusqu'à celle que vous souhaitez -> B

A->T
B-> ?

puis faire un produit en croix

B*T / A

J'espère ne pas être trop fouillis dans mon explication :D


Bon dèv



Vincent DUBREIL a écrit :
Merci pour ta réponse Fabrice N, AscenseurPosition semble correspondre à mon besoin mais comment faire pour savoir à quelle position le situer justement.
J'ai essayé de mettre l'indice de la colonne, l'ascenseur bouge très légèrement mais ne se déplace pas pour montrer la colonne en question

Sais-tu à quoi correspond la position dans cette fonction ?

J'ai également essayé le SendMessage et là, pour le coup, l'ascenseur va directement tout à droite.
J'ai trouvé la documentation pour gérer l'ascenseur mais je ne pense pas que ça va correspondre

Je dois vraiment positionner l'ascenseur pour voir la colonne C, quelle soit au milieu, au 3/4, tout à droite,etc...

--
______________________________________
Vincent DUBREIL
Membre enregistré
71 messages
Posté le 10 décembre 2025 - 09:42
Merci à tous pour vos réponses et particulièrement à Fabrice N :)
Ton code marche parfaitement
J'en attendais pas autant, un grand merci :merci:

--
______________________________________
Vincent DUBREIL
Membre enregistré
5 messages
Posté le 10 décembre 2025 - 12:37
Bonjour Vincent

Pourquoi ne pas utiliser la fonction "DonneFocus(TABLE_XXX.COL_XX)" ?
Fonctionne que j'utilise souvent.

Si la table n'est pas en saisie, utilise:
TABLE_XX.EnSaisie = Vrai
DonneFocus(TABLE_XXX.COL_XX)
TABLE_XX.EnSaisie = Faux
Membre enregistré
1 009 messages
Posté le 10 décembre 2025 - 13:14
Bonjour,
Petite précision pour la solution de Jean-Paul PELISSERO, il faut définir un mode de sélection des Lignes dans la description de la table
Cdlt