
- •2. Визуальные компоненты
- •2.1. Свойства
- •2.2. События
- •2.3. Методы
- •If Edit1.CanFocus then Edit1.SetFocus; {перед получением фокуса производится проверка на возможность передачи фокуса компоненту}
- •3. Работа с текстом
- •3.1. Использование надписей
- •3.2. Однострочный редактор
- •3.3. Общие свойства, события и методы компонентов редактирования
- •3.4. Класс tStrings
- •3.5. Многострочный редактор
- •3.6. Использование списков
- •3.7. Таблица String Grid
- •4. Кнопки и переключатели
- •4.1. Работа с кнопками
- •4.1.1. Стандартная кнопка
- •4.1.2. Кнопка с рисунком
- •4.2. Работа с переключателями
- •4.2.1. Переключатель с независимой фиксацией
- •If CheckBox1.Checked then MessageDlg ('Время истекло! ', mtError, [mbОк], 0);
- •4.2.2. Переключатель с зависимой фиксацией
- •4.3. Объединение элементов управления
- •5. Использование форм
- •5.1. Свойства, методы и события форм
- •5.2. Организация взаимодействия форм
- •5.3. Особенности модальных форм
- •5.4. Шаблоны форм
- •5.5. Процедуры и функции, реализующие диалоги
- •5.6. Стандартные диалоги
- •If OpenDialog1.Execute then // при отмене диалога открытие файла не происходит
- •If SaveDialog1.Execute then { Получить имя файла }
- •6.Главное и контекстное меню, панели инструментов
- •6.1. Класс tMenuItem
- •6.2. Cоздание главного и контекстного меню
- •6.3. Динамическая настройка меню
- •6.4. Панели инструментов
- •7. Создание графических изображений
- •7.1. Классы для работы с графикой
- •7.2. Основные компоненты для размещения изображений
- •7.3. Типы графических объектов
- •7.4. Создание диаграмм
- •8. Печать объектов
- •8.1. Класс tPrinter
- •8.2. Печать текста
- •Var fPrn: Text; // объявлена переменная типа Text.
- •8.3. Диалоговые окна для работы с принтером
- •8.4. Печать графических изображений
- •8.4.1. Печать форм
- •8.4.2. Печать диаграмм
- •9. Работа с датами
- •9.1. Преобразование даты
- •9.2. Компоненты для ввода дат
- •10. Сохранение параметров программы.
- •Ini : tIniFile; //объявляем переменную типа inifile
- •Ini : tIniFile; //объявляем переменную типа inifile
- •11. Обработка исключительных ситуаций
- •Var f: File; begin AssignFile(f, 'Somefile.Ext'); try // оператор, в котором возможна ошибка Reset(f); // работы с файлом finally CloseFile(f) end;
9. Работа с датами
В этой лекции вы познакомитесь с функциями преобразования дат, познакомитесь с глобальными переменными DateSeparator и ShortDateFormat, с компонентами выбора дат DateTimePicker и MonthCalendar и напишите приложение, использующее новые темы.
9.1. Преобразование даты
До сих пор мы еще не сталкивались с типом данных Дата. Тем не менее, этот тип очень широко используется в программировании. В Delphi он называется TDateTime, то есть, возвращает одновременно и дату, и время. Из-за такой его универсальности часто приходится применять функции преобразования, чтобы вернуть только дату, или только время, причем в разных форматах.
Date()
Эта функция возвращает текущие дату и время в формате TDateTime. Ее можно применять с другими функциями, задавая им в качестве параметра текущую дату. Пример:
DateToStr(Date());
DateToStr()
Возвращает указанную в параметре дату в виде строки. Например,
ShowMessage(DateToStr(Date()));
выведет сообщение с текущей датой в виде строки. Создайте новое приложение, установите на форму кнопку и в обработчике нажатия укажите эту строку. Скомпилируйте и посмотрите результат.
StrToDate()
Эта функция напротив, принимает в качестве параметра строку, в которой записали дату в правильном формате, и возвращает эту дату в виде TDateTime. Сложность заключается в том, что форматов для предоставления даты может быть много. У нас, например, принято вначале указывать день, потом месяц, и в конце год. А американцы первым указывают месяц, затем число и год. Причем год может быть как 4-х символьным (2007), так и 2-х символьным (07). Еще проблема с разделителями. Разделителем может служить и точка (20.09.2007), и знак слэш (20/09/2007).
Правильную настройку можно увидеть в окне Панель управления – Язык и региональные стандарты. Кроме того, пример
ShowMessage(DateToStr(Date()));
также вернет вам дату в виде строки в правильном формате. Если же вы желаете использовать эти функции для программ на продажу, и не знаете, какие настройки на компьютере покупателя, то придется использовать неявные глобальные переменные. Переменная DateSeparator содержит символ – разделитель дат. Порядок следования дня, месяца и года определяется глобальной переменной ShortDateFormat. Возможны следующие комбинации: месяц/день/год, день/месяц/год и год/месяц/день.
Например:
procedure TForm1.Button1Click(Sender: TObject);
begin
DateSeparator := '-';
ShortDateFormat := 'm/d/yyyy';
Label1.Caption := DateToStr(Date);
end;
Здесь мы не просто смотрим значение DateSeparator и ShortDateFormat, а присваиваем им новое значение. В дальнейшем, вывод дат будет осуществляться уже по новым правилам. Так, для даты 15.09.1994 в свойство Caption компонента Label1 будет записан текст "9-15-1994". Если бы мы указали
ShortDateFormat := 'mm/dd/yyyy'; То выводимые месяц и день были бы с нулями, если они меньше 10: "09-15-1994"
FormatDateTime() - эта функция возвращает дату и время в виде строки в указанном формате. Очень интересная функция, чаще всего используют именно ее, чтобы вывести строку нужного формата. У функции есть два параметра, первым указывается формат строки, в котором нужно вернуть дату. Второй параметр – переменная типа TDateTime, которую нужно преобразовать в строку. В качестве второго параметра также можно использовать функцию Date(), если требуется преобразовать текущие дату и время. Эту функцию можно сравнить с функцией FloatFormat(), которую мы изучали в прошлой лекции. Самое интересное в этой функции – формат строки, или маска. Он может содержать следующие символы:
d – показать день, не подставляя нули в начале: 1, 2, 12
dd – показать день с подстановкой нулей в начале: 01, 02, 12
ddd – показать день недели в коротком формате: Пн, Вт, Ср
dddd – показать полный день недели: Понедельник, Вторник, Среда
m – показать месяц без нулей: 1, 2, 10
mm – показать месяц с нулями: 01, 02, 10
mmm – показать короткое название месяца: Янв, Фев
mmmm – показать полное название месяца: Январь, Февраль
yy – показать короткий год: 07, 98, 00
yyyy – показать полный год: 2007, 1998, 2000
h – показать часы, не добавляя нулей: 3, 5, 12
hh – показать часы с нулями: 03, 05, 12
n – минуты без нулей: 3, 5, 12
nn – минуты с нулями: 03, 05, 12
s – секунды без нуля впереди: 3, 7, 30
ss – секунды с нулями: 03, 07, 30
Это практически полный набор форматов, которые вам могут пригодиться. Примеры использования:
ShowMessage (FormatDateTime('Сегодня dddd dd mmm yyyy г.', Date));
//Результат: Сегодня Среда 06 Фев 2008 г.
ShowMessage (FormatDateTime('Сегодня dd.mm.yyyy г.', Date));
//Результат: Сегодня 06.02.2008 г.
Обратите внимание, что после функции Date не указаны скобки. Это не ошибка. Если у функции нет параметров, ее можно указывать и без скобок.
Время можно указывать с разделителями:
ShowMessage(FormatDateTime('Текущее время: hh:nn:ss', Date));
//Результат: Текущее время: 05:28:15