Ver posición en DBGrid al desplazarse en Delphi
Pregunta
Tengo un DBGrid en un formulario. DBGrid tiene muchas columnas, por lo que se muestra un desplazamiento horizontal. Desplazo la vista DBGrid a la derecha para ver más columnas. Si selecciono una fila, la vista DBGrid se restablece automáticamente para ver la primera columna (como si me desplazara a la posición más a la izquierda).
¿Hay alguna manera de evitar eso?
Solución
Supongo que tiene goRowSelect en las opciones de la cuadrícula. Esto obliga a la columna seleccionada a ser la primera columna no fija, por lo que cada vez que la fila cambia el código para desplazar la celda seleccionada a la vista obliga a que la primera columna no fija sea visible.
Dado que goRowSelect también deshabilita efectivamente el desplazamiento horizontal con el teclado, intento vivir sin él. Puede usar un dibujo personalizado de las celdas de la cuadrícula para mostrar todas las celdas de la fila actual con los colores adecuados para las celdas seleccionadas, aunque solo una celda esté realmente seleccionada. Utilizo esto también para mostrar diferentes colores dependiendo de si la cuadrícula está enfocada o no, similar a lo que hace un control de árbol estándar. Sin embargo, para que esto funcione correctamente, debe controlar no solo los eventos de navegación de la celda de la cuadrícula, sino también algunos otros eventos, como OnEnter y OnExit de la cuadrícula, OnActivate y OnDeactivate de la Aplicación, y así sucesivamente.
Otros consejos
Puede solicitar la posición de la barra de desplazamiento
GetScrollInfo(Self.Handle, SB_VERT, SIOld);
y use SetScrollInfo ()
para volver a colocarlo. Probablemente hay una mejor manera. SelectedField
es otra forma (obtener / configurar según sea necesario).