sListeColonneTrie est une chaîne //Liste des colonne de trie de la table des entetes
Evénement("Ma_Procedure",Matable..Nom, 1529)
PROCEDURE Ma_Procedure()
iIndice est un entier = 1
sChaine est une chaîne
sRecuperationLibelle est une chaîne
//récuperation de l'indice de la colonne
iNumColonne est un entier système = _EVE.wParam
//on remet les libellés des colonnes comme à l'origine, ils seront remis a jour a la fin de la procedure
sChaine = ExtraitChaîne(sListeColonneTrie,iIndice)
TANTQUE sChaine<>EOT _ET_ sListeColonneTrie<>""
RecuperationLibelle = ExtraitChaîne({Droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé,2,"]")
{Droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé = sRecuperationLibelle //ExtraitChaîne({droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé,2,"[")
iIndice++
sChaine = ExtraitChaîne(sListeColonneTrie,iIndice)
FIN
//récupération du nom de la colonne
sNomColonne est une chaîne = "TABLE_HEADER."+TableEnumèreColonne(TABLE_HEADER,iNumColonne)
//test si on ajoute un non une nouvelle colonne de trie
SI PAS ToucheEnfoncée(teShift) _ET_ (...
(PAS ChaîneOccurrence(sListeColonneTrie,TAB) _ET_ sNomColonne <> sListeColonneTrie) _OU_ ChaîneOccurrence(sListeColonneTrie,TAB)) ALORS
sListeColonneTrie = "" //on vide la liste des colonne si on a pas appuyé sur shift //trace("shift enfoncée")
FIN
//ajout du nom de la colonne dans la liste de trie
sListeColonneTrie = Remplace(sListeColonneTrie,"_","è") //a cause de position qui fait n'importe quoi sur les séparateur, pour lui "_" est un caractère de ponctuation!!!!
sNomColonne = Remplace(sNomColonne,"_","è")
iPositionChaine est un entier = Position(sListeColonneTrie,sNomColonne,0, DepuisDébut+MotComplet)
//si on ne l'as pas trouvé, on l'ajoute, sinon on annule le sens de trie
SI iPositionChaine = 0 ALORS
SI sListeColonneTrie <>"" ALORS
sListeColonneTrie+=TAB
FIN
sListeColonneTrie+="+"+sNomColonne
SINON
//on inverse le signe de trie
sListeColonneTrie = sListeColonneTrie[[A (iPositionChaine-2)]]+Gp_Viif(sListeColonneTrie[[(iPositionChaine-1) A (iPositionChaine-1)]] = "+", "-", "+")+...
sListeColonneTrie[[(iPositionChaine) A]]
FIN
//on remet la chaine correctement
sListeColonneTrie = Remplace(sListeColonneTrie,"è","_") //a cause de position qui fait n'importe quoi sur les séparateur, pour lui "_" est un caractère de ponctuation!!!!
//mise a jour des libellés des colonnes
iIndice = 1
sChaine = ExtraitChaîne(sListeColonneTrie,iIndice)
TANTQUE sChaine<>EOT
SI PAS ChaîneOccurrence({Droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé,"]") ALORS
sRecuperationLibelle = {Droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé
SINON
sRecuperationLibelle = ExtraitChaîne({Droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé,2,"]")
FIN
{Droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé = ...
"["+Gauche(sChaine,1)+iIndice+"]"+ sRecuperationLibelle //ExtraitChaîne({droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé,2,"[")
iIndice++
sChaine = ExtraitChaîne(sListeColonneTrie,iIndice)
FIN
TableTrie(sListeColonneTrie)
//on annule le trie automatique vu que c'est nous qui le faisons
RENVOYER Faux
Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=19&topic_id=6066&post_id=24356