2008-12-02 7 views
1

J'ai un DBGrid sur un formulaire. DBGrid a plusieurs colonnes, donc un défilement horizontal est affiché. Je fais défiler la vue DBGrid vers la droite pour voir plus de colonnes. Si je sélectionne une ligne, la vue DBGrid est automatiquement réinitialisée pour afficher la première colonne (comme si je revenais à la position la plus à gauche).Afficher la position dans DBGrid lors du défilement dans Delphi

Existe-t-il un moyen de prévenir cela?

Répondre

7

Je suppose que vous avez goRowSelect dans les options de grille. Cela force la col sélectionnée à être la première colonne non-fixe, donc chaque fois que la ligne change le code pour faire défiler la cellule sélectionnée dans la vue force la première colonne non-fixe à être visible.

Depuis goRowSelect désactive aussi efficacement le défilement horizontal avec le clavier que j'essaye de vivre sans elle. Vous pouvez utiliser le dessin personnalisé des cellules de la grille pour afficher toutes les cellules de la ligne en cours avec les couleurs appropriées pour les cellules sélectionnées, même si une seule cellule est réellement sélectionnée. Je l'utilise aussi pour montrer des couleurs différentes selon que la grille est focalisée ou non, similaire à ce que fait un contrôle d'arbre standard. Pour que cela fonctionne correctement, vous ne devez toutefois gérer non seulement les événements de navigation cellule de la grille, mais d'autres événements aussi, comme OnEnter et OnExit de la grille, OnActivate et OnDeactivate de la demande, etc. .

2

Vous pourriez être en mesure de demander la position de la barre de défilement

GetScrollInfo(Self.Handle, SB_VERT, SIOld); 

et utiliser SetScrollInfo() pour le remettre. Il y a probablement un meilleur moyen. SelectedField est une autre façon (obtenir/définir comme nécessaire).

Questions connexes