Автор: Пользователь скрыл имя, 06 Февраля 2013 в 01:52, аттестационная работа
Класс TList -- универсальный список. Он представляет собой массив нетипированных указателей и поэтому годится для хранения набора любых, в том числе разнотипных, данных и объектов. При добавлении/удалении в список данные не создаются и не уничтожаются -- эта обязанность лежит на программисте. Приведем доступные ему методы и свойства класса.
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;
В нем хранятся координаты верхнего левого угла компонента во время разработки.
Элементы управления
Потомком TComponent является класс TControl -- элемент управления Windows. Все то, что видит (или может увидеть) пользователь в клиентской области вашей формы во время выполнения, порождено от класса TControl (клиентская область -- вся рабочая поверхность окна Windows, исключая заголовок, полосу меню и обрамление). Таким образом, потомки TControl являются визуалъньши компонентами. Далее будем называть их, как принято в Windows, элементами управления, или, где это уместно, просто элементами.
Отметим также подвох, связанный с названием "Библиотека визуальных компонентов" (Visual Components Library, VCL). Называя так свою библиотеку, разработчики из фирмы Borland были абсолютно правы, так как речь идет в первую очередь о новой -- визуальной -- технологии программирования. Но нужно помнить, что в VCL входит множество полноправных невизуальных компонентов. Например, меню -- оно, конечно, видимо на экране, но не в клиентской области; поэтому формально меню не является визуальным компонентом.
Большинство из свойств, которые вы будете видеть и изменять в визуальных компонентах, помещенных в Инспектор объектов, впервые описаны в классе TControl. Этот класс уже обладает "поведением" -- в нем предусматривается реакция на основные события.
Объект класса TControl не является окном Windows и в силу этого не может получить фокус ввода. Однако у него обязательно имеется родительский элемент (см. главу 2, раздел "Наследование. Методы"), обладающий этим свойством и отвечающий за показ дочернего элемента и обработку некоторых поступающих ему сообщений. (Раз TControl не является окном, то он не имеет контекста устройства для рисования. Этот контекст обеспечивает ему родитель. Тип родительского элемента -- TWinControl -- будет рассмотрен ниже).
Обратите внимание на терминологию: Owner -- это владелец компонента, а Parent -- его родитель, определяемый свойством
property Parent: TWinControl;
Элемент управления может обрабатывать сообщения Windows. Чтобы послать собственной функции обработки элемента сообщение Windows вида Msg с параметрами WParam и LParam, можно воспользоваться методом:
function Perform(Msg, WParam: Word; LParam: Longint): Longint;
С каждым элементом управления связан некий текст, который может играть роль заголовка или редактироваться. В зависимости от роли текст может содержаться в свойствах Caption:
(РЬ) property Caption: TCaption;
TCaption = string[255];
либо Text:
property Text: TCaption;
Не задумываясь о том, в каком именно свойстве содержится текст, получить доступ к нему можно посредством методов:
function GetTextBuf(Buffer: PChar; BufSize: Integer): Integer;
procedure SetTextBuftBuffer: PChar);
function GetTextLen: Integer;
Все три метода работают, посылая в собственную функцию-обработчик сообщений объекта (через вызов метода Perform) сообщения Windows вида WM_GETTEXT, WM_SETTEXT и WM_GETTEXTLENGTH.
Курсор, который будет устанавливаться на компоненте, определен свойством:
property Cursor: TCursor;
TCursor = -32768..32767;
В Delphi предопределены стандартные типы курсоров. Их имена:
crDefault, crNone, crArrow, crCross, crIBeam, crSize, crSizeNESW, crSizeNS, crSizeNWSE, crSizeWE, crUpArrow, crHourGlass, crDrag, crNoDrop, crHSplit, crVSplit, crMultiDrag, crSQLWait.
Этим именам соответствуют константы со значениями от 0 до -17; под этими идентификаторами все курсоры доступны в свойстве Cursors глобального объекта Screen. Можно добавить к ним собственные курсоры, загрузив их из ресурсов и присвоив положительные идентификаторы:
{$R cursors.RES} const
Curl = 1;
Cur2 = 2;
procedure TFormI. For-mCreate (Sender: TObject);
begin
Screen.Cursors[Curl] := LoadCursor(hinstance, 'CUR_1');
Screen.Cursors[Cur2] := LoadCursor(hinstance, 'CUR_2<);
end;
Познакомиться с имеющимися видами курсоров можно, скомпилировав прилагаемый на дискете пример CURSORS.
У каждого элемента есть два свойства, отражающие его стиль и состояние. Они могут сослужить программисту хорошую службу.
Первый из них -- набор флагов, управляющих поведением компонента:
property ControlStyle: TControlStyle;
TControlStyle = set of (csAcceptsControls, csCaptureMouse, csDesignInteractive, csClickEvents, csFramed, csSetCaption, csOpaque, csDoubleClicks, csFixedWidth, csFixedHeight);
Эти флаги означают, что данный компонент имеет следующие особенности:
с sAccept sControls |
Может содержать другие (дочерние) элементы управления. Таким свойством обладают не все элементы: обладающие им называются группирующими и рассмотрены в отдельном разделе. |
csCaptureMouse |
Может получать сообщения от мыши. |
csDesignInteractive |
Транслирует нажатия правой кнопки мыши в нажатия левой во время разработки. |
csFramed |
Имеет обрамление (черным прямоугольником единичной толщины). |
csSetCaption |
Позволяет при изменении имени менять синхронно и свойство Text (если Text не был явно переустановлен). |
csOpaque |
Фон элемента непрозрачен. Это означает, что при пересечении нескольких компонентов на экране располо„.:мный под ним виден не будет. |
csClickEvents |
Воспринимает щелчки мышью. |
с sDoubleC1i cks |
Воспринимает двойные щелчки мышью. Если этот флаг отсутствует, двойные щелчки воспринимаются как простые. |
csFixedWidth, csFixedHeight |
Имеет фиксированную ширину или высоту соответственно. Она не изменяется при масштабировании компонента. |
Набор флагов, отражающих состояние элемента, описывается свойством:
property ControlState: TControlState;
TControlState = set of (csLButtonDown, csClicked, csPalette, csReadingState, csAlignmentNeeded, csFocusing, csCreating);
Они означают следующее:
csLButtonDown |
Над элементом в данный момент нажата левая кнопка мыши. |
csClicked |
Если элемент может воспринимать щелчки мышью, этот флаг устанавливается, пока кнопка мыши находится в нажатом состоянии. |
csPalette |
Элемент поддерживает собственную палитру и должен получать извещения о перерисовке в необходимых случаях. |
csReadingState |
Элемент в данный момент читается из потока. |
сsAlignmentNeeded |
Элемент требует выравнивания относительно родительского (см. раздел "Положение, размеры и выравнивание элементов управления"). |
csFocusing |
В данный момент происходит получение элементом фокуса ввода. |
csCreating |
Элемент создается (этот флаг в настоящий момент не задействован). |