Bonjour,
je vous invite à lancer une procédure qui repositionnera vos champs à chaque mouvement de la table et de ses colonnes.
Pour se faire ajouter la gestion des évènements WM_SIZE (redimensionnement), WM_MOVE (déplacement) et WM_LBUTTONUP (Bouton gauche relaché) à la table. Chacun de ces évènement appèlera alors la procédure de repositionnement des champs.
Voici un peu de code pour donner un ordre d'idée :
// WM_SIZE de Colonne1
Positionne()
// Procédure locale Positionne
// Positionne les champs sous la table dans l'alignement des colonnes assosicée
// les champs de saisies et les noms des colonnes on un nom similaire,
// seul le préfixe change. On a ainsi "SAIS_Colonne" associé à "Colonne".
// Cela permet d'utiliser l'énumération des colonnes et l'indirection
PROCEDURE Repositionne()
i est un entier
POUR i=1 A TableOccurrence(Table,toColonne)
sNomColonne est une chaîne = TableEnumèreColonne(Table,i)
SI {sNomColonne,indChamp}..Visible ALORS
// calage en largeur
{"SAIS_"+sNomColonne,indChamp}..X=Table..X+{sNomColonne,indChamp}..X
{"SAIS_"+sNomColonne,indChamp}..Largeur={sNomColonne,indChamp}..Largeur
// callage en hauteur : utiliser les ancrage.
//les champs doivent utiliser un ancrage BAS,
// la table un ancrage largeur et hauteur.
FIN
FIN
Je viens de tester avec succès : les zones suivent bien les colonnes.
Juste demeure un soucis quand on déplace une colonne (via les barres de titre), il faut cliquer dans la table pour que les champs suivent... reste donc à trouver l'enèvement qui est déclanché par le déplacement d'une colonne... ou bien trouver le moyen d'en provoquer un.