Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Программирование на Delphi

nce  и  vmtDestroy
содержат адреса методов создания  и  уничтожения  экземпляров  класса.  Поля
vmtIntfTable, vmtAutoTable,  vmtSafeCallException  введены  для  обеспечения
совместимости с моделью объекта COM. Остальные поля  доступны  через  методы
объекта tObject. В Object Pascal эта информация играет важную роль  и  может
использоваться программистом неявно. В языке определены два оператора  -  is
и as, неявно обращающиеся к  ней.  Оператор  is  предназначен  для  проверки
совместимости  по  присвоению  экземпляра  объекта   с   заданным   классом.
Выражение вида:


AnObject is tObjectType
Принимает значение True только если объект AnObject совместим по  присвоению
с классом tObjectType, то  есть  является  объектом  этого  класса  или  его
потомком.
Оператор as введен в язык специально для приведения объектных типов.  С  его
помощью можно рассматривать экземпляр объекта как  принадлежащий  к  другому
совместимому типу:


with AObjectOfSomeType as tAnotherType do . . .
От  стандартного  способа  приведения  типов  использование   оператора   as
отличается наличием проверки на совместимость  типов  во  время  выполнения:
попытка  приведения  к  несовместимому   типу   приводит   к   возникновению
исключительной ситуации eInvalidCast.  После  выполнения  оператора  as  сам
объект  остается  неизменным,  но  выполняются  те   его   методы,   которые
соответствуют присваиваемому классу.
Вся информация, описывающая класс,  создается  и  размещается  в  памяти  на
этапе компиляции.  Доступ  к  информации  вне  методов  этого  класса  можно
получить,  описав  соответствующий  указатель,  называющийся  указателем  на
класс или указателем на объектный тип (class reference). Он описывается  при
помощи  зарезервированных  слов  class  of.  Например,  указатель  на  класс
tObject  описан  в  модуле  SYSTEM.PAS  и  называется  tClass.   Аналогичные
указатели  определены  и  для  других  важнейших  классов:  tComponentClass,
tControlClass и т.д.
С указателем на класс тесно связано понятие  методов  класса.  Такие  методы
можно вызывать и без создания экземпляра объекта - с указанием имени  класса
в котором  они  описаны.  Перед  описанием  метода  класса  нужно  поставить
ключевое слово class.
Разумеется, методы класса не могут  использовать  значения,  содержащиеся  в
полях класса: ведь экземпляра класса не существует!!! Методы  класса  служат
для извлечения внутренней информации класса. Ниже перечислены методы  класса
tObject:
Метод и Описание


сlass function ClassName:ShortString

Возвращает имя класса


сlass function ClassNameIs(const Name:ShortString):Boolean

Принимает значение True, если имя класса равно заданному


сlass function ClassParent:tClass

Возвращает указатель на родительский класс


сlass function ClassInfo:pointer

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


сlass function InstanceSize:Longint

Возвращает размер экземпляра класса


сlass function InheritsFrom (aClass: tClass):Boolean

Возвращает True, если данный класс наследует от заданного


сlass function MethodAddress(const Name:ShortString):Pointer

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


сlass function MethodName (Addres: pointer):ShortString

Возвращает имя метода по его адресу (только для опубликованных методов)
В  Delphi  4  в  класс  tObject  добавлены  еще  два  виртуальных  метода  -
AfterConstruction  и  BeforeDestruction.  Как  следует  из   названия,   они
вызываются сразу после создания экземпляра объекта и  непосредственно  перед
уничтожением.
Перегрузка методов
В  Delphi  4  появилась  новая  разновидность   методов   -   перегружаемые.
Перегрузка нужна для того, чтобы произвести одинаковые или похожие  действия
над  разнотипными  данными.  Перегружаемые  методы  описываются  с  ключевым
словом overload.


Type

tFirstClass=class

E:extended;

procedure SetData(aValue: Extended); overload;

end;


tSecondClass=class(tFirstClass)

I:integer;

procedure SetData(aValue: Integer); overload;

end;
Объявив метод SetData перегружаемым, в программе можно использовать обе  его
реализации одновременно. Это возможно потому, что компилятор определяет  тип
передаваемого параметра (целый или вещественный) и в  зависимости  от  этого
подставит вызов соответствующего метода.
Для перегрузки  виртуального  метода  используется  зарезервированное  слово
reintroduce:


procedure SetData(aValue:string); reintrouce;overload;
На перегрузку методов накладывается ограничение: нельзя перегружать  методы,
находящиеся в области видимости published.
Абстрактные методы
Абстрактными называются методы, которые определены в классе, но не  содержат
никаких  действий,  никогда  не  вызываются  и   обязательно   должны   быть
переопределены  в   классах-потомках.   Абстрактными   могут   быть   только
виртуальные  и  динамические  методы.  Для  описания   абстрактного   метода
используется директива abstract:


Procedure NeverCallMe; virtual; abstract;
Никакого кода абстрактный метод не содержит. Его вызов приведет  к  созданию
исключительной ситуации eAbstractError.
События
Операционная  система  Windows®  основана  на  сообщениях.   Сообщения   эти
возникают в результате  действий  пользователя,  аппаратуры  компьютера  или
других программ. Таких сообщений в  Windows  сотни,  и  по  большому  счету,
написать программу для Windows - значит определить реакцию на  некоторые  из
них.
Работать с таким количеством сообщений,  даже  имея  под  рукой  справочник,
нелегко. Поэтому одним  из  главных  преимуществ  Delphi  является  то,  что
программист полностью  избавлен  от  необходимости  работать  с  сообщениями
Windows (хотя такая возможность у него имеется). Типовых событий в Delphi  -
не более двух десятков, и все они имеют простую интерпретацию, не  требующую
глубоких знаний среды.
С точки зрения языка, событие - это поле процедурного типа,  предназначенное
для создания пользовательской реакции на те или иные входные воздействия:


Property OnMyEvent: tMyEvent read FMyEvent write FMyEvent;
Здесь  OnMyEvent  -  поле  объекта,  содержащее  адрес  некоторого   метода.
Присвоить такому свойству значение - значит указать программе адрес  метода,
который  будет  вызываться  в  момент  наступления  события.  Такие   методы
называются обработчиками событий.
Внутри библиотеки времени  выполнения  Delphi  вызовы  обработчиков  событий
находятся  внутри  методов,  обрабатывающих  сообщения   Windows.   Выполнив
необходимые действия, этот метод проверяет, известен ли  адрес  обработчика,
и, если это так, вызывает его.
События  имеют  разное  количество  и  тип  параметров,  в  зависимости   от
происхождения и назначения. Общим для всех события является параметр  Sender
- он указывает  на  объект,  вызвавший  событие.  Самое  простое  событие  -
tNotifyEvent - не имеет других параметров.


tNotifyEvent = procedure(Sender:tObject) of object;
Тип   метода,   предназначенный   для   извещения   о    нажатии    клавиши,
предусматривает передачу в процедуру кода этой клавиши, о передвижении  мыши
- ее текущих координат и т.д.
Имя  события  в  Delphi  начинается  с  префикса  On:   OnClick,   OnCreate,
OnMouseDown и т.д. Имена методов - обработчиков  событий  состоят  из  имени
объекта,  генерирующего  событие,  и  корня  имени  события:  OkButtonClick.
Дважды щелкнув мышью  в  инспекторе  объектов  на  странице  Events  в  поле
напротив  любого  события,  вы  получите  скелетный  код  (заготовку)  этого
события.
Поскольку события - это свойства объекта, их значения можно менять  в  любой
момент  во  время   выполнения   программы.   Эта   возможность   называется
делегированием. Можно в любой момент взять  способы  реакции  на  события  у
одного объекта и присвоить (делегировать) их другому.
Принцип делегирования позволяет  избежать  трудоемкого  процесса  порождения
новых  классов  для  каждого  специфического  случая,  заменяя  нго  простой
подстановкой процедур.
Один и тот же обработчик может  обрабатывать  события  от  разных  объектов.
Типичный пример - в современных программах  одно  и  то  же  действие  можно
вызвать несколькими способами - через главное меню, контекстное  меню  и  т.
д. Этого легко добиться, назначив один и тот же обработчик всем  необходимым
объектам в инспекторе объектов. азумеется,  события  должны  быть  одного  и
того же типа.
Более сложный случай  -  когда  внутри  обработчика  необходимо  определить,
какой именно объект  вызвал  событие.  Если  объекты,  которые  потенциально
могут это сделать, имеют разный тип, то именно  их  тип  можно  применить  в
качестве критерия:


If Sender is tMenuItem then ...
Если же все  объекты,  разделяющее  между  собой  один  обработчик  события,
относятся к одному классу, можно использовать свойство tObject.Tag.
Ниже приведены названия некоторых, наиболее употребительных событий  Delphi:

Событие - Тип обработчика - Когда возникает
OnClick - TNotifyEvent - При нажатии левой клавиши мыши
OnActivate - TnotifyEvent - После передачи объекту фокуса
OnCreate - TnotifyEvent - После создание объекта
OnDestroy - TnotifyEvent - Перед уничтожением объекта
OnDeactivate - TnotifyEvent - Перед уходом фокуса из объекта
OnKeyPress - TkeyPressEvent - При нажатии клавиши
OnMouseDown - TmouseEvent - При нажатии клавиши мыши
OnMouseMove - TmouseMoveEvent - При движении мыши над объектом
OnMouseUp - TmouseEvent - При отпускании клавиши мыши
а также их типы:


Тип

Описание


TnotifyEvent

type TnotifyEvent = procedure (Sender: TObject) of object;


TkeyPressEvent

type TkeyPressEvent = procedure (Sender: TObject; var Key: Char) of  object;


TmouseEvent

TmouseEvent =  procedure  (Sender:  TObject;  Button:  TmouseButton;  Shift:
TShiftState; X, Y: Integer) of object;


TmouseMoveEvent

TmouseMoveEv
12345След.
скачать работу

Программирование на Delphi

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ