Файл: Учебное пособие для студентов Авторы А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четырько Содержание Содержание 1.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.05.2024
Просмотров: 128
Скачиваний: 4
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Шаг 3. Установите в компоненте NewButton свойство Default в значение True, чтобы кнопка срабатывала при нажатии клавиши Enter.
Шаг 4. Для компонента CloseButton создайте следующий обработчик события OnClick:
procedure TMainForm.CloseButtonClick(Sender: TObject);
begin
Close;
end;
Шаг 5. Необходимые подготовительные операции сделаны. Теперь перейдем к разработке окна диалога, предназначенного для ввода параметров будильника. Это окно будет вызываться при нажатии кнопок New и Edit. С этой целью добавьте в проект новую форму, дайте ей идентификатор AlarmDetailsForm, скорректируйте размеры и установите следующие значения свойств:
Caption = Alarm Details
BorderStyle = bsDialog
Position = poScreenCenter
Теперь сохраните модуль формы под именем AlarmDetailsUnit.pas.
Шаг 6. Добавьте в форму кнопки OK и Cancel и установите их свойства так, как показано на рисунке 9.20.
Рисунок 9.20. Стандартные кнопки OK и Cancel и их свойства
Шаг 7. Теперь займемся размещением компонентов для ввода данных. Прежде всего подумаем, какие параметры должны устанавливаться в диалоге. К ним относятся: текстовое сообщение, которое появится по сигналу будильника, время сигнала с точностью до минуты, признак того, нужно ли проигрывать звуковой сигнал, периодичность выдачи сигналов (ежедневно, в заданный день недели или в конкретный день). Учли все? Вроде бы, да. Тогда разместите в форме компоненты, обеспечивающие ввод перечисленных параметров (рисунок 9.21).
Рисунок 9.21. Эскиз окна для установки параметров будильника
Эскиз окна диалога создан (с помощью выносок на рисунке пояснены названия компонентов). Окинув его взором, вы обнаружите, что знакомых вам компонентов немного — это Bevel, Label и Button. Зато новых — хоть отбавляй: CheckBox, RadioButton, Edit, MaskEdit, GroupBox, ComboBox, DateTimePicker. Однако не пугайтесь, мы обо всех расскажем, и вы убедитесь, что обращаться с ними вовсе не сложно.
9.3.1. Фокус ввода
Во время работы программы только один из компонентов принимает клавиатурный ввод в текущий момент времени. Принято говорить, что такой компонент обладает фокусом ввода или просто — активен. Передача фокуса ввода осуществляется щелчками компонентов или нажатием клавиш Tab и Shift+Tab на клавиатуре. При использовании клавиатуры фокус ввода передается последовательно от одного компонента другому, причем клавиша Tab обеспечивает перебор элементов в прямом порядке, а сочетание клавиш Shift+Tab – в обратном.
Очередность, в которой компонент получает фокус ввода, задается его свойством TabOrder. Свойство TabOrder действует относительно содержащего компонента, например очередность перебора компонентов MessageEdit и TimeMaskEdit задается относительно формы, а очередность перебора компонентов WeeklyComboBox и DatePicker — относительно компонента GroupBox.
Если нужно исключить компонент из очереди на фокус ввода, установите свойство TabStop в значение False. Однако в этом случае фокус ввода можно насильно передать компоненту с помощью мыши или «горячей» клавиши.
Изначально порядок перебора соответствует порядку добавления компонентов в форму, но его можно изменить, устанавливая значения свойства TabOrder в компонентах. Если компонентов в окне диалога очень много, то это занятие может стать довольно утомительным. В этом случае удобнее пользоваться окном
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 и происходит событие