Методы перехвата сообщений в VCL — КиберПедия 

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Методы перехвата сообщений в VCL

2020-11-03 144
Методы перехвата сообщений в VCL 0.00 из 5.00 0 оценок
Заказать работу

Изменение оконной процедуры с помощью функции SetWindowLong.

Создание собственного метода обработки сообщений и замена стандартного метода в WindowProc. При этом старый указатель обычно запоминается, т.к. новый обработчик обрабатывает лишь некоторые сообщения, а остальные передаёт старому.

При написании нового компонента можно перекрыть виртуальный метод WndProc.

Это позволяет компоненту перехватывать сообщения в самом начале цепочки (за исключением внешних обработчиков, установленных с помощью свойства WindowProc).

Написание собственных методов-обработчиков. Обработчики встраиваются либо в метод Dispath c помощью макроса MESSEGE_MAP, либо перекрывая уже имеющийся метод-обработчик.

Перекрытие виртуального метода DefaultHandler. Для перехвата сообщений, которые не были обработаны с помощью методов-обработчиков.

Создание оконной процедуры и запись указателя на неё в свойство DefWndProc.

Для перехвата сообщений неоконных визуальных компонентов можно использовать все перечисленные выше способы, за исключением первого и последнего.

Обработчики сообщений, типы сообщений, связывание обработчика с событием в VCL

Методы и свойства, используемые в СОП

TObject. Dispatch Вызывает методы обработки для соответствующих сообщений.

Макрос позволяющий встроить вызов обработчиков сообщений в метод Dispatch()

BEGIN_MESSAGE_MAP

...

MESSAGE_HANDLER (<сообщение Windows>, <тип сообщения>, <имя процедуры обработчика>)

...

END _ MESSAGE _ MAP (<класс-родитель> чей метод Dispath вызывается в оконной процедуре)

Типы сообщений

Структуры, в которые сохраняется расшифровка дополнительных параметров сообщений определённого типа, поступающих от ОС.

struct DECLSPEC_DRECORD TMessage {

unsigned Msg;

struct {

NativeUInt WParam;

NativeInt LParam;

NativeInt Result; };

структура представляющая сообщения в VCL. "Совместимыми" с TMessage можно назвать структуры, которые имеют такой же размер.

struct DECLSPEC_DRECORD TWMPaint {

unsigned Msg;

HDC DC;

NativeInt Unused;

NativeInt Result; };

Структура используемая во всех сообщениях прорисовки.

TWMKey – сообщения нажатия клавиш,

TWMMouse – сообщения от «мыши».

Типы обработчиков сообщений

void __fastcall (__closure * TNotifyEvent) (TObject* Sender)

void __fastcall (__closure * TKeyPressEvent) (TObject* Sender, WideChar &Key)

void __fastcall (__closure * TDragOverEvent)(TObject* Sender, TObject* Source, int X, int Y, TDragState State, bool &Accept);

Создание собственного события в компоненте, связывание события и обработчика.

Создание собственного события в компоненте

//объявление нового типа функции

typedef void __fastcall (__closure *TEndEvent) (System::TObject *Sender, int who);

TEndEvent FOnOutRL; // объявление события

 // объявление свойства чтения/записи обработчика

__property TEndEvent OnOutRL = {read=FOnOutRL, write=FOnOutRL};  

virtual void __fastcall OutRL();     

void __fastcall TMyComp::OutRL()

{

// если свойство обработчика присвоено пользователем то запускаем его

if (OnOutRL) OnOutRL (this, 20); // int 20, передаётся с сообщением

 }

// активация события

OutRL ();

Основы JMS, Модели обмена сообщениями JMS

Java Messaging System

распределенная система, основанная на асинхронном обмене сообщениями (messages) между компонентами системы.

Message-Oriented Middleware (MOM) – это продукт, на основе которого и строится Messaging System.

Java Message Service (JMS) – это Java API (набор интерфейсов и классов) для работы с MOM.

{Queue|Topic}ConnectionFactory – создание JMS Connection. Администратор МОМ создает данный объект и связывает его с деревом JNDI.

{ Queue | Topic } Connection – абстрактное представление реального соединения между клиентом JMS и MOM.

{ Queue | Topic } Session – создается JMS Connection и используется клиентами для посылки и принятия сообщений.

Queue | Topic – доступ к представлению очереди или темы.

QueueSender, TopicPublisher – отправка сообщений.

QueueReceiver, TopicSubscriber – приём сообщений из очереди или темы:

• синхронно (метод recive()),

• для асинхронного приёма с помощью метода setMessageListener (MessageListener listener) задаётся ссылка на класс, переписывающий метод public void onMessage(Message message).

{ Object | Text | XML } Message – доступ к полям сообщений (реализуют интерфейс Message).

Основные классы JMS

Создание сессии

createQueueSession |createTopicSession (boolean transacted, int acknowledgeMode)

acknowledgeMode:

AUTO_ACKNOWLEDGE – в случае синхронного получения сообщений, подтверждение получения будет произведено автоматически, когда метод receive () возвратит значение не вызвав никакой исключительной ситуации. В случае асинхронного получения сообщений, подтверждение получения будет произведено, когда метод onMessage () вернет значение.

DUPS_OK_ACKNOWLEDGE – работа по подтверждению получения сообщения перекладывается на Session. Сообщения будут вновь доставлены в случае возникновения ошибки или "гибели" системы.

CLIENT_ACKNOWLEDGE – клиент должен вызвать метод acknowledge() интерфейса javax.jms.Message для того, чтобы явно подтвердить получение сообщения. При вызове данного метода будет подтверждено получение текущего и всех предыдущих полученных сообщений.

Типы сообщений

StreamMessage Считывать можно со стандартных интерфейсов ввода/вывода.

MapMessage Содержит информацию на подобии коллекций в виде ключ-значение (String, Object).

TextMessage Обычное, текстовое сообщение.

ObjectMessage Для передачи Serializable -объектов.

BytesMessage Список не интерпретированных байт. С его помощью можно передавать файлы.

Sender

Properties p = new Properties();

***

Context ctx = new InitialContext(p);

QueueConnectionFactory qcf =(QueueConnectionFactory)

ctx.lookup("java:comp/DefaultJMSConnectionFactory");

QueueConnection con = qcf.createQueueConnection();

QueueSession session =

con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

Queue queue = null;

try {

queue = (Queue)ctx.lookup("MyQueue");

}

catch(NameNotFoundException nnfe)

   {

  queue = session.createQueue("MyQueue");

ctx.bind("MyQueue",queue);

} }


Поделиться с друзьями:

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.019 с.