A ver si me explico....
Establece en las opciones "dgSelectRow" para que al hacer clic, se seleccione la fila completa. También añade la opción "AlwaysshowSelection"
prepara un botón con el siguiente código:
Código Delphi
[-]
if DBGrid1.SelectedRows.Count > 0 then
with DBGrid1.DataSource.DataSet do
begin
ShowMessage(' Registro activo: ' + Fieldbyname('nombrecliente').AsString;
end;
Ahora saca un listado que permita hacer un scroll.
Según mis pruebas y usando un rxDBgrid, hago lo siguiente:
- Hago clic en un registro con nombre de cliente: "Pepe".
- Se queda esa fila al completo seleccionada (en azul toda la fila)
- Hago un scroll (usando la barra de desplazamiento)
- En este momento hay 2 cosas seleccionadas (en azul)
- Por un lado tengo la fila completa seleccionada (en azul), que marca a "Pepe"
- Por otro, me aparece una sola celda seleccionada (en azul) que corresponde al registro que he hecho el scroll, el Nombre de cliente de este registro es "Manuel"
- Ahora pulso el botón con ese código delphi
- El resultado: Me aparece en el ShowMessage
Pepe
Lo que ha sucedido, es que el registro activo no ha cambiado (Pepe), pero la selección del Grid si (el que marca a Manuel).
Prueba a ver si también te ocurre este comportamiento.
Para mí es una falsa sensación de que el registro activo "ha camiado", es decir, Manuel aparece seleccionado, cuando en realidad, el registro Activo es Pepe (y por eso el evento AfterScroll no ha saltado).
Como conclusión, me reafirmo en lo ya dicho: Al hacer un scroll vertical, el registro activo no cambia. Yo al menos, no sé modificar ese "comportamiento extraño del DBgrid"
Quizás añadiendo el "FullRowSelect" (no recuerdo el nombre de la propiedad ahora mismo), sea más intuitivo para tu usuario.
Saludos