2009-04-17 11 views
4

Delphi 2007.Delphi - Comment réparer ce comportement étrange de TGrid?

J'ai un TGrid avec plus de lignes qu'il n'en faut pour l'écran, et la hauteur de la grille est telle qu'il y a une rangée partiellement dessinée en bas. Lorsque je clique sur cette ligne partielle, elle saute pour être entièrement visible (via une procédure appelée 'ClampInView' dans Grids.pas). Mais ça ne s'arrête pas. Depuis que la souris est maintenant sur une nouvelle ligne partiellement tirée, cela saute aussi. L'effet net est que le fait de cliquer sur la ligne partiellement dessinée commence à sélectionner des cellules dans une colonne verticale, tournant tout le long vers le bas (ou jusqu'à ce que vous relâchiez la souris).

Je l'ai reproduit sur un nouveau projet Winforms avec une seule grille de 100 lignes et aucun code, donc je suis sûr que ce n'est pas quelque chose que je fais dans le code. Il est mauvais pour moi car la forme que j'ai en code réel a un comportement de type glisser-déposer, ainsi cliquer et relâcher ~ 0.1 secondes plus tard sur la ligne partielle va ramasser l'élément dans la cellule et le déposer environ 50 rangées inférieur. Ce n'est certainement pas ce que vous attendez lorsque vous cliquez sur une cellule.

Des suggestions pour résoudre ce problème?

Répondre

2

Vous pouvez essayer de surcharger MouseDown dans votre grille et ne pas appeler MouseDown hérité, si l'utilisateur clique sur des emplacements "défectueux".

3

C'est ce que j'ai toujours fait parce que je pense que c'est collant d'avoir des lignes partiellement visibles. J'ajuste la taille de la grille pour que sa zone client soit un multiple pair de hauteur de ligne. Vous pouvez le faire au moment de la conception, ou il est également facile de le faire via le code. Le kicker serait si vous avez des rangs redimensionnables. Si tel est le cas, il suffit de mettre le code pour redimensionner la grille dans le gestionnaire d'événements pour l'événement de redimensionnement de ligne (je crois qu'il en a un).

Non seulement cela empêche le comportement que vous essayez de corriger, mais il rend également votre interface utilisateur beaucoup plus propre (à mon avis)!