Delphi Firemonkey Grid: невидимые столбцы при навигации

у меня TGrid на FMX с 3 колонками, вторая колонка Visible False, если я нажимаю на первую колонку и нажимаю стрелку для фокусировки на следующую видимую колонку, то курсор не переходит на третью колонку, он исчезает, как при фокусировке на второй столбец, а если еще раз нажать стрелку, то он переходит на третий столбец.

Как я могу это исправить?


person Tallys Ferrante    schedule 07.11.2016    source источник


Ответы (1)


Используйте событие OnSelectCell следующим образом:

procedure TForm7.Grid1SelectCell(Sender: TObject; const ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
  if not (Sender as TGrid).Columns[ACol].Visible then
  begin
    CanSelect := False;
    if (Sender as TGrid).ColumnByIndex(ACol+1) <> nil then
      (Sender as TGrid).SelectColumn(ACol+1);
  end;
end;

Кстати, вы не сказали, какую версию Delphi вы используете, а различия есть. Пожалуйста, спрашивая о Firemonkey, всегда отмечайте вопрос своей версией Delphi. Вот обновление:

  • В Delphi 10.1 Berlin указанное выше исправление не требуется.

  • В Delphi 10 Seattle и более ранних версиях (я проверил до XE6) требуется исправление.

Вы также могли заметить, что выбор в другом направлении (справа налево) работает без исправления в версиях Delphi 10 Seattle и более ранних (что объясняет, почему необходимо учитывать только ACol + 1).

person Tom Brunberg    schedule 07.11.2016
comment
Спасибо @Tom Brunberg, сработало отлично, я только добавил if (Sender as TGrid).ColumnByIndex(ACol+1) <> nil then перед выбором следующего столбца. - person Tallys Ferrante; 08.11.2016
comment
@Tallys Ferrante Добро пожаловать! Не понимаю, зачем нужно ваше дополнение. Так с какой версией вы работаете? - person Tom Brunberg; 08.11.2016
comment
Я использую Delphi Сиэтл. Я добавляю эту проверку, потому что мой последний столбец тоже невидим, поэтому, если пользователь непреднамеренно нажмет стрелку, приложение не вызовет нарушение прав доступа при попытке выбрать следующий столбец (который не существует). - person Tallys Ferrante; 08.11.2016
comment
@Tally Ааа, да, в таком случае. Надеюсь, вы не возражаете, если я добавлю это к своему ответу для полноты картины. - person Tom Brunberg; 08.11.2016