- •Delphi Справочник по компонентам. Класс tList
- •Класс tStream
- •Функции работы с файлами
- •Функции преобразования чисел с плавающей точкой
- •Функции работы с датами и временем
- •Элементы управления
- •Положение, размеры и выравнивание элементов управления
- •Активность и видимость элементов управления
- •Внутренний интерфейс Drag&Drop
- •Ярлычки и оперативная подсказка
- •Оконные элементы управления
- •Фокус ввода
- •Графическая подсистема
- •Класс tFont
- •Класс тРеn
- •Класс tBrush
- •Класс tCanvas
- •Класс tGraphic
- •Класс tPicture
- •Класс tMetafile
- •Класс tIcon
- •Класс tBitmap
- •Описание компонентов vcl
- •TPopupMenu.
- •Компонент tMainMenu
- •Компонент tPopupMenu
- •Компонент tBitBtn
- •Компонент tSpeedButton
- •Компонент tRadioGroup
- •Компонент tSpinButton
- •Ввод и редактирование текста
- •Компонент tEdit
- •Компонент тМеmo
- •Компонент tMaskEdit
- •Функции для форматирования текста
- •Оформление приложения
- •Компонент tPaintBox
- •Компонент tBevel
- •Компонент tImage
- •Компонент tHeader
- •Ввод и выбор значений
- •Компонент tListBox
- •Компонент tComboBox
- •Компонент tScrollBar
- •Компонент tSpinEdit
- •Компонент tDrawGrid
- •Многостраничные диалоговые окна
- •Компонент tNotebook
- •Компонент tTabSet
- •Компонент tTabbedNotebook
- •Группирование компонентов
- •Компонент tGroupBox
- •Компонент tPanel
- •Компонент tScrollBox
- •Компоненты — стандартные диалоговые окна Windows
- •Компоненты tOpenDialog и tSaveDialog
- •Компонент tColorDialog
- •Компонент tFontDialog
- •Компонент tPrintDlalog
- •Компонент tFindDialog
- •Компонент tReplaceDialog
- •Работа с файловой системой
- •Компонент tDriveComboBox
- •TDirectoryListBox
- •Компонент tFileListBox
- •Компонент tFilterComboBox
- •Компонент tDirectoryOutline
- •Работа со средствами мультимедиа
- •Динамический обмен данными (dde)
- •Компонент tdDeServerConv
- •Компонент tdDeServerltem
- •Компонент tddeciIentConv
- •Компонент tddecIientltem
- •Дополнительные компоненты
- •Компонент tGauge
- •Компонент tCalendar
- •Компонент tColorGrld
- •Использование интерфейса ole
- •Компонент toleContainer
- •Форма и ее свойства
- •Управление дочерними элементами
- •Приложение и среда его выполнения
- •Объект Application
- •Объект Clipboard
- •Компонент tScreen
- •Файлы инициализации
- •Печать данных из приложения
- •Компонент tSession
- •Компонент tDatabase
- •Компонент tDataSource
- •Компонент tTable
- •Компонент tQuery
- •Компонент tStoredProc
- •Компонент tReport
- •Компонент tBatchMove
- •Компонент tField
- •Объект tFieldDef
- •Важнейшие типы данных
- •Компоненты отображения данных и управления данными
- •Компонент tdbGrid
- •Компонент tdbNavigator
- •Компонент tdbText
- •Компонент tdbEdit
- •Компонент tdbMemo
- •Компонент tdbImage
- •Компонент tdbListBox
- •Компонент tdbComboBox
- •Компонент tdbCheckBox
- •Компонент tdbRadioGroup
- •Компонент tdbLookupUst
- •Компонент tdbLookupCombo
Многостраничные диалоговые окна
Во многих сложных программных комплексах сейчас предусмотрены десятки, а то и сотни параметров, которые может (должен!) устанавливать пользователь. Это означает либо перегруженность диалоговых окон, либо слишком большое их число. Выходом из этого положения стало повсеместное внедрение многостраничных диалогов-"блокнотов".
Для создания таких диалогов в 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.