- •Основы объектно-ориентированного анализа и проектирования Введение в объектно-ориентированное программирование Эволюция разработки программного обеспечения
- •Технологии программирования
- •Основные концепции объектно-ориентированного программирования
- •Реализация объектно-ориентированного подхода Инкапсуляция. Свойства
- •При использовании динамики:
- •Конструкторы объектов
- •Деструкторы объектов
- •Наследование, агрегация
- •Полиморфизм, виртуальные и динамические методы
- •Абстрактные методы
- •Перегрузка методов
- •События и делегирование
- •Приведение объектных типов, операторы is и as
- •Области видимости
- •Перекрытие и переопределение свойств
- •Объектно-ориентированное программирование в Borland Delphi. Применение объектно-ориентированного программирования
- •Иерархия библиотечных классов в Borland Delphi.
- •Создание компонентов в среде Delphi Способы создания компонентов
- •Процесс создания компонентов
- •Создание модуля
- •Создание описания и реализации класса для компонента
- •Тестирование неустановленного компонента
- •Создание графического изображения для компонента
- •Инсталляция и деинсталляция компонента
- •Создание свойств, событий и методов компонентов Работа со свойствами
- •События
- •Обработка сообщений Windows
- •Сообщения Windows
- •Обработчики сообщений Windows
Обработка сообщений Windows
Во многих операционных системах взаимодействие приложения с системой инициирует приложение. Например в МS DOS приложение выполняет запросы к системе при необходимости осуществить ввод/вывод данных. Таким образом, программы, написанные в традиционном стиле сами обращаются к операционной системе. Однако программы под Windows работают не так. Именно Windows обращается к программе. Этот процесс выглядит следующим образом:
1. При создании окна, в том числе оконного элемента управления, приложение регистрирует его оконную процедуру MainWNDProc в ядре Windows.
2. Сообщение Windows поступает в метод MainWndProc;
3. Метод MainWndProc вызывает метод, адрес которого содержится в свойстве WindowsProc. По умолчанию здесь содержится адрес виртуального метода WndProc. Метод MainWndProc называют оконной процедурой;
4. Для разных компонентов внутри WndProc может быть предусмотрена обработка тех или иных сообщений. В противном случае вызывается виртуальный метод TObject.Dispatch, который реализует поиск необходимого динамического метода-обработчика по индексу сообщения;
5. Если метод Dispatch не нашел обработчика для данного индекса сообщения, вызывается виртуальный метод DefaultHandler. Если и он не может обработать данное сообщение, то вызывается стандартный обработчик Windows.
Сообщения Windows
Сообщение Windows представляет собой запись, состоящую из нескольких полей. Наиболее важным из них является 4-х байтовое поле, содержащее идентификатор сообщения. Идентификаторы сообщений содержатся в модуле Messages. Другая полезная информация сообщения содержится в двух полях параметров и поле результата. Параметры и поле результата представляют собой 32 битовые величины. Часто каждый из них будет содержать более чем один блок информации, тогда могут использоваться имена типа IParamHi -верхнее по порядку слово в двойном слове.
Для каждого типа сообщений в Delphi определен тип запись, который дает осмысленные названия каждому параметру. Пример - сообщение без параметров:
Обработчики сообщений Windows
Методы, предназначенные специально для обработки сообщений Windows, составляют подмножество динамических методов и объявляются директивой message, за которой следует индекс - идентификатор сообщения. Метод имеет единственный параметр, передаваемый по имени. Параметр метода в Delphi представляет собой запись типа, определенного для соответствующего типа сообщения. Директива override не используется. Область видимости - protected. Например:
То что этот метод будет вызываться для обработки именно этого сообщения определяется не по его имени или типу параметров, а исключительно по идентификатору сообщения. Хотя имена обычно даются осмысленные, начинающиеся с WM (WindowsMessage), например WMPaint
Реализация обработчика сообщения может включать вызов перекрытого обработчика и дополнительные действия, например:
Оператор inherited вызовет поиск перекрытого метода по иерархии наследования до первого обработчика сообщения с тем же идентификатором и автоматическую передачу сообщения ему. Если такого обработчика найдено не будет, то inherited вызовет метод DefaultHandler, изначально определенный в TObject. Реализация DefaultHandler в TObject не выполняет никаких действий, а просто возвращает управление. Перекрывая DefaultHandler, класс может определить свою собственную обработку сообщений по-умолчанию,