Компонент Delphi StringGrid









                                           ГЛАВНАЯ           СВОЙСТВА           СОБЫТИЯ           ПРИЁМЫ  ПРОГРАММИРОВАНИЯ




Свойства StringGrid
11. Align
12. Anchors
13. BiDiMode
15. ColCount
16. RowCount
17. Color
19. Ctl3D
10. Cursor
15. DragKind
16. DragMode
17. Enabled
19. FixedCols
20. FixedRows
21. Font
23. Height
26. HelpType
27. Hint
28. Left
29. Name
30. Options
31. PopupMenu
33. ShowHint
34. TabOrder
35. TabStop
36. Tag
37. Top
38. Visible
39. Width




StringGrid Delphi

Свойство TabOrder




   Свойство TabOrder StringGrid Delphi определяет порядковый номер компонента StringGrid в очереди обхода фокусом ввода компонентов, находящихся на Форме, при нажатии клавиши Tab.

   Свойство TabOrder имеет целый тип Integer и исчисляется от нуля. Максимальное значение свойства TabOrder равно количеству компонентов, могущих получить фокус ввода, минус один.

   Итак, нажатие клавиши Tab вызывает перемещение фокуса между компонентами. Компонент, имеющий номер 0, получает фокус ввода при старте программы и появлении Формы на экране.

   При разработке инерфейса программы компоненты на Форму добавляются в произвольном порядке, и сразу получают следующее по очерёдности значение свойства TabOrder. Соответственно, в этом случае фокус ввода в работающей программе хаотично скачет по компонентам, что естественно вызовет недоумение и раздражение у пользователя.

   Чтобы установить желаемый порядок перемещения фокуса ввода (т.е. установить желаемую последовательность значений TabOrder) между компонентами, нужно правой кнопкой щёлкнуть по любому компоненту на Форме, в появившемся меню выбрать пункт TabOrder..., что вызовет появление окошка со списком TabOrder:



   Выбранный компонент, отмеченный синим, можно стрелками переместить выше или ниже в списке. Тем самым, меняется значение TabOrder не только его, но и соседних компонентов, что обеспечивает правильную последовательность значений TabOrder. Фокус ввода при нажатии клавиши Tab будет перемещаться от более высокого компонента в списке к более низкому.

   Чтобы программно установить фокус на выбранный компонент, в Delphi есть метод SetFocus:

StringGrid1.SetFocus;

   Возникает вопрос, каким образом можно программно передать фокус от одного компонента к другому в последовательности TabOrder.

Вариант 1
    Можно воспользоваться тем фактом, что компоненты, которые могут получать фокус, имеют тип TWinControl. Нужно в цикле перебрать все компоненты на Форме имеющие тип TWinControl, и найти тот, у которого свойство TabOrder на 1 больше текущего (у которого свойство Focused=True):

procedure TForm1.JampFocus;
var i, TOrder: Integer;
begin
//Находим значение TabOrder у текущего компонента
for i:=0 to ComponentCount-1 do
 if (Components[i] as TWinControl).Focused then
  begin
   TOrder:=(Components[i] as TWinControl).TabOrder;
   break;
  end;
//Находим следующий компонент в списке TabOrder
for i:=0 to ComponentCount-1 do
 if (Components[i] as TWinControl).TabOrder=TOrder+1 then
  begin
//Перемещаем фокус к следующему компоненту
   (Components[i] as TWinControl).SetFocus;
   break;
  end;
end;

Вариант 2
   Нужно воспользоваться методом Delphi SelectNext, который как раз и перемещает фокус от текущего компонента к следующему в списке TabOrder:

procedure TForm1.JampFocus;
var i, TOrder: Integer;
begin
with Form1 do
//Находим текущий компонент с фокусом
for i:=0 to ComponentCount-1 do
 if (Components[i] as TWinControl).Focused then
  begin
//Перемещаем фокус
   SelectNext((Components[i] as TWinControl), True, False);
   break;
  end;
end;

   Первый параметр в процедуре SelectNext задаёт текущий компонент, обладающий фокусом, второй - направление перехода (True - по повышению значения свойства TabOrder, False - по понижению), третий (при значении True) поможет переместить фокус даже на компонент, у которого свойство TabStop имеет значение False.


Читайте также:

  • Свойство TabStop StringGrid Delphi

    Сайт из коллекции Компоненты Delphi    

    Карта сайта