Множественный выбор Delphi TStringGrid, определяющий выбранные строки

Можно ли в любом случае определить, какие строки в настоящее время выбраны в множественном выборе TStringGrid или TCustomGrid, если на то пошло. Недвижимость была бы идеальной.

Я знаю, что есть свойство gdSelected, которое устанавливается в событии DrawCell,

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

Я могу проверить AState на наличие gdSelected и отследить это где-нибудь в массиве, но это кажется неуклюжим.


person sse    schedule 10.05.2011    source источник


Ответы (3)


Я предполагаю, что вы говорите о сетке строк с выбором диапазона, то есть сетке строк с goRangeSelect в Options. Затем вы можете использовать свойство Selection. Это (по сути) TRect, в котором вы можете найти верхнюю левую и нижнюю правую ячейку в выборе диапазона.

person Andreas Rejbrand    schedule 10.05.2011
comment
Я не думаю, что это сработает, выбранные строки не обязательно являются смежными. - person sse; 10.05.2011
comment
@ user746911: Нет, я предположил, что нет «расширенного выбора» (как при щелчке отдельных ячеек с нажатой клавишей Ctrl). Однако мне кажется, что TStringGrid не поддерживает расширенный выбор. (Если это так - как вы его включаете?!) - person Andreas Rejbrand; 10.05.2011
comment
AFAICT, @Andreas прав. Стандарт TStringGrid не поддерживает несмежные выборки. Однако TDBGrid сохраняет список закладок выбранных строк (свойство TDBGrid.SelectedRows). - person Ken White; 11.05.2011
comment
А, я вижу, вы оба правы, спасибо, TStringGrid.selection.bottom и TStringGrid.selection.top отлично для этого подходят. Еще раз спасибо. - person sse; 11.05.2011

Ооо, я использую StringGrid.Selection.BottomRight.Y для определения строк и StringGrid.Selection.BottomRight.X для столбцов.

person Yuriy    schedule 25.05.2012

Использовать свойство выбора строковой сетки StringGrid.Selection.top даст вам верхнюю выбранную строку, StringGrid.Selection.bottom даст вам конечную выбранную строку, где выбор останавливается.

Пример:

Если вы выберете от строки 3 до строки 6 в сетке строк, то StringGrid.Selection.top даст вам 3 в качестве выходного значения, StringGrid.Selection.bottom даст вам 6 в качестве выходного значения, а остальные значения вы можете получить путем итерации сверху вниз.

person celroy    schedule 22.01.2016