PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Evenement sur modification de la hauteur d'une ligne de table
Evenement sur modification de la hauteur d'une ligne de table
Débuté par Benoit CONTRÉ, 03 avr. 2026 12:06 - 3 réponses
Membre enregistré
5 messages
Posté le 03 avril 2026 - 12:06
Bonjour,
je souhaite enregistrer la hauteur d'une ligne de table modifiée par l'utilisateur.
Pour cela c'est assez simple avec
MonFic.HauteurLigne = table[nSel].hauteurligne
Hmodifie(MonFic)

Mais comment détecter que la hauteur de ligne à été modifiée par l'utilisateur ?
Je ne trouve rien dans les évenements de table.
Si qq à une astuce, je suis preneur.
Merci par avance.
Membre enregistré
1 047 messages
Posté le 03 avril 2026 - 13:40
Bonjour,

Il y a peut-être mieux mais voici une solution.
Dans l'évènement "Bouton gauche relâché (WM_LBUTTONUP) de la table :

nIndiceLigne est un entier = TableInfoXY(MaTable, tiNumLigne, SourisPosX(), SourisPosY())

POUR i = nIndiceLigne - 1 _À_ nIndiceLigne
SI i > 0 _ET_ MaTable[i]..Hauteur <> 18 ALORS
ToastAffiche("hauteur différente sur ligne " + i)
FIN
FIN


ici, je teste si la hauteur de ligne est différente de 18, à vous de comparer avec les valeurs que vous aurez enregistré au préalable.
Je vérifie que i est bien supérieur à 0 car si l'opération est réalisé sur la première ligne, nIndiceLigne - 1 renverra un i = 0 et déclenchera une erreur
Je teste nIndiceLigne - 1 et nIndiceLigne car lorsque l'on change la hauteur d'une ligne, le curseur peut se trouver en limite de la ligne inférieure.

Vous pouvez également utiliser ce code dans l'évènement "Bouton gauche enfoncé" pour récupérer la hauteur avant changement, ce qui vous permettra de comparer.

Cdlt
Membre enregistré
5 messages
Posté le 07 avril 2026 - 10:57
Merci @Cédric_34
C'est pas bête du tout. Je n'y avait pas pensé.
Je vais tester ça.
Encore merci
Membre enregistré
4 362 messages
Posté le 09 avril 2026 - 17:12
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
//Traiter modification de la hauteur
FIN

Avec
//Vérifie que la hauteur d'une ligne du champ table a été modifié (Vrai) ou pas (Faux)
//Si la hauteur a été modifiée, la tableau des hauteurs l'est aussi

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 RTFM
Message modifié, 09 avril 2026 - 17:27