Форум: "WinAPI";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
ВнизИзменение порядка сообщений в очереди Найти похожие ветки
← →
Григорьев Антон © (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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.037 c