Ce code est réalisé par L.Deletang
et a été publié sur news.pcsoft.fr.
================================================================
PROCEDURE TabPlus::constructeur(pTable) // nom de la table à passer en
paramètre
:NomTable=pTable
WM_NCLBUTTONDOWN est
un entier = 161 // Bouton gauche 1529
Evénement(":ClicEnteteTable",
:NomTable, WM_NCLBUTTONDOWN)
================================================================
PROCEDURE ClicEnteteTable()
PosXClic est entier = SourisPosX()
PosYClic est entier
= SourisPosY()
NomColonne est chaîne
vAjout est un booléen
nPos
est un entier
// Si
la table est vide, tableinfoxy marche pas.
//je crée une ligne vide qui sera détruite à la
fin
SI TableOccurrence(:NomTable)=0 ALORS
vAjout=Vrai
TableAjouteLigne(:NomTable)
FIN
// Je
récupère le nom de la colonne sur la première ligne de la table
NomColonne=TableInfoXY(:NomTable,tiNomColonne+tiOrigineEcran,PosXClic,PosYCli
c+{:NomTable,indChamp}..HauteurLigne)
//trace("Nom="+nomcolonne)
SI NomColonne~="" ALORS RETOUR // pas de nom de colonne, je
sors
SI PAS
{NomColonne,indChamp}..Visible ALORS RETOUR // Clic sur colonne invisible
// Relativise la position dans la
fenetre et dans la table
PosXClic-={FenEnExécution(),indFenetre}..X+{:NomTable,indChamp}..X
// Le
verrou est clicable entre le 10 et le 13ème pixel après le début de
colonne
SI PosXClic>={NomColonne,indChamp}..X+10 _ET_ PosXClic<={NomColonne,indChamp}..X+13 ALORS
TableauSauvePosition est un tableau
dynamique
TableauSauvePosition=allouer un tableau dynamique de
({:NomTable,indChamp}..NombreColonne) par 5
chaîne
SI
TableFixeColonne(NomColonne)
ALORS
//
Trace("colonne à déverrouiller")
TableFixeColonne(NomColonne,Faux)
_EVE.Retour=0
RETOUR
SINON
//
trace("colonne à vérrouiller")
:ChargeConfigTable(TableauSauvePosition)
POUR
nPos=1 A
{:NomTable,indChamp}..NombreColonne
SI
PAS TableauSauvePosition[(nPos),3]~="F" ALORS
//
Déplace la colonne avant de la fixer
TableDéplaceColonne(:NomTable,NomColonne,nPos)
TableFixeColonne(NomColonne,Vrai)
//
Fin de traitement en bloquant le traitement normal du cadenas
_EVE.Retour=0
RETOUR
FIN
FIN
FIN
FIN
FIN:
// Si j'ai ajouté une ligne pour faire mon test
tableinfoxy, je la supprime
SI vAjout ALORS
TableauSupprimeLigne(:NomTable,1)
================================================================
PROCEDURE ChargeConfigTable(_TableauSauvePosition)
vColonne est une
chaîne
nPos est un entier=1
vIndice est un entier
TANTQUE nPos<=({:NomTable,indChamp}..NombreColonne)
vColonne=TableEnumèreColonne(:NomTable,
nPos)
vIndice=Val(ExtraitChaîne(ExtraitChaîne(vColonne,2,"["),1,"]"))
// récupère l'indice si
c'est un champ indicé
_TableauSauvePosition[(nPos),1]=Droite("0000"+TableIndiceColonne(:NomTable,v
Colonne, ticAffichage),4)
_TableauSauvePosition[(nPos),2]=vColonne
SI
TableFixeColonne(:NomTable+"."+vColonne) ALORS
_TableauSauvePosition[(nPos),3]="F"
SINON
_TableauSauvePosition[(nPos),3]=" "
FIN
SI vIndice=0
ALORS
_TableauSauvePosition[(nPos),4]={vColonne,indChamp}..Largeur
//Ecrit
2 quand vrai sinon renvoie 0
_TableauSauvePosition[(nPos),5]={vColonne,indChamp}..Visible=Vrai
SINON
vColonne=ExtraitChaîne(vColonne,1,"[")
_TableauSauvePosition[(nPos),4]={vColonne,indChamp}[vIndice]..Largeur
//Ecrit
2 quand vrai sinon renvoie 0
_TableauSauvePosition[(nPos),5]={vColonne,indChamp}[vIndice]..Visible=Vrai
FIN
nPos++
FIN
TableauTrie(_TableauSauvePosition,ttCroissant,1)