Выберите ячейку в TAdvStringGrid со скрытыми столбцами
Я выбираю определенную ячейку в TAdvStringGrid:
Const Mycol=4; MyRow=1; HiddenCol=2; процедура TForm1.FormCreate(Отправитель: TObject); начать AdvStringGrid1.ColCount:=5; AdvStringGrid1.RowCount:=10; конец; процедура TForm1.BtnHideClick(Отправитель: TObject); начать AdvStringGrid1.HideColumn(2); конец; процедура TForm1.BtnSelectCellClick(Отправитель: TObject); начать AdvStringGrid1.SelectCells(Mycol,MyRow,Mycol,MyRow); конец;
Однако моя проблема заключается в том, что после того, как столбец скрыт, нужная ячейка не будет выделена, поскольку программа видит, что ColCount теперь равен 4, а ячейка в столбце 5 больше не существует. Как я могу все еще выбрать ячейку независимо от скрытого столбца?
Выбирая, я хочу сфокусировать ячейку и показать пользователю, какая ячейка была выбрана, а не просто прочитать ее строковое значение.
1 ответ
Согласно Руководству для разработчиков по TAdvStringGuide v6.1 на стр. 57, вы можете использовать grid.AllCells(ACol, ARow). В описании говорится: "Доступ к ячейке сетки в виде строки независимо от скрытых столбцов или строк. Grid.AllCells возвращает ячейку в том виде, в котором она отображается, т. Е. После возможной обработки текста реальной ячейки событием OnGetDisplText".
Чтобы показать выбранную ячейку, вы можете использовать некоторые дополнительные функции, которые они вам дают. Со страницы 131 в их руководстве:
TAdvStringGrid также предоставляет набор функций, позволяющих выполнять сопоставление индексов реальных ячеек с индексами видимых ячеек и наоборот. Это обеспечивается через:
function RealRowIndex(ARow: Integer): Integer;
function RealColIndex(ACol: Integer): Integer;
Возвращает реальный индекс столбца или строки для данного видимого индекса столбца или строки
function DisplRowIndex(ARow: Integer): Integer;
function DisplColIndex(ACol: Integer): Integer;
Возвращает видимый индекс столбца или строки для данного реального индекса столбца или строки.
Поэтому я думаю, что вы можете найти то, что ищете, изменив свой последний метод на:
procedure TForm1.BtnSelectCellClick(Sender: TObject);
begin
AdvStringGrid1.SelectCells(DisplColIndex(MyCol),DisplRowIndex(MyRow),DisplColIndex(MyCol),DisplRowIndex(MyRow));
end;