Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Pascal / Delphi / Справочник по компонентам Delphi.doc
Скачиваний:
148
Добавлен:
02.05.2014
Размер:
1 Mб
Скачать

Функции работы с датами и временем

В Delphi для хранения дать! и (или) времени предусмотрен формат TDateTime, представляющий собой, на самом деле, обычное число с плавающей точкой.

При этом дата представляется целой частью числа, а время — дробной. Преимущество этого подхода в том, что теперь дать! и времена можно кор­ректно складывать и вычитать, например:

var StartTime: tDateTime;

procedure TFormI.PormCreate(Sender: TObject);

begin

StartTime := Now;

end;

procedure TFormI.FormClick(Sender: TObject);

begin

Labell.Caption := 'Co времени запуска прошло' +

DateTimeToStr(Now - StartTime);

end;

Функции этой группы приведены в таблице:

function EncodeDate(Year, Month, Day: Word): TDateTime;

Преобразует дату, заданную раздельно годом, месяцем и днем, в формат TDateTime. Если они выходят за допустимые пределы, возникает ИС EConvertError.

procedure DecodeDatefDate: TDateTime; var Year, Month, Day: Word);

Преобразует дату в виде TDateTime к раздельным составляющим: году, месяцу и дню.

function EncodeTimefHour, Min, Sec, MSec: Word):

TDateTime;

Преобразует значение времени, заданное часом, минутой, секундой и миллисекундой в формат TDateTime.

procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word) ;

Преобразует значение времени в формате TDateTime в раздельные составляющие: час, минуту, секунду и миллисекунду.

function DayOfWeektDate: TDateTime): Integer;

Возвращает номер текущего дня недели от 1 (воскресенье) до 7 (суббота).

function Date: TDateTime;

Возвращает текущую дату.

function Time: TDateTime;

Возвращает текущее время.

function Now: TDateTime;

Возвращает текущие дату и время.

function DateToStr(Date: TDateTime): string;

Преобразует дату Date в текстовую строку.

function TimeToStr(Time: TDateTime): string;

Преобразует время из типа TDateTime в текстовую строку.

function DateTimeToStr(DateTime: TDateTime): string;

Преобразует дату и время из типа TDateTime в текстовую строку.

function StrToDatefconst S: string): TDateTime;

Преобразует текстовую строку в дату типа TDateTime. Строка должна содержать два или три числа, разделенных символом, содержащимся в DateSeparator. Формат даты в строке определяется в соответствии со значением переменной ShortDateFormat.

function StrToTime(const S: string): TDateTime;

Преобразует текстовую строку S в значение времени. Должен использоваться формат HH:NN:SS, где SS — может принимать значения 'AM' или ТМ', иначе означает секунды. Если необходимо получать время в 24-х часовой шкале, то элемент SS формата опус­кается. Если преобразование невозможно, возникает ИС EConvertError.

function

StrToDateTime(const S: string): TDateTime;

Преобразует текстовую строку S в дату и время в формате MM/DD/YY HH:NN:SS (элемент SS см. выше).

function FormatDateTime(const Format: string; DateTime: TdateTime): string;

Преобразует дату и время из типа TDateTime в тек­стовую строку, используя формат, задаваемый параметром Format (см. примеч. 1).

procedure DateTimeToStringfvar Result: string; const Format: string; DateTime: TDateTime);

Преобразует дату и время типа TDateTime в строку Result, используя формат, передаваемый параметром Format (см. примеч. 1).

Примечания:

1. Правила задания спецификатора формата для даты и времени отлича­ются от рассмотренных выше. В первую очередь надо иметь в виду то, что функции вроде FormatDateTime оперируют над одним значением TDateTime, а спецификаторы формата извлекают из него те или иные составные части. При этом могут использоваться:

с

Отображает дату, используя формат ShortDateFormat, затем отобра­жается время в формате LongTimeFormat. Время не отображается, если дробная часть переменной DateTime нулевая.

d

Отображает число месяца без нуля в левом разряде (1-31).

dd

Отображает число месяца с нулем в левом разряде (01-31).

ddd

Отображает день недели в соответствии с сокращенными именами из переменной ShortDayNames.

dddd

Отображает день недели в соответствии с полными именами из переменной LongDayNames.

ddddd

Отображает дату в соответствии с форматом ShortDateFormat.

dddddd

Отображает дату в соответствии с форматом LongDateFormat.

m

Отображает месяц как число без нуля в левом разряде (1-12).

mm

Отображает месяц как число с нулем в левом разряде (01-12).

irirnm

Отображает месяц в соответствии с сокращенными именами из переменной ShortMonthNames.

П1ГПГПП1

Отображает месяц в соответствии с полными именами из переменной Long MonthN am es.

УУ

Отображает год двумя цифрами.

УУУУ

Отображает год четырьмя цифрами.

h

Отображает час как число без нуля в левом разряде (0-23).

hh

Отображает час как число с нулем в левом разряде (00-23).

n

Отображает минуты как число без нуля в левом разряде (0-59).

nn

Отображает минуты как число с нулем в левом разряде (00-59).

s

Отображает секунды как число без нуля в левом разряде (0-59).

ss

Отображает секунды как число с нулем в левом разряде (00-59).

t

Отображает время в соответствии с форматом ShortTimeFormat.

tt

Отображает время в соответствии с форматом LongTimeFormat.

am/pin

Отображает время в 12-часовой шкале. 'AM' означает часы до полудня, 'РМ' — часы после полудня.

arnpm

Отображает время в 12-часовой шкале. При этом для времени до полудня отображается содержимое переменной TimeAMString, а после полудня — TimePMString.

a/p

Отображает время в 12-часовой шкале, 'а' означает часы до полудня, 'р' — часы после полудня.

/

Отображает символ — разделитель даты, содержащийся в переменной DataSeparator.

Отображает символ — разделитель времени, содержащийся в переменной TimeSeparator.

'XX'/'XX'

Символы, заключаемые в простые или двойные кавычки, отображаются как есть и не подвергаются форматированию.

Например, результатом вызова функции с параметрами

FormatDateTime (' "Совещание состоится в" dddd, dirrmim, yyyy, ' + ' "в" hh:nn', StrToDateTime('12/31/95 23:55')) ;

будет строка 'Совещание состоится в среду, 31 декабря 1995 в 23:55' (естес­твенно, если вы переопределили значения элементов массива LongMonth-Names).

2. Спецификаторы am/pm, ampm, a/p используются вместе со спецификато­рами h и hh.

3. Спецификаторы могут быть указаны как в верхнем, так и в нижнем регистрах символов — это не играет роли.

4. Начальные значения всех используемых при форматировании даты и вре­мени переменных берутся из секции [inti] файла WIN.INI.

2Л4.6. Функции для работы с памятью

Для работы с памятью Delphi предоставляет следующие функции:

function AllocMemfSize: Cardinal): Pointer;

SYSUTILS

Выделяет блок памяти размером Size и возвращает указатель на него. Выделенная память обнуляется.

function ReAllocMem(P: Pointer; CurSize, NewSize: Cardinal): Pointer;

SYSUTILS

Изменяет размер блока памяти разме­ром CurSize, на который указывает Р. Если удается выделить блок размером NewSize, функция возвращает указатель на него. Содержимое старого блока переносится в новый. При этом, если CurSize>NewSize, часть содержимого отбрасывается, а если CurSize<NewSize, то остаток свободного места заполняет­ся нулями.

function MemAlloc(Size: Longint): Pointer;

GRAPHICS

Выделяет блок размером Size. Если он меньше 64К, память выделяется в куче памяти Delphi, в противном случае — глобальная.

Память, выделенная при помощи этих функций, может быть освобождена при помощи функции FreeMem.

У компонента же определение конструктора на удивление лаконично, но в нем присутствует указатель на Owner:

constructor Create(AOwner: TComponent);

Ответ прост: Owner — тот объект, который при создании вызывает конструк­торы всех объектов, владельцем которых он является, а при уничтожении — их деструкторы. Таким образом, поместив при разработке компонент на форму, вы можете не заботиться о его создании и уничтожении в программе. Все свойства таких компонентов и все связи между ними запоминаются в файле формы .DFM и при запуске приложения создаются вновь автоматически.

Деструктор компонента

destructor Destroy;

уничтожает все дочерние компоненты (вызывая их деструкторы) и вычеркивает себя из списка компонента-владельца.

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

Принадлежащие компоненты оформлены в виде списка, доступного через свой­ство Components. В классе TComponent предусмотрен набор методов и свойств для управления этим списком:

property Components[Index: Integer]: TComponent;

Возвращает указатель на компонент с индексом в списке Index.

property ComponentCount: Integer;

function FindComponent(const AName: string): TComponent;

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

Возвращает ссылку на компонент-потомок с заданным именем.

procedure InsertComponent(AComponent: TComponent) ;

procedure Rerr.oveCornponent (AComponent: TComponent) ;

Вставляет компонент в конец списка.

Удаляет компонент из списка.

procedure DestroyComponents;

Удаляет все компоненты из списка.

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

Рассмотрим другие свойства компонента. Он может находиться в одном из множества следующих состояний:

property ComponentState: TCornponentState;

TComponentState = set of (csLoading, csReading, csWriting, csDestroying, csDesigning) ;

Эти состояния используются средой во время визуального проектирования, при загрузке/выгрузке компонентов из файлов ресурсов. Во время исполнения приложения множество состояний пусто. Лишь метод

procedure Destroying;

устанавливает в состоянии компонента флаг csDestroying и вызывает ана­логичный метод у всех потомков из списка. Он также используется в дест­рукторе компонента.

Свойство Designlnfo относится к стадии разработки (конструирования) приложения:

property Designlnfo: Longint;

В нем хранятся координаты верхнего левого угла компонента во время раз­работки.

Соседние файлы в папке Delphi