Bonjour,
Une autre solution qui est un peu plus rapide lors du relâchement du bouton gauche est de mémoriser la hauteur de chaque ligne dans un tableau à chaque modification de l'ordre ou du nombre de ligne (TableAffiche, TableTrie, TableAjoute, TableAjouteLigne, TableInsère, TableSupprime...) et de comparer l'indice de la ligne "cliquée" à l'indice mémorisé. On n'est pas obligé de boucler à chaque fois, et cela fonctionne si la hauteur à été modifiée auparavant.
Le tableau est déclaré comme variable global lors de l'ouverture de la fenêtre contenant le champ (e.g. gtabHauteurLigne)
On peut même surcharger les fonctions pour ne pas oublier la MAJ du tableau e.g.
Procedure TableAffiche(chNomTable est Champ,tabHauteurLigne est un tableau d'entier,nPosition est entier=taDébut)
WL.TableAffiche(chNomTable,nPosition)
MemoriseHauteurLigne(chNomTable,tabHauteurLigne)
Procedure TableTrie(chNomTable est Champ, tabHauteurLigne est tableau d'entier,saColonne1 est chaîne,*)
WL.TableTrie(chNomTable,saColonne1,MesParamètres[4 À ])
MemoriseHauteurLigne(chNomTable,tabHauteurLigne)
FONCTION TableAjoute(chNomChamp est Champ,tabHauteurLigne est tableau d'entier,saLigne est chaîne="") :booléen
SI WL.TableAjoute(chNomChamp,saLigne) ALORS
NouvelleHauteurLigne(chNomChamp,tabHauteurLigne)
RENVOYER Vrai
SINON
RENVOYER Faux
FIN
FONCTION TableAjouteLigne(chNomTable est Champ,tabHauteurLigne est tableau d'entier,*) : booléen
SI WL.TableAjouteLigne(chNomTable,MesParamètres[3 À]) ALORS
NouvelleHauteurLigne(chNomTable,tabHauteurLigne)
RENVOYER Vrai
SINON
RENVOYER Faux
FIN
Avec :
Procedure MemoriseHauteurLigne(LOCAL chNomTable est Champ,tabHauteurLigne est tableau d'entier)
nNoLigne est un entier
POUR nNoLigne=1 _À_ chNomTable..Occurrence
TableauAjoute(tabHauteurLigne,chNomTable[nNoLigne]..Hauteur)
FIN
Procedure NouvelleHauteurLigne(chNomTable est Champ, tabHauteurLigne est tableau d'entier)
TableauAjoute(tabHauteurLigne,chNomTable[chNomTable..Occurrence]..Hauteur)
le code de l'évènement (WM_LBUTTONUP) devient
SI HauteurLigneModifiée(TABLE_Matable,gtabHauteurLigne,TableInfoXY(TABLE_Matable,tiNumLigne,SourisPosX,SourisPosY)) ALORS
FIN
Avec
FONCTION HauteurLigneModifiée(LOCAL chNomTable est Champ,LOCAL tabHauteurLigne est tableau d'entier,LOCAL nNoLigne est entier) : booléen
SI chNomTable[nNoLigne]..Hauteur=tabHauteurLigne[nNoLigne] ALORS
RENVOYER Faux
SINON
tabHauteurLigne[nNoLigne]=chNomTable[nNoLigne]..Hauteur
RENVOYER Vrai
FIN
Rq on pourrait ne pas passer gtabHauteurLigne en paramètre et utiliser le fait que c'est une variable globale mais
1-On perd en visibilité en ce qui concerne les variables traitées
2-Ces fonctions/Procédures peuvent être réutilisées au sein de la même fenêtre qui comporte plusieurs champs table à tester.
--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFMMessage modifié, 09 avril 2026 - 17:27