Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка сообщений


Eugenepm ©   (2007-08-03 10:25:00) 

Здравствуйте, у меня возникла такая проблема
- нужно вручную обрабатывать сообщения в Delphi с
использованием форм - есть n-количество сообщений
WM_MYMSG..WM_MYMSG+(n-1) - и на все мне надо поставить
один обработчик(n - известно на этапе компиляции!) - я
знаю как ставить на одно, а как привязать к диапазону сообщений?

Вот как можно вручную(привожу на всякий случай - просто словами сложнее описать :) ), но я не хочу отказываться от формы

function WndProc(myhwnd:HWND; myuint:UINT; mywparam:WPARAM; mylparam:LPARAM):LRESULT; stdcall
begin
  case myuint of
    WM_CREATE:begin randomize; result:=0; exit;  end;
    WM_DESTROY:begin  JEndJSocks; PostQuitMessage(0); result:=0; exit; end;
    WM_MYMSG..WM_MYMSG+N: begin JProcessSocketMsg(myhwnd,myuint,mywparam,mylparam); result:=0; exit; end;
  end;
 result:=DefWindowProc(myhwnd,myuint,mywparam,mylparam);
end;


Leonid Troyanovsky   (2007-08-03 12:26:00) [1]


> Eugenepm   (03.08.07 10:25)  

> Вот как можно вручную(привожу на всякий случай - просто

Перекрой форме метод WndProc; override.
Аналог твоего DefWindowProc - inherited;
Кста, для собс-ручных сообщений оный вызов излишен.

--
Regards, LVT.


Ping   (2007-08-03 10:33:00) [2]

А это называется "отказаться от формы"? Кхм...

property TWinControl.DefWndProc: Pointer;
procedure TControl.WndProc(var Message: TMessage); virtual;
procedure TObject.Dispatch(var Message); virtual;

Выбирай...


Dib@zol   (2007-08-03 10:32:00) [3]

var
 PFWP : Pointer;

...

longInt(PFWP):=SetWindowLong(Form1.handle, GWL_WNDPROC, longInt(@WndProc));

...

function WndProc(myhwnd:HWND; myuint:UINT; mywparam:WPARAM; mylparam:LPARAM):LRESULT; stdcall
begin
 case myuint of
   WM_CREATE:begin randomize; result:=0; exit;  end;
   WM_DESTROY:begin  JEndJSocks; PostQuitMessage(0); result:=0; exit; end;
   WM_MYMSG..WM_MYMSG+N: begin JProcessSocketMsg(myhwnd,myuint,mywparam,mylparam); result:=0; exit; end;
   else result:=CallWindowProc(PFWP, myhwnd,myuint,mywparam,mylparam);
 end;
end;

Вуаля!


Наверх

Титульная страница Поиск, карта сайта Написать письмо