- •Delphi Справочник по компонентам. Класс tList
- •Класс tStream
- •Функции работы с файлами
- •Функции преобразования чисел с плавающей точкой
- •Функции работы с датами и временем
- •Элементы управления
- •Положение, размеры и выравнивание элементов управления
- •Активность и видимость элементов управления
- •Внутренний интерфейс Drag&Drop
- •Ярлычки и оперативная подсказка
- •Оконные элементы управления
- •Фокус ввода
- •Графическая подсистема
- •Класс tFont
- •Класс тРеn
- •Класс tBrush
- •Класс tCanvas
- •Класс tGraphic
- •Класс tPicture
- •Класс tMetafile
- •Класс tIcon
- •Класс tBitmap
- •Описание компонентов vcl
- •TPopupMenu.
- •Компонент tMainMenu
- •Компонент tPopupMenu
- •Компонент tBitBtn
- •Компонент tSpeedButton
- •Компонент tRadioGroup
- •Компонент tSpinButton
- •Ввод и редактирование текста
- •Компонент tEdit
- •Компонент тМеmo
- •Компонент tMaskEdit
- •Функции для форматирования текста
- •Оформление приложения
- •Компонент tPaintBox
- •Компонент tBevel
- •Компонент tImage
- •Компонент tHeader
- •Ввод и выбор значений
- •Компонент tListBox
- •Компонент tComboBox
- •Компонент tScrollBar
- •Компонент tSpinEdit
- •Компонент tDrawGrid
- •Многостраничные диалоговые окна
- •Компонент tNotebook
- •Компонент tTabSet
- •Компонент tTabbedNotebook
- •Группирование компонентов
- •Компонент tGroupBox
- •Компонент tPanel
- •Компонент tScrollBox
- •Компоненты — стандартные диалоговые окна Windows
- •Компоненты tOpenDialog и tSaveDialog
- •Компонент tColorDialog
- •Компонент tFontDialog
- •Компонент tPrintDlalog
- •Компонент tFindDialog
- •Компонент tReplaceDialog
- •Работа с файловой системой
- •Компонент tDriveComboBox
- •TDirectoryListBox
- •Компонент tFileListBox
- •Компонент tFilterComboBox
- •Компонент tDirectoryOutline
- •Работа со средствами мультимедиа
- •Динамический обмен данными (dde)
- •Компонент tdDeServerConv
- •Компонент tdDeServerltem
- •Компонент tddeciIentConv
- •Компонент tddecIientltem
- •Дополнительные компоненты
- •Компонент tGauge
- •Компонент tCalendar
- •Компонент tColorGrld
- •Использование интерфейса ole
- •Компонент toleContainer
- •Форма и ее свойства
- •Управление дочерними элементами
- •Приложение и среда его выполнения
- •Объект Application
- •Объект Clipboard
- •Компонент tScreen
- •Файлы инициализации
- •Печать данных из приложения
- •Компонент tSession
- •Компонент tDatabase
- •Компонент tDataSource
- •Компонент tTable
- •Компонент tQuery
- •Компонент tStoredProc
- •Компонент tReport
- •Компонент tBatchMove
- •Компонент tField
- •Объект tFieldDef
- •Важнейшие типы данных
- •Компоненты отображения данных и управления данными
- •Компонент tdbGrid
- •Компонент tdbNavigator
- •Компонент tdbText
- •Компонент tdbEdit
- •Компонент tdbMemo
- •Компонент tdbImage
- •Компонент tdbListBox
- •Компонент tdbComboBox
- •Компонент tdbCheckBox
- •Компонент tdbRadioGroup
- •Компонент tdbLookupUst
- •Компонент tdbLookupCombo
Функции работы с датами и временем
В 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;
В нем хранятся координаты верхнего левого угла компонента во время разработки.