Détecter ‘MouseEnter’ dans une cellule d’une grille
Permet d’appeler une méthode ou une fonction quand la souris survole les lignes d’une colonne spécifiée
Il suffit d’ajouter un objet au parent de la grille (voir fonction GridCompanion_Add())
Apres, on peut spécifier la colonne + Expression de champ + méthode/fonction a appeler quand la souris change de cellule dans la colonne en question.
L’expression de champ ne doit pas être égale au ControlSource de la colonne, mais il n’y a rien qui l’empêche.
Exemple de code – voir aussi l’exemple – vers la fin de grid1.init()
local CompanionObj
do case
case !GridCompanion_Add(GridObjectReference, @m.CompanionObj)
&& error
case !m.CompanionObj.ColumnMouseWatcher_Add( ;
ControlSourceOfColumnToWatch, ;
FieldExpression, ;
FormMethod ;
)
&& error
endcase
GridObjectReference: = référence de la grille, eg m.this ou thisform.Grid1
CompanionObj: la référence du compagnon est retournée et peut être utilisée ensuite pour ajouter des colonnes a ‘surveiller’
ControlSourceOfColumnToWatch: le controlSource de la colonne à ‘surveiller’. Puisqu’il n’est pas toujours facile de passer le numéro de colonne ou le nom de la colonne, le controlSource suffit.
FieldExpression: par exemple le controlSource de cette colonne, le controlSource d’un champ du RecordSource de la grille, ou toute autre expression (eg Table1.Montant / 2)
FormMethod: nom d’une méthode du form, ou nom d’une fonction. Cette méthode/fonction sera appelée avec la FieldExpression correspondante ( eg eval(Table1.Montant / 2) )
Quand on lance l'exemple il faut regarder le contenu des textbox en haut quand on survole les boutons de commande avec la souris.
Une colonne surveillée peut être supprimée de la ‘surveillance’ : voir ColumnMouseWatcher_Remove(ControlSourceOfColumnToWatch)
Comment est-ce que cela marche ?
Une expression DynamicFontShadow est ajoutée à la colonne. Quand cette expression est évaluée, la FieldExpression évaluée est ajoutée à une collection (par colonne)
Les clauses dynamiques sont évaluées de gauche à droite et de haut en bas.
Pour garder le contenu de la collection synchronisé avec ce qui est affiché dans la grille, il faut, a certains moments (événements) supprimer le contenu de la collection et remplir la collection par âpres. Une façon de remplir le contenu de la collection est de forcer l’évaluation de la clause DynamicFontShadow. Ceci se fait en modifiant la hauteur de la grille (j’ajoute 1 a la hauteur, la prochaine fois -1, …)
Il y a assez de BindEvent() |
salut Greg, j'ai essayé ton prog et tout ce qui manquait c'est ca dans le load
* By Eddy Maue
Local lcPathOfThisFile As Character
m.lcPathOfThisFile =JUSTPATH(SUBSTR(SYS(16),IIF(SYS(16)="PROCEDURE",At(":",Sys(16))-2,1)))
Set Procedure To (m.lcPathOfThisFile+'\gridcompanion.prg')
a+ et bonne soirée
en passant moi je place un container invisible sur la surface de la grille et j'utilise le GridHittest. Le résulat est le meme que toi. C'est simplement une facon différente de faire