DBGrid, positionnement, evènement et messages

Signaler
Messages postés
129
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
25 juillet 2012
-
informatixo
Messages postés
129
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
25 juillet 2012
-
Bonjour,

J'ai un problème pour arriver à détecter un évènement.

En fait, il y a un évènement "OnColumnResize" pour la DBGrid. Donc quand je redimensionne la cellule je gère mon évènement sans problème.

Cependant je me suis aperçu d'un truc tout bête (enfin façon de parler !). Si on redimensionne la cellule en effectuant un double clic entre les 2 titres de colonnes (quand il y a un curseur <-||->) et bien ça ne rentre pas en ligne de compte dans l'évènement "OnColumnResize", ni dans l'évènement "OnDblClick".

Donc comment faire pour détecter quand ma colonne a été redimensionnée lorsque j'utilise le double clic ?

J'ai lu les tutoriaux de grandvizir sur les messages et sur spy++. N'ayant pas spy++ j'ai fait avec winsight mais je n'arrive pas à m'en servir correctement.

En fait, je localise la fenêtre qui contient le DBGrid mais quand je clique avec la souris sur ma DBGrid en faisant plusieurs essais je n'ai aucun message dans la fenêtre de suivi des messages de winsight.

Je n'arrive pas à trouver le message qui me permettrait de savoir quand la colonne a changé de dimension ce qui me permettrait de gérer le cas du redimensionnement par double clic.

Peut-être ai-je mal analysé mon problème ? Ou je me complique la vie alors qu'il y a plus simple ?

Merci par avance pour votre aide.

6 réponses

Messages postés
66
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
4 août 2008

salut,
je ne saurais pas te répondre, car suis pas un cador... mais perso je n'ai jamais rencontré de redimensionnement par double-clic... en fait, si je ne me trompe, on clique gauche et on maintient sur la séparation de colonnes et on fait un Drag
quelle utilité as-tu à employer ce procédé?
éventuellement tu peux essayer d'affecter la procédure de redimensionnement réagissant à l'événement OnColumnResize, à l'événement OnDoubleClick dans l'onglet événements de l'inspecteur d'objets...













<hr />




si Delphi m'était conté...
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11
Bonjour,


Une solution (certes un peu batarde) consisterait à :

- Créer un array d'integer contenant la dimension de chacune des colonnes

- Placer un timer sur ta form qui compare la dimension de la colonne à celui de l'array...

Simon
Messages postés
129
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
25 juillet 2012
1
Bonjour mounjetado, bonjour simonpelloquin,

Merci pour vos réponses.

Mea Culpa > la grille que j'utilise est une XDBGrid qui est un descendant de TCustomGrid. Une des différences avec la DBGrid classique est qu'elle permet (par l'intermédiaire d'un double clic entre les 2 titres de colonne) d'ajuster la largeur de la colonne au contenu.

mounjetado > Regarde bien sur mon dernier post et tu verras qu'en fait j'avais essayé le "OnDblClick" et malheureusement ça ne fonctionne pas mais tu avais raison sur le fait que la DBGrid ne permet pas de redimensionner sur un double clic entre les titres. La fatigue commence à se faire sentir et la fin de la semaine aussi.

simonpelloquin > Après avoir posté ce topic et continué mes recherches, j'en suis arrivé à une analyse similaire à la tienne.

Effectivement, faute de mieux pour le moment, j'ai utilisé une technique "bâtarde" pour reprendre les termes de "simonpelloquin". J'ai placé un Edit non visible sur la Form et sur l'évènement "OnMouseMouve" de ma grille je met à jour l'Edit avec la largeur de la colonne. Puis sur l'évènement "OnChange" de l'Edit je met mon code.

Pas très propre, je vous l'accorde.

Je pense que ma planche de salut serait de savoir quel est le message "Redimensionnement d'une colonne d'un DbGrid" pour pouvoir gérer le code de façon plus propre et logique.

Quelqu'un s'y connaît en message ?

Faute de code plus propre, je garde mon code fonctionnel.

En attendant, merci beaucoup pour votre aide.

Salut,

La réponse est : regarder le source du DBGrid et la touche F1

Merci Phil : C"est notre Mamie Nova à nous Mdrrr.

Aie mes oreilles : M"enfin
Messages postés
129
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
25 juillet 2012
1
Bonjour à tous,

Francky23012301 > Je ne comprends pas ton propos "La réponse est : regarder le source du  DBGrid et la touche F1".

S'il s'agit d'une attaque pour me préciser que je n'ai qu'à regarder l'aide avant de poster je te rassure c'est déjà fait et j'ai même regarder le forum avec le joli bouton "Rechercher" tout seul comme un grand. Si tel est le cas je n'apprécie pas grandement ce commentaire.

Si au contraire c'était de l'humour, tu m'en vois désolé mais je n'ai l'ai pas compris. Et dans ce cas, accepte mes excuses pour les propos précédents.

J'attends ta réponse pour clarifier cette situation.

Delphiprog > "Merci qui, hum ? " -> Merci M. Delphiprog biensûr, ton code fontionne parfaitement (comme d'habitude !).

Désolé Delphiprog mais je crois que je me suis mal exprimé une fois encore ! Je possède un composant qui s'intitule "XDBGrid" qui est en quelque sorte un DBGrid amélioré dont je ne possède pas le code source (moins cher à l'achat !).

Ce composant permet de faire comme ton code mais à une différence près. Le redimensionnement se fait uniquement avec un double clic entre les 2 titres de colonne quand le curseur devient <-||-> (et non en double cliquant sur le titre d'une colonne comme le tiens, et oui ton code est largement plus performant !).

Je rappelle que je n'arrive pas à détecter ce double clic avec l'évènement "OnDblClick", ni avec l'évènement supplémentaire "OnColumnResize" que je possède avec ce composant.

J'ai acheté ce composant à l'époque quand je croyais qu'il n'était pas possible d'ajouter de nouvelles fonctionnalités à la DBGrid en les codant.

Maintenant, j'ai pas mal développé avec ce composant et j'aurais une lourde tâche pour tout remettre en DBGrid classique !


C'est pour cela, que je pensais me servir des messages pour détecter
quand le redimensionnement de la colonne a eu lieu et ainsi mettre mon
code.

Merci à tous en tout cas et je reste ouvert à toute proposition.

PS : Delphiprog, je viens de m'apercevoir que ton code permet aussi de gérer le curseur <-||->. C'est vraiment super !