Форум: "Основная";
Текущий архив: 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.056 c