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

Изменение порядка сообщений в очереди   Найти похожие ветки 

← →
Григорьев Антон ©   (2004-07-19 16:53) [0]

На форме есть компонент, который должен быть уничтожен сразу, как только он потеряет фокус. Для этого в его обработчике OnExit посылаю сообщение его родителю, при обработке которого тот уничтожает компонент. Естественно, использую PostMessage, потому что SendMessage приведёт к тому, что компонент будет уничтожен до завершения работы его метода, а это AV. В результате при выборе мышью другого компонента получается следующая последовательность обработки сообщений:

1. OnExit моего компонента
2. OnClick другого компонента
3. Сообщение, по которому предок удаляет первый компонент.

Действия обработчика сообщения №2 зависят от того, какие компоненты есть на форме, и мне бы хотелось, чтобы при его обработке первого компонента уже не было. Можно ли третье событие как-то поставить в очередь перед вторым?

P.S. Интерес к этому вопросу у меня больше теоретический, чем практический. Если это нельзя, то я знаю несколько обходных путей. Поэтому прошу не тратить время на объяснение того, как можно разрулить ситуацию при имеющемся порядке обработки событий - это я уже знаю.


← →
Digitman ©   (2004-07-19 17:01) [1]

изменить порядок сообщений, уже поставленных в очередь, не удастся

но в обработчике OnClick можно выбрать нужное сообщение с одновременным удалением его из очереди (см. Peekmessage c параметром PM_REMOVE) и тут же его обработать по DispatchMessage()


← →
Digitman ©   (2004-07-19 17:18) [2]

что-то вроде

procedure TMyForm.OnClick(..)
begin
..
if PeekMessage(Msg, 0, WM_MYMSG, WM_MYMSG, PM_REMOVE) then
  DispatchMessage(Msg);
...
end;



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

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



Память: 0.45 MB
Время: 0.022 c
14-1091638905
panov
2004-08-04 21:01
2004.08.29
Как обойтись без Access violation?


4-1089662786
programer
2004-07-13 00:06
2004.08.29
Неработающий GetWindowText


1-1092656409
Alek
2004-08-16 15:40
2004.08.29
ПРограммы для КПК


3-1090002748
Mister
2004-07-16 22:32
2004.08.29
1 или 2 млн. записей


14-1092002260
VID
2004-08-09 01:57
2004.08.29
Doom-3




   Наверх