Компонент ComboBox
(
,
страница Standard)
объединяет функции компонентов ListBox
и Edit
(окна редактирования). Он отображает
список строк в развернутом виде или в
виде выпадающего списка и позволяет
выбрать необходимую строку непосредственно
из списка или задать в качестве выбора
собственный текст. Отличие ComboBox
от схожего по функциям компонента
ListBox
заключается в следующем:
ComboBox разрешает пользователю редактировать список, а ListBox не разрешает;
в ComboBox список может быть развернут или свернут, а в ListBox он всегда развернут;
ListBox допускает множественный выбор, а в ComboBox выбирается всегда только один элемент.
Внешний вид списка определяется свойством Style:
csDropDown – выпадающий список со строками одинаковой высоты и с окном редактирования, позволяющий вводить или редактировать текст;
csSimple – развернутый список со строками одинаковой высоты и с окном редактирования, также позволяющий вводить или редактировать текст;
csDropDownList – выпадающий список со строками одинаковой высоты, не содержащий окна редактирования;
csOwnerDrawFixed – выпадающий список типа csDropDown с графической прорисовкой элементов одинаковой высоты, задаваемой свойством ItemHeight;
csOwnerDrawVariable – аналогичен предыдущему, но элементы списка могут иметь различную высоту.
Выбранный элемент или введенный текст можно определить по значению свойства Text. Индекс выбранного элемента списка определяются свойством ItemIndex.
Основное событие компонента OnChange наступает при изменении текста в окне редактирования в результате прямого редактирования текста или в результате выбора из списка.
Радиокнопки или переключатели
(компонент RadioButton,
,
страница Standard)
предназначены для выбора одного из
нескольких альтернативных вариантов.
Основным свойством компонента является Checked – определяет, выбрана ли данная кнопка или нет. Поскольку в начале выполнения приложения обычно необходимо, чтобы одна из кнопок группы была выбрана по умолчанию, ее свойство Checked надо установить в true в процессе проектирования.
Свойство Caption содержит надпись около кнопки. Значение свойства Alignment определяет, с какой стороны от кнопки появится надпись: слева (taLeftJustify) или, как принято по умолчанию, справа (taRightJustify).
Событие OnClick для компонента RadioButton вызывается только при выборе переключателя, т.е. если радиокнопка уже выбрана, то нажатие на ней левой кнопки мыши к наступлению события OnClick не приводит.
Одним из наиболее распространенных
элементов управления являются кнопки.
Свойства самой обычной кнопки
инкапсулированы в классе TButton.
(компонент Button,
,
страница Standard).
Все основные свойства класса были
перечислены в п. 5.2.
Добавим описание еще трех свойств:
если свойство Cancel = true, то при нажатии на клавишу Escape (Esc) вызывается событие OnClick данной кнопки (отметим, что на форме может быть только одна кнопка со свойством Cancel = true);
если свойство Default = true, то при нажатии на клавишу Enter вызывается событие OnClick данной кнопки (отметим, что на форме может быть только одна кнопка со свойством Default = true);
при создании окон диалога используется свойство ModalResult, которое обеспечивает при нажатии на кнопку установку значения аналогичного свойства родительской формы равным свойству ModalResult кнопки.
Из методов, присущих кнопкам, имеет смысл отметить один – Click. Выполнение этого метода эквивалентно щелчку на кнопке, т.е. вызывает событие кнопки OnClick. Метод используют для дублирования щелчка на кнопке какими-то другими действиями.
Кроме класса TButton,
в Delphi есть компоненты
кнопок с еще большим набором возможностей.
Это BitBtn
(
,
страница Additional)
и SpeedButton
(
,
страница Additional).
Эти элементы интерфейса способны
содержать в себе графические изображения
(свойство Glyph),
находиться в нажатом зафиксированном
состоянии, работать в составе группы и
др.
При разработке интерфейса ПО несколько функционально связанных элементов часто объединяют в одну группу. Для визуализации такого объединения обычно используют специальные контейнерные элементы – панели.
Первый из компонентов такого типа –
Bevel
(
,
страница Additional)
– не является контейнером. Он создает
чисто зрительный эффект объединения
элементов. Стиль отображения определяется
свойством Style,
которое может принимать значения
bsLowered
(утопленный) и bsRaised
(приподнятый). Контур компонента
определяется свойством Shape:
прямоугольник (bsBox),
рамка (bsFrame),
пунктирная рамка (bsSpacer),
верхняя, нижняя, левая и правая линии
(соответственно – bsTopLine,
bsBottomLine,
bsLeftLine,
bsRightLine).
Компонент Panel
(
,
страница Standard)
представляет собой панель, которая
служит контейнером, объединяющим в
группу управляющие компоненты, компоненты
ввода и отображения информации и другие,
меньшие, контейнеры. Панель можно
использовать также для построения полос
состояния и инструментальных панелей.
Объединение панелью таких компонентов,
как радиокнопки (класс TRadioButton)
обеспечивает их функционирование как
единой группы – включение одной выключает
остальные (отметим, что существует также
компонент RadioGroup
(
,
страница Standard)
– панель, содержащая радиокнопки,
регулярно расположенные столбцами и
строками). Внешний вид компонента
определяется свойствами BorderStyle,
BevelInner,
BevelOuter,
BevelWidth,
BorderWidth.
Практически аналогичный компонент
GroupBox
(
,
страница Standard)
не имеет широких возможностей задания
различных стилей оформления, но может
иметь заголовок.
Инструментальная панель (компонент
ToolBar,
,
страница Win32)
используется для быстрого доступа к
часто используемым функциям приложения
с помощью инструментальных быстрых
кнопок и других компонентов. Размещаемые
компоненты автоматически располагаются
рядами и упорядочиваются по размерам.
Для проектирования кнопок необходимо
щелкнуть на ToolBar
правой кнопкой мыши и выбрать из
всплывшего меню команду New
Button.
На форме появится очередная кнопка –
объект типа TToolButton,
по свойствам и внешнему виду подобный
компоненту SpeedButton.
Специальный контейнер инструментальных
панелей (компонент CoolBar,
,
страница Win32)
позволяет проектировать перестраиваемые
панели, состоящие из полос, в которые
могут включаться инструментальные
панели и любые другие оконные компоненты
(окна редактирования, панели и т.п.),
каждый из которых автоматически
снабжается средствами перемещения в
пределах окна CoolBar.
В полосы могут вставляться и не оконные
компоненты, например, надписи (класс
TLabel),
но они не будут перемещаемыми.
Еще большими возможностями обладает
компонент ControlBar
(
,
страница Additional).
Отличие от CoolBar
заключается в широком применении техники
перетаскивания и встраивания Drag&Doc.
Каждый компонент, попадая на ControlBar,
получает полосу захвата, свойственную
этой технологии. В дальнейшем возможно
перемещать по ControlBar
все эти компоненты и даже вынимать их,
превращая в самостоятельные плавающие
окна, что определяется свойством
AutoDrag.
Но чтобы воспользоваться этой возможностью,
надо у компонентов, размещенных на
ControlBar,
установить свойства DragMode
= dmAutomatic и DragKind
= dkDock, что означает автоматическое
выполнение операций Drag&Doc.
Свойства RowSize и RowSnap определяют процедуру встраивания: RowSize задает размеры полос, в которые могут встраиваться компоненты, а RowSnap определяет захват полосами встраиваемых компонентов. Свойство AutoDock, установленное в true, обеспечивает временное встраивание компонента, перетаскиваемого над панелью, в ControlBar. Это позволяет во время работы приложения наглядно представлять результат перетаскивания, и относится не только к компонентам, первоначально находившимся на панели ControlBar, но и к любому перетаскиваемому и встраиваемому компоненту.
Строка главного меню (компонент
MainMenu,
,
страница Standard)
располагается в верхней части главной
формы приложения. Доступ к командам
осуществляется либо непосредственным
выбором мышью пункта меню, либо с помощью
специально назначенных клавиш клавиатуры.
Проектирование производится с помощью
конструктора меню, вызываемого
двойным щелчком на компоненте. Команды
Create
Submenu позволяет ввести подменю
в выделенный раздел.
Свойство Items содержит массив разделов меню типа TMenuItem, обладающих своими свойствами, методами, событиями. Свойство Caption обозначает надпись раздела, свойство ShortCut определяет клавиши быстрого доступа к разделу. Свойство Default определяет, является ли данный раздел разделом по умолчанию своего подменю, т.е. разделом, выполняемым при двойном щелчке пользователя на родительском разделе. Свойство Break используется в длинных меню, чтобы разбить список разделов на несколько столбцов. Свойство Checked, установленное в true, указывает, что в разделе меню будет отображаться маркер флажка, показывающий, что данный раздел выбран. Еще одним свойством, позволяющим вводить маркеры в разделы меню, является RadioItem. Это свойство, установленное в true, определяет, что данный раздел должен работать в режиме радиокнопки совместно с другими разделами, имеющими то же значение свойства GroupIndex. Для каждого раздела могут быть установлены во время проектирования или программно во время выполнения свойства Enabled (доступен) и Visible (видимый). Предусмотрена возможность ввода в разделы меню изображений с помощью свойств Bitmap и ImageIndex. Первое из них позволяет непосредственно ввести изображение в раздел. Второе – указать индекс изображения во внешнем компоненте ImageList. Указание на этот компонент задается в свойстве Images.
Пункты меню в рамках одного раздела принято логически делить на группы. Друг от друга группы отделяются специальной линией – разделителем. Для реализации подобного эффекта достаточно присвоить пункту меню в качестве заголовка (Caption) одиночный символ "-".
Свойства и методы класса TMainMenu могут обеспечить объединение меню главной и вспомогательной форм. В MDI-приложениях меню дочерней формы всегда объединяется с меню главной формы. В SDI-приложениях при установке свойства AutoMerge в true меню вторичной формы также объединится с меню главной формы приложения. Положение добавляемых пунктов меню зависит от значения их свойств GroupIndex.
Основное событие раздела меню – OnClick, возникающее при выборе раздела с помощью мыши или при нажатии "горячих" клавиш и клавиш быстрого доступа.
Компонент PopupMenu
(
,
страница Standard)
определяет всплывающее контекстное
меню, появляющееся на экране при
щелчке правой кнопкой мыши в поле
практически любого компонента, который
связан с данным меню своим свойством
PopupMenu.
Процесс проектирования контекстного
меню и его свойства практически аналогичны
компоненту MainMenu.
Таймер (компонент Timer,
,
страница System)
позволяет задавать интервалы времени.
Компонент не является визуальным, но
тем не менее часто используется, например,
при синхронизации мультипликации, для
программного закрытия окон, для
регулярного опроса источников информации,
при контроле времени на ответ в обучающих
программах и т.д.
Таймером можно управлять с помощью двух свойств: Interval – интервал времени в миллисекундах и Enabled – доступность. Если задать Interval=0 и Enabled=false, то таймер перестанет работать, т.е. перестанет генерировать событие OnTimer через заданный интервал времени после предыдущего срабатывания, или после программной установки свойства Interval (или – альтернативный вариант – свойства Enabled), или после запуска приложения.
Заданный интервал времени выдерживается достаточно точно, только если он составляет сотни и тысячи миллисекунд. При меньших значениях, как правило, реальные интервалы времени оказываются существенно больше.