OVH Cloud OVH Cloud

[WD8][TableInfoXY]

4 réponses
Avatar
sebNews
Bonjour,
Je Clone des colonnes d'une Table Mémoire
Lors d'un clic droit sur la table, je souhaite savoir
sur quelle colonne je suis :

nColonne,x,y sont des entiers
// sélection sur la table
x = PoidsFaible(CurseurPos())
y = PoidsFort(CurseurPos())
Trace("Y=",y)
nColonne = TableInfoXY(MoiMême, tiNumColonne + tiOrigineEcran, x, y)
MoiMême..MenuContextuel =MenuContextuelVue // Activation du menu
Trace(nColonne)

Si la ligne de la table est pleine pas de problème,
Par contre ( et c'est marqué dans l'aide) la fonction renvoi -1 si la ligne
ou colonne
est vide.

Comment faire pour récupérer ce nom de colonne ( ma table peut être vide )
Peut être en interceptant le clic sur le titre de colonne ? ( pas trouvé
comment faire )

Des idées
Merci d'avance
Sébastien

4 réponses

Avatar
Romain PETIT
sebNews a présenté l'énoncé suivant :

Si la ligne de la table est pleine pas de problème,
Par contre ( et c'est marqué dans l'aide) la fonction renvoi -1 si la ligne
ou colonne est vide.



Oui, effectivement...

Comment faire pour récupérer ce nom de colonne ( ma table peut être vide )
Peut être en interceptant le clic sur le titre de colonne ? ( pas trouvé
comment faire )



Pour le clic sur le titre de colonne, il faut brancher l'évenement 1529
(cf : http://tinyurl.com/8xjgt)
Sinon, la fonction qui suit devrait faire l'affaire :


*** Bouton droit enfoncé (WM_RBUTTONDOWN) de table xxx
sNomColonne est une chaîne
sNomColonne = fg_RenvoiNomColonneSurvolée(MoiMême..Nom)
SI sNomColonne<>"" ALORS
//traitement
Trace(sNomColonne)
FIN

FONCTION fg_RenvoiNomColonneSurvolée(LOCAL sNomTable)
// v. 1.0 pour WD7/7.5/8/9
// (c) mai 2005 Romain PETIT (mailto:)
// sous licence WD-LIBRE (http://www.windasso.org)
// But : Récupérer le nom d'une colonne d'une table (mémoire ou
// fichier) survolée par la souris
// (y-compris si la table est vide, ce qui n'est pas possible
// avec TableInfoXY)
// Param : Nom de la table
// Retour : Chaine vide (table non survolée, sans colonne ou erreur)
// ou nom de la colonne survolée
// Notes : . Etant donné qu'il y a utilisation d'une zone mémoire à
// chaque appel, cela peut évidemment ralentir un
// traitement, d'autant plus si le nombre de colonne est
// important
// . L'en-tête de colonne n'est pas pris en compte
// . Les colonnes peuvent avoir été rendues invisibles ou
// déplacées
// Exemple : **** code survol souris (WM_MOUSEVE) de la table xx
// trace(fg_RenvoiNomColonneSurvolée(moimeme..nom)

QUAND EXCEPTION
RENVOYER ""
FIN

eXDansTable est un entier
eXTable est un entier
ePosSourisX est un entier
c est un entier
sNomColonne est une chaîne
eIndiceColonne est un entier
eXdebut, eXfin sont des entiers
sNomColonneSurvolée est une chaîne
eNbColonnes est un entier = {sNomTable, indChamp}..NombreColonne
sZoneMem est une chaîne = "ZM_"+{sNomTable, indChamp}..Nom
// Abscisse de la souris en cours (par rapport à la zone client)
ePosSourisX = PoidsFaible(CurseurPos(cpClient))
// Abscisse de la table (par rapport à la zone client)
eXTable = {sNomTable, indChamp}..X
// Abscisse de la souris (par rapport à la table seule)
eXDansTable = ePosSourisX - eXTable

SI MemExiste(sZoneMem) ALORS MemSupprimeTout(sZoneMem)
MemCrée(sZoneMem)

//on enumère les colonnes et on les classe par ordre d'affichage,
// (si la colonne est visible)
POUR c=1 A eNbColonnes
sNomColonne = TableEnumèreColonne({sNomTable, indChamp}, c)
eIndiceColonne = TableIndiceColonne({sNomTable, indChamp}, ...
sNomColonne, ticAffichage)
// contrairement à ce qu'indique la doc, si la col est invisible,
// la fonction TableIndiceColonne ne renvoie pas 0 (en WD7.5 206g)
SI eIndiceColonne>0 ET {sNomColonne, indChamp}..Visible ALORS
MemAjoute(sZoneMem, eIndiceColonne, sNomColonne)
FIN
FIN
//on trie la table
MemTrie(sZoneMem)

// on teste la position de la souris pour chaque colonne
sNomColonne = MemPremier(sZoneMem)
TANTQUE PAS MemEnDehors(sZoneMem)
SI PAS sNomColonne~="" ALORS
eXdebut = {sNomColonne, indChamp}..X
eXfin = eXdebut + {sNomColonne, indChamp}..Largeur
SI (eXdebut< eXDansTable <= eXfin) ALORS
// on a le nom de la colonne survolée
sNomColonneSurvolée = sNomColonne
SORTIR
FIN
FIN
sNomColonne = MemSuivant(sZoneMem)
FIN
MemSupprimeTout(sZoneMem)

RENVOYER sNomColonneSurvolée


A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
sebNews
Bonjour,

Pour le clic sur le titre de colonne, il faut brancher l'évenement 1529
(cf : http://tinyurl.com/8xjgt)
Sinon, la fonction qui suit devrait faire l'affaire :



Merci pour la réponse complète.
Je teste tout cela demain pout voir la solution
la moins gourmande


Sébastien
Avatar
sebNews
"Romain PETIT" a écrit dans le message de



FONCTION fg_RenvoiNomColonneSurvolée(LOCAL sNomTable)
// v. 1.0 pour WD7/7.5/8/9
// (c) mai 2005 Romain PETIT (mailto:)



Attention au Spam :-)

Sébastien
Avatar
sebNews
> Sinon, la fonction qui suit devrait faire l'affaire :


*** Bouton droit enfoncé (WM_RBUTTONDOWN) de table xxx
sNomColonne est une chaîne
sNomColonne = fg_RenvoiNomColonneSurvolée(MoiMême..Nom)
SI sNomColonne<>"" ALORS
//traitement
Trace(sNomColonne)
FIN



Ok parfait,
Tout fonctionne
Encore merci

Sébastien