Selección múltiple Delphi TStringGrid, determinando filas seleccionadas

¿Hay alguna forma de determinar qué filas están seleccionadas actualmente en una selección múltiple? TStringGrid, o una organización TCustomGrid para esa materia. Una propiedad sería ideal.

Sé que existe el gdSelected propiedad que se establece en el DrawCell evento,

procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);

puedo revisarlo AState esperando gdSelected, y realice un seguimiento de esto en una matriz en algún lugar, pero esto parece una tontería.

preguntado el 10 de mayo de 11 a las 13:05

3 Respuestas

Supongo que estás hablando de una cuadrícula de cadenas de selección de rango, es decir, una cuadrícula de cadenas con goRangeSelect in Options. Entonces puedes usar el Selection propiedad. Esto es (esencialmente) un TRect en el que puede encontrar la celda superior izquierda e inferior derecha en la selección de rango.

contestado el 10 de mayo de 11 a las 17:05

No creo que esto funcione, las filas seleccionadas no son necesariamente contiguas. - sse

@ user746911: No, asumí que no hay 'selección extendida' (como en Ctrl-clic en celdas individuales). Sin embargo, me parece que el TStringGrid no es compatible con la selección extendida. (Si es así, ¡¿cómo diablos lo habilitas ?!) - Andreas Rejbrand

AFAICT, @Andreas tiene razón. El estandar TStringGrid no admite selecciones no contiguas. TDBGrid lo hace, sin embargo, manteniendo una lista de marcadores de filas seleccionadas (TDBGrid.SelectedRows propiedad). - Ken White

Ah, ya veo, ambos tienen razón, gracias, TStringGrid.selection.bottom y TStringGrid.selection.top funcionan perfectamente para esto. Gracias de nuevo. - sse

Oooh, estoy usando StringGrid.Selection.BottomRight.Y para determinar filas y StringGrid.Selection.BottomRight.X para columnas.

contestado el 26 de mayo de 12 a las 18:05

Usar propiedad de selección de cuadrícula de cadenas StringGrid.Selection.top le dará la fila superior seleccionada, StringGrid.Selection.bottomle dará la fila final seleccionada, donde se detiene la selección.

Ejemplo:

Si selecciona de la fila 3 a la fila 6 en una cuadrícula de cadenas, entoncesStringGrid.Selection.top le dará 3 como valor de salida StringGrid.Selection.bottom le dará 6 como valor de salida y los valores restantes que puede obtener iterando de arriba a abajo.

Respondido el 22 de enero de 16 a las 10:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.