Страница 29 из 59 Компонент TTabSet TObject-”TPersistent->TCoinponent—>TControl-”TWinControl-” —>TCustornControl->TTabSet Модуль TABS Страница Палитры компонентов Additional Этот компонент представляет собой набор закладок, на каждой из которых написана или нарисована какая-то ключевая информация. Щелчок по закладке означает ее активизацию. Когда два компонента работают в паре, как в примере выше, несложным путем можно связать активизацию одной из закладок с выбором соответствующей страницы в TNotebook. Впрочем, набор закладок применяют и с другими компонентами. Как бы ни был выровнен TTabSet, закладки появляются таким образом, что они как бы "приклеены" к его верхнему краю. Поэтому этот компонент располагают снизу от TNotebook или другого компонента, отображающего информацию. Строки, содержащие текст, который появится на закладках, описаны свойством: (Pb) property Tabs: TStrings; Строки (т. е. закладки) можно добавлять и удалять, все это отобразится в процессе исполнения. В отличие от TNotebook, список Objects свойства Tabs не используется, и программист может привязать к каждой закладке какой-нибудь объект, например, пиктограмму (см. ниже стиль tsOwnerDraw). Индекс активной (выделенной) в данный момент закладки доступен для чтения и записи через свойство: (рыproperty Tablndex: Integer; Отсчет начинается от 0 и заканчивается на Tabs.Count-1. Если ни одна закладка не выделена, Tablndex равен -1. При выборе закладки мышью генерируется событие OnClick. Если при этом текущий индекс изменился, генерируется также событие: (Pb) property OnChange: TTabChangeEvent; TTabChangeEvent = procedure(Sender: TObject; NewTab: Integer; var AllowChange: Boolean) of object; Узнав предполагаемый новый индекс (NewTab), изменение можно запретить (установив параметр AllowChange в False). Сменить текущую закладку можно и из программы, вызвав метод: procedure SelectNext(Direction: Boolean); Параметр Direction, равный True, означает увеличение индекса на 1, False — соответствующее уменьшение. При этом набор циклически замкнут — после последней закладки будет выбрана первая (с нулевым индексом) и т. д. Если описано много закладок, или если у них длинные имена, то все они могут не поместиться вдоль стороны компонента, т. е. нужна их прокрутка. Для этого у края комонента появляются две маленькие кнопки со стрелками, нажав которые мышью во время выполнения, можно вывести в поле зрения любую закладку. Все сказанное действительно, если свойство (Pb) property AutoScroll: Boolean; установлено в True. В противном случае доступ к невидимым закладкам нужно осуществлять программно. Закладки могут появляться не по всей ширине компонента, а на каком-то его участке. Отступы от правого и левого краев задаются при помощи свойств: (pb) property StartMargin: Integer; (Pb) property EndMargin: Integer; По умолчанию оба отступа равны 5 пикселам. Когда видны не все закладки, индекс первой из видимых содержится в свойстве: property Firstlndex: Integer; При этом одновременно видно столько закладок, сколько определено в свойстве: (Ro) property VisibleTabs: Integer; Определить индекс закладки по координатам точки можно, вызвав метод function ItemAtPos(X, Y: Integer): Integer; а узнать координаты отведенного ей прямоугольника — через вызов метода: function ItemRect(Item: Integer): TRect; Какими средствами изображается компонент? Это определяется его стилем: (Pb) property Style: TTabStyle; TTabStyle = (tsStandard, tsOwnerDraw) ; Стиль tsStandard подразумевает вывод на закладке ее названия стандартными средствами. Если программист хочет изобразить на ней нестандартную информацию, например, пиктограмму или произвольный текст, он должен установить стиль tsOwnerDraw. Для правильного изображения таких закладок нужно предусмотреть обработчики двух событий — OnMeasureTab и OnDrawTab. Первое из них имеет тип: (Pb) property OnMeasureTab: TMeasureTabEvent; TMeasureTabEvent = procedure(Sender: TObject; Index: Integer; var TabWidth: Integer) of object; В качестве параметра Index передается индекс закладки в наборе. В ответ в параметре Tab Width обработчик должен вернуть потребную ширину для изображения этой закладки. При этом высота пользовательских закладок устанавливается посредством свойства: (Pb) property TabHeight: Integer; Для стандартно изображаемых наборов закладок это свойство игнорируется — каждая закладка имеет постоянную высоту, которая не зависит от высоты самого компонента. После OnMeasureTab инициируется обработчик следующего события: (Pb) property OnDrawTab: TDrawTabEvent; TDr'awTabEvent = procedure (Sender: TObject; TabCanvas: TCanvas; R: TRect; Index: Integer; Selected: Boolean) of object; Обработчик позволяет нарисовать на закладке то, что нужно. Для этого он получает параметры: TabCanvas — канва компонента; R — доступный для рисования прямоугольник; Index — индекс закладки; Selected — определяет, имеет ли эта закладка фокус. У TTabSet есть собственная канва: (Ro) property Canvas: TCanvas; Цвета, которыми изображаются текущая закладка, можно установить с помощью свойства: (Pb) property SelectedColor: TColor; Цвет всех прочих закладок определяется свойством: (Wf property UnselectedColor: TColor; Фон, то есть оставшееся пространство до границ компонента, не принадлежащее закладкам, изображается цветом, заданным в свойстве: (Pb) property BackgroundColor: TColor; Насыщенность цвета этого пространства может специально ослабляться для того, чтобы закладки были лучше видны. За это ослабление отвечает свойство (pb) property DitherBackground: Boolean; которое по умолчаншо установлено в True. |