Тема7 Дополнительные компоненты Delphi
Цель: Формирование знаний о компонентах страницы Win32.
План:
1 TDateTimePicker — ввод и отображение даты/времени
2. TMonthCalendar- календарь
3. Системные диалоги
1 TDateTimePicker — ввод и отображение даты/времени
Компонент предназначен для ввода и/или отображения даты и времени. При показе даты в режиме DateMode=dmComboBox календарь можно не раскрывать и установить дату вручную в верхнем окне. Это удобно, если нужно установить сразу и день, и месяц, и год На раскрытом календаре изменить месяц можно небольшими кнопками в верхней части компонента Календарь закрывается после выбора даты или при щелчке на раскрывающей кнопке. Установив в свойство Kind значение dtkTime, можно заставить компонент отображать время Это время в момент установки компонента на форму соответствует системному времени, и в дальнейшем его можно изменить, задав новое значение свойству Time.
Свойства компонента TDateTimePicker:
Свойство | Описание |
TDTCalAlignment = (dtaLeft, dtaRight) ; property CalAlignment: TDTCalAlignment; | Определяет положение раскрывающегося календаря dtaLeft— слева от компонента, dtaRight — справа от компонента Учитывается только для Kind= dtkDate И DateMode=dmComboBox |
property CalColors: TDateTimeColors ; | С календарем связан объект класса TDateTimeColors, свойства которого определяют цвета календаря |
property Checked: Boolean; | Если выполняются условия Checked=True и ShowCheckBox=True, флажок рядом с полем даты (времени) будет показан и установлен Наличие флажка или его отсутствие разрешает или запрещает ручной ввод даты или времени |
property Date: TDate; | Содержит введенную дату |
TDTDateFormat = (dfShort, dfLong); property DateFormat: TDTDateFormat; | Определяет формат показа даты dfShort— 08. 09. 99, dfLong — 8 Сентября 1999 г |
TDTDateMode = (dmComboBox, dmUpDown); property DateMode: TDTDateMode; | Определяет способ выбора даты dmComboBox — с помощью раскрывающегося календаря, dmUpDown — с помощью встроенного компонента TupDown |
TDateTimeKind = (dtkDate, dtkTime); property Kind: TDateTimeKind, | Определяет содержимое компонента dtkDate — дата, dtkTime — время |
property MaxDate: TDate; | Определяет максимальную дату, которую может выбрать или ввести пользователь |
property MmDate: TDate, | Определяет минимальную дату, которую может выбрать или ввести пользователь |
property Parselnput: Boolean, | Если содержит значение True, возникает событие OnUserinput при каждом вводе пользователя в текстовое поле |
property ShowCheckbox: Boolean, | Если содержит значение True, рядом с полем даты (времени) вставляется флажок, с помощью которого пользователь может запретить ручное изменение даты (времени) |
property Time: TTime; | Содержит введенное пользователем время |
События компонента TDateTimePicker:
Событие | Описание |
property OnChange: TNotifyEvent; | Возникает при любом изменении содержимого компонента |
property OnCloseUp: TNotifyEvent; | Возникает при закрытии календаря |
property OnDropDown: TNotifyEvent; | Возникает при открытии календаря |
DTParselnputEvent = procedure (Sender: TObject; const UserString: String; var DateAndTime: TDateTime; var AllowChange: Boolean) of object; property OnUserlnput: TDTParselnputEvent; | Возникает при ручном вводе в текстовое поле, если ParseInput=True. UserString— введенная пользователем строка; DateAndTime — значения свойств Date и Time. В параметре AllowChange обработчик разрешает или запрещает изменение даты или времени |
2 ТМоnth Calendar – календарь
Компонент предназначен для выбора или отображения даты. Он очень похож на календарь, который появляется в компоненте TDateTimePicker (при значении dmComboBox в свойстве DateMode), но, в отличие от последнего, может отображать одновременно несколько смежных месяцев — в зависимости от своих размеров.
Свойства компонента TMonthCaiendar:
Свойство | Описание |
property CalColors: TMonthCalColors; | С компонентом связан объект класса TMonthCalColors (см.далее) |
property Date: TDate; | Определяет выбранную дату |
property EndDate: TDate; | Определяет конечную дату диапазона выбранных дат |
type TCalDayOfWeek = (dowMonday, dowTuesday, dowWednesday, dowThursday, dowFriday, dowSaturday, dowSunday, dowLocaleDefault); property FirstDayOfWeek: TCalDayOfWeek; | Определяет первый день недели |
property MaxDate: TDate; | Содержит максимальную дату, месяц которой еще будет доступен для отображения в компоненте. Если свойство содержит пустое значение, отображается любой следующий месяц |
property MaxSelectRange: Integer; | Содержит максимальное количество дат в выбранном диапазоне |
property MinDate: TDate; | Содержит минимальную дату, месяц которой еще будет доступен для отображения в компоненте. Если свойство содержит пустое значение, отображается любой предыдущий месяц |
property MultiSelect: Boolean; | Разрешает/запрещает возможность выделения диапазона дат |
property ShowToday: Boolean; | Разрешает/запрещает показ текущей даты (по показаниям системных часов) внизу календаря |
Property ShowTodayCircle: Boolean; | Разрешает/запрещает обводить кружком текущую дату |
property WeekNumbers: Boolean; | Разрешает/запрещает показ порядковых номеров недель от начала года в левой колонке |
Свойства объекта класса TMonthCalColors:
Backcolor — цвет фона, разделяющего смежные месяцы;
MonthBackColor — цвет фона дат;
Textcolor — цвет дат;
TitleBackColor — цвет фона заголовка месяца;
TitleTextcolor — цвет текста заголовка;
TrailingTextcolor — цвет текста ведущих и ведомых дат.
Системные диалоги
Функции InputBox и InputQuery
Функция InputBox объявлена в модуле Dialogs следующим образом:
function InputBox(const ACaption, APrompt, ADefault: string): string;
Она предлагает пользователю диалоговое окно с заголовком Acaption, с предложением Aprompt пользователю что-то написать и с окошком редактирования, в котором предварительно загружено начальное значение текста Adefault. Если пользователь нажмет в окне ОК, то функция вернет введенную им строку текста. Если же пользователь в диалоге нажал Cancel, или нажал Esc, или закрыл окно системной кнопкой, то функция вернет строку Adefault, даже если перед этим пользователь что-то написал в окне редактирования.
Например, оператор
Name:= InputBox(‘Пожалуйста, представьтесь’, ‘Укажите, как в дальнейшем обращаться к Вам’, ‘Неизвестный’);
отобразит следующее окно:
и вернет в переменную Name текст, введенный пользователем, или строку «Неизвестный»
Понять по возвращенному результату, написал ли пользователь какой-то текст, или отказался от ввода, можно, сравнив возвращенный результат со значением Adefault. Впрочем, результат останется неизменным и в случае, если пользователь ничего не написал в диалоге, но нажал кнопку ОК.
Если надо достоверно знать, отказался ли пользователь от диалога, или нажал ОК, следует использовать похожую на InputBox функцию InputQuery:
function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean;
Смысл параметров ACaption и Aprompt тот же, что в функции InputBox. Параметр Value – это строка текста в окне редактирования. Вы можете присвоить ей начальное значение, а после вызова InputQuery в параметре Value будет находиться ответ пользователя.
Функция InputQuery возвращает true только в том случае, если пользователь вышел из диалога, нажав ОК. В остальных случаях (при нажатии Esc, при щелчке на системной кнопке окна или на кнопке Cancel) возвращается false, а значение параметра Value сохраняется тем, какое было до обращения к InputQuery.
Например, операторы:
Name:= 'Неизвестный';
if InputQuery('Пожалуйста, представьтесь',
'Укажите, как в дальнейшем обращаться к Вам', Name) then
ShowMessage('Здравствуйте, господин ' + Name + '!')
else
ShowMessage('Вы не представились, господин Неизвестный ');
отобразят окно, представленное выше и после окончания диалога выдадут сообщение, зависящее от того, нажал ли пользователь в диалоге ОК, или нет.
Литература: 2, с.145-167.
Контрольные вопросы.
1. Для чего предназначен компонент TDateTimePicker?
2. Какие варианты использования компонента TDateTimePicker вы знаете?
3. Перечислите свойства компонента TDateTimePicker и их назначение?
4. Перечислите события компонента TDateTimePicker и их назначение?
5. Для чего предназначен компонент ТМоnth Calendar?