Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.02.2011, 20:27
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
Вопрос D7: Illegal message method index

Всем доброго!
По сабжу:
Есть программа, которая по выполнению некоторой операции отправляет сообщение. WinSight32 из Delphi и Spy+ из VisualStudio идентифицируют это сообщение как $C0B5 (WinSight32) и $C0BE (Spy+).
Вопрос в следующем:
Код:
const
   PROGRAMM_MESSAGE=49333;// (или WM_APP+16565 или $C0B5)
...
  procedure InMessage(var a:TMessage); message PROGRAMM_MESSAGE;// собственно ошибка компиляции в сабже
хотя
Код:
...
begin
   SendMessage(ProgrammHandle,PROGRAMM_MESSAGE,0,0);// тут все в порядке
т.е. отправить такое сообщение можно, а обработать получение нельзя?
Ф1 говорит, что такое может быть только при отрицательном значении message (вернее <=0), а тут...
за рамки integer (max 2 млрд с копейками), а уж тем более cardinal (4 млрд с копейками) явно не выхожу. И еще, все компилируется нормально, если
Код:
 PROGRAMM_MESSAGE<=WM_APP+16383;
(16383=2^14-1) - и ни с чем это не вяжется.
Как можно обработать получение данного сообщения?
Ответить с цитированием
  #2  
Старый 14.02.2011, 19:26
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

тему можно закрыть - проблема решена.
Для интересующихся (коих оказалось очень не много )
из DRKB вычитано:
'...Диапазон номеров сообщений от $8000 (32768) до $BFFF (49151) пока ничем не занят, но зарезервирован Windows для использования в будущем. Авторы Delphi поступили не совсем корректно, использовав верхнюю часть этого диапазона (с адреса $B000 (45046)) для своих собственных сообщений....' конечно не вариант, но как-то может объяснить "нежелание" компилировать модуль.
Для обработки этого сообщения самый простой путь - переопределение WndProc, что и было с успехом проделано и работает
Ответить с цитированием
  #3  
Старый 15.02.2011, 08:50
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

вообще-то:
Цитата:
The following are the ranges of message numbers
0 through WM_USER–1 - Messages reserved for use by the system.
WM_USER through 0x7FFF - Integer messages for use by private window classes.
WM_APP (0x8000) through 0xBFFF - Messages available for use by applications.
0xC000 through 0xFFFF - String messages for use by applications.
Greater than 0xFFFF - Reserved by the system.
http://msdn.microsoft.com/en-us/libr...31(VS.85).aspx
поэтому разработчики Delphi ничего некорректного не сделали.
так же есть RegisterWindowMessage

а в данном случае Вы попали ($C0B5) в диапазон:
0xC000 through 0xFFFF - String messages for use by applications.
это диапазон для RegisterWindowMessage, поэтому Delphi и ругается.
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 15.02.2011 в 09:02.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:52.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter