Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi.pdf
Скачиваний:
217
Добавлен:
24.02.2016
Размер:
6.84 Mб
Скачать

текста (String list editor), которое вызывается нажатием кнопки с многоточием в поле значения свойства Lines.

Рисунок 9.35. Окно для ввода многострочного текста, отображаемого компонентом Memo

Компонент Memo часто имеет одну или две полосы прокрутки (вертикальную и горизонтальную). Их появление зависит от значения свойства ScrollBars.

В нашем приложении Alarms компонент Memo не нужен, но вам он безусловно пригодится в других программах.

9.3.7. Редактор с шаблоном

Поскольку компонент Edit не проверяет, что вводит пользователь, он не удобен для ввода данных строго определенного формата, например телефонных номеров, времени и др. На этот случай разработчики среды Delphi предусмотрительно создали компонент MaskEdit. Он находится в палитре компонентов на вкладке Additional (рисунок 9.36).

Рисунок 9.36. Компонент MaskEdit

Компонент MaskEdit представляет собой поле ввода, которое вынуждает пользователя вводить данные в строго заданном формате. Во многом

455

аналогичный компоненту Edit, он отличается от последнего тем, что имеет свойство EditMask и не имеет свойств HideSelection и OEMConvert.

Свойство EditMask задает шаблон (маску) для ввода символов текста. Шаблон имеет вид текстовой строки, его символы называются форматными и управляют тем, что вводит пользователь: буквы или цифры, в каком порядке, сколько и т.д. Мы не будем утомлять вас подробным описанием форматных символов, при необходимости обратитесь к справочному руководству. Нас интересует только шаблон для ввода времени с точностью до минуты.

Шаг 17. Выберите компонент TimeMaskEdit, затем в окне свойств перейдите к свойству EditMask и щелчком кнопки с многоточием откройте специальный редактор для этого свойства — Input Mask Editor (рисунок

9.37):

Рисунок 9.37. Выбор шаблона для компонента MaskEdit

В этом окне вы можете ввести шаблон и проверить его работу. Часто используемые шаблоны, например шаблоны телефонных номеров, даты, времени и некоторые другие, можно просто выбрать среди уже имеющихся образцов. Этой возможностью мы и воспользуемся. Выберите в списке Sample Masks пункт Short Time и щелкните на кнопке OK. Шаблон для ввода времени задан и имеет вид !90:00;1;_ . Обратите внимание, как при этом изменился компонент TimeMaskEdit (рисунок 9.38):

Рисунок 9.38. Компонент MaskEdit настроен для ввода времени

456

Шаг 18. Теперь давайте сделаем так, чтобы при появлении окна диалога поле ввода TimeMaskEdit не было пустым, а содержало текущее время. Для этого создайте у формы обработчик события OnCreate:

procedure TAlarmDetailsForm.FormCreate(Sender: TObject); begin

TimeMaskEdit.Text := FormatDateTime('hh:mm', Time); end;

Готово. Запустите программу и убедитесь, что она работает, как вы того ожидаете.

9.3.8. Раскрывающийся список

Раскрывающийся список (combo box) позволяет пользователю выбрать значение из большого множества альтернатив. Он представляет собой поле ввода, к которому прикреплен раскрывающийся список значений. Редактор служит для ввода нового значения, а список — для выбора существующего значения. Количество элементов в списке может быть произвольным, причем элементы можно динамически добавлять, удалять, заменять и т.д. Элементами списка обычно служат текстовые строки, но могут быть и графические рисунки (в последнем случае их редактирование невозможно).

Раскрывающийся список представлен компонентом ComboBox, который находится в палитре компонентов на вкладке Standard (рисунок 9.39):

Рисунок 9.39. Компонент ComboBox

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

Свойство

AutoCloseUp

AutoComplete

AutoDropDown

BevelEdges

BevelInner

Описание

Если равно True, то при вводе пользователем текста, который уже существует в списке Items, раскрытый список значений автоматически закрывается.

Если равно True, то компонент предугадывает вводимый пользователем текст на основе списка Items.

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

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

Внутренний скос рельефной рамки: bvNone — скос отсутствует, bvLowered — скос

457

BevelKind

BevelOuter

CharCase

DropDownCount

ItemHeight

ItemIndex

Items

MaxLength

внутрь, bvRaised — скос наружу; bvSpace — скос заменяется отступом.

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

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

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

Количество одновременно видимых элементов раскрывающегося списка.

Высота отдельного элемента списка, когда значение свойства Style равно csOwnerDrawFixed.

Порядковый номер выбранного в списке элемента, начиная с нуля. Элементы раскрывающегося списка.

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

Sorted

Style

Text

OnChange

OnCloseUp

OnDrawItem

OnDropDown

OnMeasureItem

OnSelect

Если равно True, то элементы списка сортируются в алфавитном порядке. Стиль отображения выпадающего списка (см. табл. 7.12).

Текст в строке редактора.

Происходит при вводе текста или выборе значения из списка. Не происходит при программном изменении свойства Text.

Происходит при закрытии списка значений.

Происходит при рисовании элемента раскрывающего списка, но только в том случае, если свойство Style содержит значение csOwnerDrawFixed или csOwnerDrawVariable.

Происходит при раскрытии списка значений.

Происходит перед рисованием элемента раскрывающего списка для расчета его высоты. Требует, чтобы свойство Style содержало значение csOwnerDrawVariable.

Происходит при выборе значения в раскрывающемся списке.

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

Раскрывающийся список умеет отображать себя по-разному в зависимости от значения свойства Style (см. таблицу 9.12).

Значение csSimple csDropDown

csDropDownList

csOwnerDrawFixed

Описание

Редактор и постоянно отображаемый список.

Редактор и ассоциированный с ним раскрывающийся список.

Раскрывающийся список без редактора. Все элементы списка имеют одинаковую высоту, которая рассчитывается автоматически.

Раскрывающийся список без редактора. Все элементы списка имеют одинаковую высоту, заданную в свойстве ItemHeight.

csOwnerDrawVariable Раскрывающийся список без редактора. Элементы списка имеют разную

458

высоту.

Таблица 9.12. Значения свойства Style компонента ComboBox

В двух последних случаях в компоненте ComboBox происходит событие OnDrawItem. Вы можете его перехватить и рисовать каждый элемент выпадающего списка как вам вздумается. Если элементы списка имеют разную высоту (стиль csOwnerDrawVariable), то компонент генерирует событие OnMeasureItem, чтобы узнать высоту каждого элемента. Стили csOwnerDrawFixed и csOwnerDrawVariable применяются в тех случаях,

когда элементы списка должны быть рисунками.

Шаг 19. Раскрывающиеся списки пригодились нам в диалоге Alarm Details для выбора дня недели (компонент WeeklyComboBox). Поскольку все дни недели заранее известны, выберите в свойстве Style значение csDropDownList (рисунок 9.40).

Рисунок 9.40. Для выбора дня недели применяется компонент ComboBox в стиле csDropDownList

Шаг 20. Теперь компонент WeeklyComboBox нужно заполнить списком исходных значений. Выберите его в форме, затем в окне свойств перейдите к свойству Items и нажмите кнопку с многоточием в поле значения. В появившемся окне введите список строк, как показано на рисунке 9.41.

459

Рисунок 9.41. В этом окне вводятся элементы списка — дни недели

Щелкните кнопку OK — список значений компонента WeeklyComboBox задан.

Шаг 21. Выбранный элемент раскрывающегося списка определяется значением свойства ItemIndex. Начальное значение свойства равно -1, что означает — ни один элемент не выбран. Однако в компоненте WeeklyComboBox должно быть выбрано то значение, которое соответствуют текущей дате. С этой целью нужно доработать у формы обработчик события OnCreate. В итоге он будет иметь следующий вид:

procedure TAlarmDetailsForm.FormCreate(Sender: TObject); begin

// Установка текущего времени

TimeMaskEdit.Text := FormatDateTime('hh:mm', Time); // Установка текущего дня недели

WeeklyComboBox.ItemIndex := DayOfWeek(DatePicker.Date) - 1; end;

Реализация метода основана на том, что компонент DatePicker при создании формы сразу содержит текущую дату.

На этом с визуальной частью диалога Alarm Details покончено. Правда, мы ничего не сказали о компоненте DateTimePicker (рисунок 9.42).

Рисунок 9.42. Компонент DateTimePicker

Впрочем, он уже работает так, как требуется. В нем нет ничего сложного, и мы надеемся, что вы разберетесь с ним по таблице 9.13.

460

Свойство

BevelEdges

BevelInner

BevelKind

BevelOuter

BevelWidth

CalAlignment

CalColors

Описание

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

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

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

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

Ширина скосов рельефной рамки.

Способ выравнивания раскрывающегося диалога: dtaLeft — по левому краю, dtaRight — по правому краю.

Цвета: BackColor — ни на что не влияет, существует для унификации настройки цвета с другими компонентами; MonthBackColor — цвет фона раскрывающего диалога; TextColor — цвет текста; TitleBackColor — цвет фона заголовка; TitleTextColor — цвет текста заголовка; TrailingTextColor — цвет текста дат, не принадлежащих текущему месяцу.

Checked

Date

DateFormat

DateMode

Значение переключателя, который отображается, если свойство ShowCheckbox содержит значение True.

Выбранная дата.

Формат даты: dfShort — короткий, dfLong — длинный.

Режим работы компонента: dmComboBox — по щелчку кнопки со стрелкой раскрывается окно с месячным календарем, dmUpDown — вместо кнопки со стрелкой показывается пара кнопок со стрелками вверх и вниз, щелчки на которых прокручивают день, месяц или год.

Format

Kind

MaxDate

MinDate

ParseInput

Формат даты и времени.

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

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

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

ShowCheckbox

Time

OnChange

OnCloseUp

OnUserInput

Показывает переключатель (флажок). Значение переключателя определяется свойством Checked.

Выбранное время.

Происходит при изменении значения даты и времени. Происходит при сворачивании раскрывающегося диалога. Происходит по мере ввода данных пользователем.

Таблица 9.13. Важнейшие свойства и события компонента DateTimePicker

461

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]