Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];

Вниз

Мои Messages   Найти похожие ветки 

 
Still Swamp   (2007-10-18 17:49) [0]

Мен надо передать свои мессаги через SendMessage.
Вопросов два.
1. как я понимаю мне придется опаисать символические константы
типа:
WM_SELECT_RECORD = $F001;
WM_INSERT_RECORD = $F002;
WM_DELETE_RECORD = $F003;
WM_UPDATE_RECORD = $F004;
Есть ли какие то договоренности по поводу того, какие значения констант мне использовать?

2. Столкнулся с проблемой того что компилятор не пропискает вот такое описание процедуры в классе.
procedure InnerRecordDelete(var AMessage:TMessage); Message WM_DELETE_RECORD;
Жалуется на [Pascal Error] FormEditRecord.pas(91): E2139 Illegal message method index.
Это вообще возможно?


 
Германн ©   (2007-10-18 17:55) [1]


> Есть ли какие то договоренности по поводу того, какие значения
> констант мне использовать?
>


WM_USER through 0x7FFF Integer messages for use by private window classes.


 
Still Swamp   (2007-10-18 18:01) [2]

Ок те описывать надо как
WM_SELECT_RECORD = WM_USER+$01;

А как защитится от того что еще один программист так же опишет мессаги свои?


 
Игорь Шевченко ©   (2007-10-18 18:01) [3]


> WM_SELECT_RECORD = $F001;
> WM_INSERT_RECORD = $F002;
> WM_DELETE_RECORD = $F003;
> WM_UPDATE_RECORD = $F004;


меньше $C000 - см. соседнюю ветку про динамические методы


 
Германн ©   (2007-10-18 18:14) [4]


> А как защитится от того что еще один программист так же
> опишет мессаги свои?
>

Это не твои проблемы. Винда сама всё разрулит.


 
Still Swamp   (2007-10-18 20:29) [5]

Спасибо...
Все срослось...


 
DVM ©   (2007-10-18 21:09) [6]


> А как защитится от того что еще один программист так же
> опишет мессаги свои?

RegisterWindowMessage(), но  в подавляющем большинстве случаев это не требуется


 
Однокамушкин   (2007-10-19 10:35) [7]

Существует три разных диапазона для своих сообщений:

1. WM_USER..WM_APP - 1
Это сообщения, которые можно определять для своего оконного класса. Система гарантирует, что ни одно стандартное сообщение не попадает в этот диапазон, но сообщения, специфичные для конкретного класса (типа LB_SETTEXT для LISTBOX или BM_SETCHECK для BUTTON) могут попадать в этот диапазон, поэтому программист обязан следить за тем, чтобы определённые им в этом диапазоне сообщения посылались только окнам того класса, для которого это сообщение предназначено

2. WM_APP..49151
Для этого диапазона Windows гарантирует, что ни один стандартный системный оконный класс на них не реагирует, поэтому сообщения из этого диапазона можно широковещательно рассылать внутри своего приложения, а сам программист должен следить, чтобы внутри его программы такие сообщения имели уникальные номера... VCL создаёт свои сообщения (CM_XXX и CN_XXX), номера которых начинаются с 45056, так что если вы используете VCL, этот диапазон немного сокращается...

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


 
GrayFace   (2007-10-19 13:45) [8]

> Германн ©   (18.10.07 18:14) [4]
> > А как защитится от того что еще один программист так же
> > опишет мессаги свои?
>
> Это не твои проблемы. Винда сама всё разрулит.

Как она может это разрулить?
Если моя пямять не ходит налево, HWND_BROADCAST посылает сообщения только окнам верхнего уровня, поэтому контролы могут спокойно использовать сообщения WM_USER..0x7FFF и т.п. Но формам это использовать не желательно, т.к. легко может пересечься с программами, бездумно броадкастящими их. А они бывают, даже у Рихтера в одной из прог такое есть.


 
Ins ©   (2007-10-19 14:07) [9]


> Если моя пямять не ходит налево, HWND_BROADCAST посылает
> сообщения только окнам верхнего уровня, поэтому контролы
> могут спокойно использовать сообщения WM_USER..0x7FFF и
> т.п.

:) Я тоже до недавнешнего времени так думал, пока меня в справку не ткнули...
1. Броадкастить можно только сообщения, зарегистрированные RegisterWindowMessage
2. Броадкастить тоже по разному можно, если PostMessage(HWND_BROADCAST...), то форма его в общем случае не получит (если конечно ее не отвязать от Application.Handle). В описании сказано не просто окна верхнего уровня, а окна верхнего уровня не имеющие Owner-а. Плюс, это еще не все, там в описании PostMessage все есть. Но есть еще функции BroadcastSystemMessage(Ex), которые позволяют гибче настроить, кто же все-таки получит сообщение.


 
GrayFace   (2007-10-21 17:01) [10]

Действительно.

Ins ©   (19.10.07 14:07) [9]
1. Броадкастить можно только сообщения, зарегистрированные RegisterWindowMessage

И системные 0..WM_USER.


 
GrayFace   (2007-10-21 17:07) [11]

А Рихтер броадкастил INVALID_ATOM (в примере 17-AppInst)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.046 c
15-1197341960
Превед
2007-12-11 05:59
2008.01.20
А вернёт ли Медвед Путину власть?


15-1197464538
em240
2007-12-12 16:02
2008.01.20
Автоматизация установки служб в рамках домена.


2-1197979576
istok
2007-12-18 15:06
2008.01.20
верна ли функция


15-1197454973
Ломброзо
2007-12-12 13:22
2008.01.20
UML, Фаулер


11-1182453093
=BuckLr=
2007-06-21 23:11
2008.01.20
RE_StartIndent





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский