Главная страница

Учебное пособие для студентов Авторы А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четырько Содержание Содержание 1


Скачать 2.61 Mb.
НазваниеУчебное пособие для студентов Авторы А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четырько Содержание Содержание 1
Дата15.01.2023
Размер2.61 Mb.
Формат файлаdoc
Имя файлаlab_OOTP.doc
ТипУчебное пособие
#886736
страница28 из 33
1   ...   25   26   27   28   29   30   31   32   33
Edit Tab Order, которое открывается по команде меню Edit|TabOrder... (рисунок 9.22).



Рисунок 9.22. В окне EditTabOrder выставляется порядок перебора компонентов формы

Шаг 8. В этом окне задайте порядок перебора компонентов формы AlarmDetailsForm таким, как показан на рисунке.

Ну хорошо, скажете вы, допустим, порядок перебора задан. А как управлять передачей фокуса ввода программно? Очень просто. Чтобы передать фокус ввода требуемому компоненту, у него нужно вызвать метод SetFocus. Кстати при управлении фокусом ввода очень полезным может оказаться свойство формы ActiveControl, которое указывает активный компонент. Это свойство доступно в окне свойств и часто используется для указания компонента, который первым получит фокус ввода (в обход номера очереди). Если значение свойства не задано, то первым фокус ввода получает компонент, в котором значение свойства TabOrder равно нулю.

Шаг 9. Хотя окно диалога Alarm Details еще не готово, вам, наверное, не терпится его опробовать и убедиться, что перебор компонентов происходит в нужном порядке. Для этого нужно связать выполнение диалога с нажатием в главной форме кнопки New.... Поэтому подключите модуль AlarmDetails в модуле Main и определите следующий обработчик события OnClick для кнопки NewButton:

procedure TMainForm.NewButtonClick(Sender: TObject);

begin

AlarmDetailsForm := TAlarmDetailsForm.Create(Self);

try

AlarmDetailsForm.ShowModal;

finally

AlarmDetailsForm.Free;

end;

end;

Шаг 10. Теперь выполните компиляцию и запустите программу. В окне Clock Alarms нажмите кнопку New... . Вашему взору предстанет окно диалога Alarm Settings (рисунок 9.23).



Рисунок 9.23. Рабочий прототип окна для установки параметров будильника

Диалог запускается, фокус ввода перемещается в нужном порядке, но в целом компоненты работают не так, как надо. Ничего удивительного, ведь мы ими почти не занимались. Поэтому дальше мы приступаем к детальному изучению различных типов компонентов. На этом пути полигоном для испытаний нам послужит окно диалога Alarm Details.

9.3.2. Переключатели

Переключатели (check boxes) используются для установки параметров, характеризуемых двумя значениями – "Да" и "Нет" (True и False). Переключатели создаются с помощью компонента CheckBox, расположенного в палитре компонентов на вкладке Standard (рисунок 9.24).



Рисунок 9.24. Компонент CheckBox

Характерные свойства этого компонента собраны в таблице 9.6.

Свойство

Описание

Alignment

Определяет, с какой стороны от переключателя находится текст: taRightJustify – справа, taLeftJustify – слева.

AllowGrayed

Если равно True, то переключатель имеет три состояния.

Caption

Текст рядом с переключателем.

Checked

Определяет, включен ли переключатель.

State

Содержит текущее состояние переключателя.

WordWrap

Если равно значению True, то работает перенос слов.

Таблица 9.6. Важнейшие свойства компонента CheckBox

Обычно переключатель имеет два состояния: включен или выключен. Текущее состояние определяется значением свойства Checked. Если оно равно значению True, то переключатель включен, иначе — выключен. Бывает, что переключатель имеет еще и третье состояние — неопределенное (grayed). В этом состоянии переключатель закрашивается серым цветом. Если переключатель имеет три состояния, то вместо свойства Checked используется свойство State, а в свойстве AllowGrayed (разрешает неопределенное состояние) устанавливается значение True.

Когда при работе программы пользователь щелкает переключатель, в нем изменяются значения свойств Checked и State, а также происходит событие OnClick. Обрабатывая это событие, можно установить любую зависимость между состоянием переключателя и состоянием других компонентов.

В нашем примере компонент CheckBox используется для установки параметра Play Sound, управляющего выдачей звукового сигнала (рисунок 9.25). Мы назвали его SoundCheckBox.



Рисунок 9.25. Переключатель PlaySound представлен компонентом CheckBox

Шаг 11. Чтобы при первом появлении окна диалога, режим Play Sound был включен, установите в компоненте SoundCheck свойство Checked в значение True.

9.3.3. Взаимоисключающие переключатели

Взаимоисключающие переключатели (radio buttons) служат для установки взаимоисключающих параметров. Они обычно объединяются в группы и позволяют пользователю выбрать одно значение из фиксированного (причем немногочисленного) набора вариантов. При включении одного такого переключателя остальные переключатели этой же группы выключаются.

Группа переключателей создается с помощью нескольких компонентов RadioButton. Компонент RadioButton находится в палитре компонентов на вкладке Standard (рисунок 9.26).



Рисунок 9.26. Компонент RadioButton

Характерные свойства компонента RadioButton описаны в таблице 9.7.

Свойство

Описание

Alignment

Определяет, с какой стороны от переключателя находится текст: taRightJustify — справа, taLeftJustify — слева.

Caption

Текст рядом с переключателем.

Checked

Определяет, включен ли переключатель.

WordWrap

Если равно значению True, то работает перенос слов.

Таблица 9.7. Важнейшие свойства компонента RadioButton

В форму всегда помещаются несколько компонентов RadioButton, соответствующих возможным значениям устанавливаемого параметра. Например, в форме AlarmDetailsForm содержится три таких компонента (EverydayRadioButton, WeeklyRadioButton и DateRadioButton), которые используются для выбора периодичности срабатываний будильника (рисунок 9.27).



Рисунок 9.27. Переключатели Everyday, Weekly и Date представлены компонентами RadioButton

Внимание! Выбор положения переключателя осуществляется с помощью клавиш со стрелками.

Шаг 12. Текущее состояние переключателя контролируется свойством Checked. Если в одном переключателе оно устанавливается в значение True, то во всех остальных переключателях этой же группы оно устанавливается в значение False. Установите в компоненте EverydayRadioBox свойство Checked в значение True — этот переключатель будет изначально включен.

Шаг 13. Когда пользователь щелкает переключатель, в соответствующем компоненте RadioButton свойство Checked получает значение True и происходит событие OnClick. Обрабатывая это событие, можно установить любую зависимость между состоянием переключателя и состоянием других компонентов формы. Например, когда включен режим Everyday, компоненты для ввода дня недели и даты должны быть недоступны. Когда включен режим Weekly on, должен быть доступен выбор дня недели, но недоступна установка даты. Наконец, когда включен режим Date, установка дня недели должна быть недоступна, а установка даты — доступна. Чтобы достигнуть такой согласованности в работе, определите для переключателей EverydayRadioButton, WeeklyRadioButton и DateRadioButton единый обработчик события OnClick:

procedure TAlarmDetailsForm.RecurringRadioButtonClick(Sender: TObject);

begin

WeeklyComboBox.Enabled := Sender = WeeklyRadioButton;

DatePicker.Enabled := Sender = DateRadioButton;

end;

Шаг 14. Разумеется, компоненты WeeklyComboBox и DatePicker первоначально должны быть недоступны. Поэтому, удерживая клавишу Shift, выберите названную группу компонентов и установите свойство Enabled в значение False.

Теперь запустите программу и проверьте правильность ее работы.

9.3.4. Группа взаимоисключающих переключателей

Для быстрой организации группы взаимоисключающих переключателей очень удобен компонент RadioGroup, расположенный в палитре компонентов на вкладке Standard (рисунок 9.28).



Рисунок 9.28. Компонент RadioGroup

Его характерные свойства кратко описаны в таблице 9.8.

Свойство

Описание

Align

Способ выравнивания в пределах содержащего компонента.

Caption

Подпись к группе переключателей.

Columns

Число колонок в группе переключателей.

ItemIndex

Номер выбранного элемента, начиная с нуля. Если все переключатели находятся в выключенном состоянии, то значение свойства равно -1.

Items

Подписи к переключателям.

Таблица 9.8. Важнейшие свойства компонента RadioGroup

Компонент RadioGroup удобен тем, что заменяет группу компонентов RadioButton. Расположение переключателей, которые он отображает, подбирается автоматически с учетом заданного в свойстве Columns количества колонок. Номер активного зависимого переключателя хранится в значении свойства ItemIndex. Следующий рисунок 9.29 не относится к приложению Alarms, а просто поясняет, что такое компонент RadioGroup:



Рисунок 9.29. Четырехпозиционный переключатель представлен компонентом RadioGroup

Компонент RadioGroup создает группу, состоящую исключительно из переключателей. Однако он не годится в тех случаях, когда в группе должны присутствовать другие компоненты, что как раз имеет место в нашем примере. В этой ситуации для группировки компонентов применяется компонент GroupBox.

9.3.5. Панель группы компонентов

Компонент GroupBox служит для группировки компонентов, он расположен в палитре компонентов на вкладке Standard (рисунок 9.30).



Рисунок 9.30. Компонент GroupBox

Компонент GroupBox выглядит как панель с заголовком рисунок 9.31. Текст заголовка задается в свойстве Caption.



Рисунок 9.31. Панель с заголовком представлена компонентом GroupBox

Компонент GroupBox может содержать в себе другие компоненты. Это, например, означает, что установка его свойства Visible в значение False прячет группу со всеми расположенными внутри компонентами, а не только рамку с заголовком.

9.3.6. Поле ввода и редактор текста

Для ввода текста предназначены компоненты Edit и Memo. Они представляют собой соответственно поле ввода и редактор многострочного текста (кроме них существует еще компонент RichEdit, предназначенный для ввода и отображения форматированного текста, но о нем мы поговорим отдельно).

Поле ввода (Edit) служит для ввода различных слов, фраз и другого относительно короткого текста. Он не имеет полос прокрутки, но разрешает прокручивать текст по горизонтали клавишами перемещения курсора влево и вправо. Компонент Edit расположен в палитре компонентов на вкладке Standard (рисунок 9.32).



Рисунок 9.32. Компонент Edit

Характерные свойства компонента Edit описаны в таблице 9.9.

Свойство

Описание

AutoSelect

Если равно значению True, то при активизации редактора находящийся в нем текст автоматически выделяется.

AutoSize

Если равно значению True, то высота редактора автоматически подгоняется по высоте текста.

BevelEdges

Вложенные свойства beLeft, beTop, beRight и beBottom определяют видимость соответственно левой, верхней, правой и нижней сторон рельефной рамки.

BevelInner

Внутренний скос рельефной рамки: bvNoneскос отсутствует, bvLowered — скос внутрь, bvRaised — скос наружу; bvSpace — скос заменяется отступом.

BevelKind

Вид рельефной рамки: bkNone — рамки нет, bkTile — рамка с четкими скосами, bkSoft — рамка со сглаженными скосами, bkFlat — плоская рамка (без скосов).

BevelOuter

Внешний скос рельефной рамки: bvNone — скос отсутствует, bvLowered — скос внутрь, bvRaised — скос наружу; bvSpace — скос заменяется отступом.

CharCase

Преобразует текст к прописным или строчным буквам: ecUpperCase – к прописным буквам, ecLowerCase – к строчным буквам, ecNormal –преобразование символов не выполняется.

HideSelection

Если равно значению True, то при потере редактором активности выделение текста снимается.

MaxLength

Максимальное количество символов, которое пользователь может ввести. Если оно равно 0, то пользователь может ввести текст неограниченной длины.

OEMConvert

Если равно значению True, то символы текста преобразуются в кодовую таблицу OEM.

PasswordChar

Если не равно #0, то указанный в этом свойстве символ отображается вместо каждого символа текста. Применяется для ввода пароля.

ReadOnly

Если равно значению True, то пользователь не сможет изменить текст в редакторе.

Text

Редактируемый текст.

OnChange

Происходит при изменении текста.

Таблица 9.9. Отличительные свойства и события компонента Edit

Редактируемый текст содержится в свойстве Text. Его максимальная длина определяется значением свойства MaxLength.

Иногда компонент Edit используется для отображения нередактируемого текста. Для этого свойство ReadOnly устанавливается в значение True. Вы спросите, чем он в таком состоянии лучше компонента
1   ...   25   26   27   28   29   30   31   32   33


написать администратору сайта