Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-1092512727
Я Ламер
2004-08-14 23:45
2004.08.29
Значение Key в событии OnKeyDown


4-1089966976
IllusoryOrion
2004-07-16 12:36
2004.08.29
Опять Shell


1-1092368470
SASH2
2004-08-13 07:41
2004.08.29
Работа над ошибками?


14-1092289956
Кириешки
2004-08-12 09:52
2004.08.29
Чем отличается CloseProcess от Terminate Process?


14-1091325957
Думкин
2004-08-01 06:05
2004.08.29
С днем рождения! 1 августа





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский