AccueilCodes sourcesFreewaresArticlesRéponsesRechercheVotre avisNewsMon blogLiensContact
Lundi 03 Novembre 2025

Valid HTML 4.01 Transitional

126 codes sources48 articles77 news24 Liens15 avis9 réponses.
Comment gérer le verouillage des tables comme en version 5.5 ?

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)

Liste des codes sources
®2006 - codel5g.com