Вниз
Скачать: CL | DM;

Мои 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.011 c
11-1182503317
=BuckLr=
2007-06-22 13:08
2008.01.20
Взять Items[i] как из RichEdit RTF-строку


15-1197488574
Kerk
2007-12-12 22:42
2008.01.20
В Чип и Дип можно купить лазер, способный убить муху с 3х метров?


6-1179133249
Санек2007
2007-05-14 13:00
2008.01.20
Загрузка изображения с сайта


2-1198215384
МуМу
2007-12-21 08:36
2008.01.20
подскажите как изменить стиль шрифта ?


15-1197817420
Виктор
2007-12-16 18:03
2008.01.20
DelphiX для Delphi 2005




   Наверх