Schumi |
Отправлено: 24.10.2004, 17:57 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
Пробую простенький пример:кидаю на форму кнопку,и по нажатию посылаю сообщение SendMessage(Handle,30000,0,0).
Handle — либо окна,либо приложения.
А в обработчике ApplicationEvents-OnMessage ловлю все сообщения.И балалайка мне,а не сообщение.В смысле куча сообщений идёт,но не моё с message=30000.
В чём причина,объёсните неграмотному?
|
|
Doga |
Отправлено: 25.10.2004, 11:44 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
А так пробовали?
CODE |
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(...)
END_MESSAGE_MAP(TForm)
|
Или WindProc переопределить?
|
|
Schumi |
Отправлено: 25.10.2004, 18:19 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
Не мог бы поподробней оба варианта
|
|
Doga |
Отправлено: 25.10.2004, 19:31 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
ВАРИАНТ 1]
MyForm.h
CODE |
//---------------------------------------------------------------------------
#define WM_MY_MSG (WM_USER+0x0100)
class TMyForm : public TForm
{
private: // User declarations
void __fastcall HandleMyMsg(TMessage& Msg);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_MY_MSG , TMessage, HandleMyMsg)
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
|
MyForm.cpp
CODE |
//---------------------------------------------------------------------------
void __fastcall TMyForm::HandleMyMsg(TMessage& Msg)
{
//Msg — это и есть Ваше сообщение (WM_MY_MSG)
//...
}
//---------------------------------------------------------------------------
|
ВАРИАНТ 2
MyForm.h
CODE |
//---------------------------------------------------------------------------
#define WM_MY_MSG (WM_USER+0x0100)
class TMyForm : public TForm
{
private: // User declarations
void __fastcall MyWndProc(TMessage &Msg);
};
//---------------------------------------------------------------------------
|
MyForm.cpp
CODE |
//---------------------------------------------------------------------------
//Конструктор формы
__fastcall TMyForm::TMyForm(TComponent* Owner) : TForm(Owner)
{
//Переназначаем обработчик сообщений окна
WindowProc = MyWndProc;
}
//---------------------------------------------------------------------------
void __fastcall TMyForm::MyWndProc(TMessage& Msg)
{
if (Message.Msg == WM_MY_MSG)
{
//Это и есть Ваше сообщение
//...
}
else
{
//Обработчик сообщений окна по умолчанию
WndProc(Msg);
}
}
//---------------------------------------------------------------------------
|
Вот как то так...
|
|
Schumi |
Отправлено: 26.10.2004, 18:30 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
Разобрался,просто вместо SendMessage использовал PostMessage.
Но есть другой вопрос: можно ли отправить сообщение не форме/приложению,а некоторому контролу на форме,и соответственно его затем получить?
|
|
Konstantine |
Отправлено: 27.10.2004, 08:44 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
сообщения принимаются не приложением и не контролом, а ОКНОМ.
|
|
Guest |
Отправлено: 27.10.2004, 09:09 |
|
Не зарегистрирован
|
Контрол это и есть окно в терминах API (не путать с формой). |
|
olegenty |
Отправлено: 28.10.2004, 09:09 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
резюме — шлёшь мессагу на Handle "контрола", он её и отловит...
|
|