DBGrid, positionnement, evènement et messages

informatixo Messages postés 129 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 25 juillet 2012 - 8 sept. 2006 à 11:52
informatixo Messages postés 129 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 25 juillet 2012 - 11 sept. 2006 à 10:27
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

cs_mounjetado Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 4 août 2008
8 sept. 2006 à 13:35
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é...
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
8 sept. 2006 à 16:13
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
0
informatixo Messages postés 129 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 25 juillet 2012 1
8 sept. 2006 à 17:10
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.
0
Utilisateur anonyme
8 sept. 2006 à 19:02
Salut,

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
8 sept. 2006 à 20:15
Merci Phil : C"est notre Mamie Nova à nous Mdrrr.

Aie mes oreilles : M"enfin
0
informatixo Messages postés 129 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 25 juillet 2012 1
11 sept. 2006 à 10:27
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 !
0
Rejoignez-nous