Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Pascal / Delphi / Справочник по компонентам Delphi.doc
Скачиваний:
148
Добавлен:
02.05.2014
Размер:
1 Mб
Скачать

Многостраничные диалоговые окна

Во многих сложных программных комплексах сейчас предусмотрены десятки, а то и сотни параметров, которые может (должен!) устанавливать пользователь. Это означает либо перегруженность диалоговых окон, либо слишком большое их число. Выходом из этого положения стало повсеместное внедрение мно­гостраничных диалогов-"блокнотов".

Для создания таких диалогов в VCL предназначены компоненты TNotebook, TTabSet и TTabbedNotebook.

Компонент tNotebook

TObject—^TPersistent-”TComponent-”TControl—>TWinControl->

—>TCustoinControl-”TNotebook

Модуль EXTCTRLS

Страница Палитры компонентов Additional

Этот компонент представляет собой "страницы" блокнота, на которых распо­лагаются другие визуальные компоненты. Каждая страница сама является окон­ным элементом управления и содержит список того, что на ней расположено.

Получить доступ или переустановить активную страницу записной книжки можно посредством имеющегося у нее имени:

(Pb) property ActivePage: string;

Кроме того, активная страница еще и идентифицируется индексом, определен­ным в свойстве:

(Рта property Pagelndex: Integer;

Для реакции при изменении текущей страницы предусмотрено свойство:

(Pb) property OnPageChanged: TNotifyEvent;

В свойстве

(Pb) property Pages: TStrings;

содержится вся информация о страницах. Напомним, что в классе TStrings есть два основных списка: через список Pages.Strings можно обратиться к именам страниц, а через список Objects — непосредственно к объектам-страницам. Опубликованными свойствами страницы являются Caption, Height, Width, Visible и TabOrder. Используя методы компонента TStrings, можно добавлять и удалять страницы, проводить поиск и т. п. В конструкторе ком­понента TNotebook список инициализируется единственной страницей с именем 'Default'.

В приведенном ниже фрагменте кода после выбора гмени файла изобра­жения добавляется новая страница, содержащая это изображение в компоненте TScrollBox. После успешной загрузки страница "Default" более здесь не нужна и удаляется, если она еще есть:

Procedure TFormI.OpenlClick(Sender: TObject);

var Animage : TImage;

AScrollBox: TScrollBox;

i: integer;

begin OpenDialogI-Filter := GraphicFilter(TGraphic);

if not OpenDialogI.Execute then Exit;

Animage := TImage.Create(Self);

with Animage do begin

Picture.LoadFroinPile (OpenDialogI. FileName) ;

AutoSize := True;

Visible := True;

end;

AScrollBox := TScrollBox.Create(Self);

with AScrollBox do begin

Align := alClient;

Visible := True;

end;

with Notebookl do begin

Pages-Add(Extract PileName(OpenDialogI.FileName)) ;

Animage.Parent := AScrollBox;

AScrollBox.Parent := Pages-Objects[Pagelndex] as TPage;

i := Pages.IndexOf('Default');

if io-1 then Pages.Delete(i);

TabSetl.Tabs := Pages ;

TabSetl.TabIndex := Pages.Count - 1;

end;

end;

В этом примере компонент TNotebook взаимодействует с TTabSet — вместе они составляют блокнот.

Компонент 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.

Соседние файлы в папке Delphi