Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отменить WM сообщение посланное программе.... [D5, Win95/98, Win2k, WinXP]


TankMan ©   (2002-12-13 23:56:00) 

Вот проблема, я хотел бы узнать, как отменить какое либо сообщение посланное программе, например ну хотябы WM_DESTROY,... обработчик, на это событие срабатывает, но почему-то событие у формы OnDestroy срабатывает быстрее...но не в этом суть, получаю я это сообщение допустим, а как его отменить??? т.е. занулить или заменить... например пришло мне сообщение WM_DESTROY а я его заменить хочу на WM_CLOSE а как?


TankMan   (2002-12-15 21:53:00) [1]

Ды я про снять задачу только и говорил...
мне именно это и нужно.... я знаю, что завершить процесс отменить... ну этим способом не возможно...


Opuhshii   (2002-12-15 11:35:00) [2]

2TankMan © (15.12.02 11:02)
>:-| это когда кнопочку "снять задачу" нажимаешь?, или "Завершить процесс"?


TankMan   (2002-12-15 11:02:00) [3]

Opuhshii
Посылает посылает он сообщения, программа получает WM_CLOSE и WM_DESTROY, я поставил в обработчик выдавать MessageBox при срабатывании, выдаются... и после этого приложение закрывается...


Alx2   (2002-12-15 10:30:00) [4]

>TankMan © (13.12.02 23:56)
Посмотри доку по PeekMessage. Кажется, она это умеет


Opuhshii   (2002-12-15 09:20:00) [5]

... ещё в догонку,. есть книга,.. Джеффри Рихтер её написал... и в сети она есть,.. и в магазинах книжных,.. "разработка приложений для ms windows" называется...


Opuhshii   (2002-12-15 09:07:00) [6]

какой менеджер программ?
"когда я хочу завершить от туда процесс"... так это TaskManager и TerminateProcess?,.. дык нет,.. никаких сообщений,..

1. All of the object handles opened by the process are closed.
2. All of the threads in the process terminate their execution.
а это в свою очередь...
1. If the target thread owns a critical section, the critical section will not be released.
2. If the target thread is executing certain kernel32 calls when it is terminated, the kernel32 state for the thread"s process could be inconsistent.
3. If the target thread is manipulating the global state of a shared DLL, the state of the DLL could be destroyed, affecting other users of the DLL.
3. The state of the process object becomes signaled, satisfying any threads that had been waiting for the process to terminate.
4. The states of all threads of the process become signaled, satisfying any threads that had been waiting for the threads to terminate.
5. The termination status of the process changes from STILL_ACTIVE to the exit value of the process.


TankMan   (2002-12-15 03:19:00) [7]

Я вот что сделал... сделал обработчик WM_CLOSE и WM_DESTROY, с "пустыми" процедурами... насколько я понял, стандартный менеджер программ посылает именно эти сообщения, когда я хочу завершить от туда процесс... но при завершении процесса от туда программа закрывается... или я что-то не так понял?


Kirill45   (2002-12-14 02:13:00) [8]

Я не уверен что это правильно - но это будет работать
....
type
TForm1 = class(TForm)
.....
//ну например:
procedure WMDestroy (var Msg: TMessage); message WM_DESTROY;
.....

implementation
{$R *.dfm}

....

procedure WMDestroy (var Msg: TMessage);
begin
// Ваш код !!!
//(если по мимо ваших заморочек вам бы хотелось пропустить
// сообщение дальше добавьте: inherited;
end;



Rouse_   (2002-12-14 00:37:00) [9]

Создай процедуру

procedure Block(var Message: TMessage); message WM_DESTROY;

Все, в процедуре ты должен сам решать что делать с пришедшим сообщением, либо Form.Close либо ничего не делать, можешь проверить, форма не закроется

Желаю успехов


TankMan   (2002-12-14 00:27:00) [10]

Да но, wm_destroy то тоже дойдет, насколько я понимаю?
да и что за windowproc? А как мне сделать так, чтобы вообще это сообщение никак не повлияло на программку, т.е. анулировалось?


Alex870   (2002-12-14 00:06:00) [11]

В WindowProc описывай реакцию на нужное сообщение, ну например
case Message of
wm_destroy :
begin
SendMessage(Window,WM_Close,0,0);
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо