Конструктор Create класса TObject.
Выполняет общие стандартные действия по созданию объектов.
1. Выделяет память для объекта с помощью использования метода newInstance класса TObject, который в свою очередь вызывает метод InstanceSize(метод класса TObject) для определения размера памяти, требуемого для данного объекта.
2. Инициализирует поля созданного объекта нулевыми значениями с помощью метода InitInstance класса TObject.
Конструктор Create класса TObject объявлен статическим и не содержит параметров, но в некоторых классах он переопределяется.
Constructor Create (AOwner:TComponent);virtual;
Деструктор Destroy класса TObject.
Выполняет общие стандартные действия по уничтожению объекта с помощью метода FreeInstance класса. TObject, который в свою очередь вызывает метод CleanUpInstance.для корректного завершения работы со сложными структурами данных
Вызывает метод InstanceSize для определения размера памяти, занимаемого удаляемым объектом.
Деструктор Destroy в классе TObject виртуальный, если в производных классах он переопределяется, необходимо использовать директиву override.
Одним из аргументов обработчика событий обычно яляется параметр Sender, имеющий тип TObject. Фактические это означает что Sender может принадлежать любому классу. Таким образом недостатком является то, что неизвестно, к какому именно классу принадлежит данный объект.
Проблема решается при помощи механизмов RTTI или при помощи методов класса TObject.
1 подход.
Procedure …………….. (sender: TObject)
Begin
If Sender is TButton
End
Сущевует и доругой подход, в отнощении любого объекта можно использовать методы, определенные в ….. TObject.
Например, метод ClassName возвращает строку, возвращающую имя класса. Это классовый метод, поэтому его можно применят как в отнощении объекта, так и в отношении класса.
Text:=Button1.ClassName;
Text:=TButton.ClassName;
Результат будет одинаковый.
Бывают ситуации когда необходимо получить имя класса, но чаще требуется получить ссылку на сам класс или на его базовый класс. Ссылка на класс позволяет выполнять операции в отношении класса в процессе выполнения программы. А имя класса это всего лишь строка символов.
Ссылку на класс можно получить при помощи методов:
ClassType //класс
ClassParent // родительский класс
Получив ссылку на класс можно использовать в отношении неё любой из методов класса TObject.
InstanceSize отличается от функции SizeOf.
sizeOf к любому объекту вернет 4 байта, т.к. переменная в Обжект паскале всего лишь ссылка, а объекты динамические на самом деле.
Метод InstanceSize возвращает размер объекта в процессе выполнения программы(не путать с функцией sizeOf, которая возвращает размер ссылки на объект, т.е. 4 байта).
Метод ClassInfo возвращает указать на внутреннюю информацию RTTI.
Пример того, как методы класса TObject можно использовать для получения инфы о классе.
Procedure TSenderForm.ShowSender (Sender:TObject);
Begin
Memo.Lines.Add(‘Имя класса:’+sender.ClassName);
If sender.ClassParent <> nil then
Memo.lines.add(‘родительский класс:’+sender.ClassParent.ClassName);
Memo.Lines.Add(‘размер’+IntToStr(Sender.InstanceSize));
End;
Данный метод соединен с событием onClick нескольких элементов управления.
Баттон 1 Едит1 ЧекБокс | поле |
События.
Компоненты Дельфи программируются с использованимем 3х элементов языка – свойств, методов и событий.
События – это не в полнее новый механизм, т.к. технически события это свойство, которое в отличии от других свойств ссылается не на данные а на методы. Т.е. событие – это свойство типа “указатель на метод”.
События в Дельфи генерируются, например, в следующих случаях, например, когда пользователь воздействует на компонент (щелкает мышкой).
Порождается в ответ на вызов метода или на изменение свойств компонента(если установить фокус ввода на один компонент, то компонент, на котором фокус ввода был до этого теряет его, инициируя соответствующее событие).
Большинство событий в Дельфи инициируется при получении соответствующего сообщения Windows, хотя событие и не образует взаимно-однозначного соответствия с этими сообщения.
Сообщение – это извещение о некотором месте событии, посылаемом в систему Windows в адрес пользователя. Любые действия пользователя – щелчок мыши, изменение размеров окна приложения – вынуждают Windows отправить приложению сообщение.
Сообщение – это определенная запись, передаваемая приложению. Она содержит сведения о том, что произошло в системе, а также дополнительную информацию, зависящую от типа сообщения. Система сообщений Windows состоит из трех компонентов,:
1)-очередь сообщений (отдельная для каждого приложения)
Приложение получает сообщения из очереди и передает их соответствующему окну.
2)-цикл сообщений
Группа циклически выполняемых операторов приложения, осуществляющих выборку сообщений из очереди и передачу их соответствующему окну для обработки.
3)-процедура окна
Каждое окно приложения имеет собственную процедуру, которая получает все передаваемые окну сообщения, в ответ она должна выполнить определенные действия.
Программа библиотеки VCL выполняет существенную часть обработки сообщений Виндовс в приложении. Прикладной программист не заботится о выборке сообщений из очереди и передачи их соответствующим процедурам окон.
В отличии от событий в Дельфи, обработка сообщений является обязательной и не может выполняться или не выполняться по усмотрению программиста.
Система событий дельфи представляет собой интерфейс для взаимодействия с сообщениями Windows (с некоторой их частью). Многие события компонентов непосредственно связаны с сообщениями Windows, кроме того Дельфи генерирует ряд дополнительных межкомпонентных сообщений.
С теоретической точки зрения , событие – это результат запроса, посланного компоненту или элементу управления, при этом компонент или элемент управления может ответить на это сообщение.
Для того, чтобы обработать например щелчок на кнопке , необходимо написать обработчик и логично сделать его методом класса кнопки. Для этого пришлось бы создать новый подкласс от класса TButton. На практике создавать новый класс для каждого компонента, который требуется использовать не рационально, т.к. создание класса достаточно сложная операция.
Обычно в Дельфи обработчик события компонента это метод формы, содержащей этот компонент а не метод этого самого компонента. Т.е. обработка событий, имеющих отношение к компоненту выполняется средствами владельца этого компонента, т.е. формы, на которой он расположен. Такая технология называется делегированием и она является основой компонентной модели Дельфи.
Дата добавления: 2016-07-27; просмотров: 1243;