Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.150.80] |
|
Сообщ.
#1
,
|
|
|
Подскажите как отлавливать сообщение WM_CLOSE ??
А точнее как узнать что твое приложение закрывают, если не используеш форм ?? |
Сообщ.
#2
,
|
|
|
AllocateHWnd()
DeAllocateHWnd() |
Сообщ.
#3
,
|
|
|
А где взять hwnd или handle ?? (если нету форм)
|
Сообщ.
#4
,
|
|
|
Вероятно все делао на апи, тогда ведь все равно оконный обработчик то есть, вот в нем и лови любое сообщение!
|
Сообщ.
#5
,
|
|
|
WndProc
|
Сообщ.
#6
,
|
|
|
FWindowHandle := AllocateHWnd(WndProc);
procedure TC......WndProc(var Msg: TMessage); begin with Msg do if Msg = WM_CLOSE then ....... else DefWindowProc(FWindowHandle, Msg, wParam, lParam); end; end; |
Сообщ.
#7
,
|
|
|
Thanks 2 Was!
Но все-таки мне не очень понятно! Не мог бы кто-нибудь поделиться исходниками?? Надо чтобы программа постоянно проверяла, если ее пытаются закрыть чтоб выдавала сообщение "Меня закрывают" и закрывалась! Жду помощи..... |
Сообщ.
#8
,
|
|
|
Ты может объяснишь хоть - у тебя есть оконный обработчик или консоль лепишь? А то может мы на разные темы говорим?!
|
Сообщ.
#9
,
|
|
|
У меня только ".dpr" !! окон не создаю!!
Forms, SysUtils не использую! Чистый WinAPI !! |
Сообщ.
#10
,
|
|
|
Сообщения передаются только окнам. Отсюда вывод - нужно создать окно.
|
Сообщ.
#11
,
|
|
|
Понимаешь то, что у тебя .dpr это еще ни очем не говорит, т.к. консоль и в нем можно делать...
А если ты оформляешь создание окна на чистом апи, то ведь обработчик то полюбой есть!!!! Короче - покажи хоть кусочик кода!!! Не мучай нас =) |
Сообщ.
#12
,
|
|
|
program Project1;
uses Windows; {$R *.RES} begin while True do begin GetMessage(Msg, 0, 0, 0); DispatchMessage(Msg); end; end. // Главная задача, которую надо достичь: //Надо чтобы программа постоянно проверяла, если ее пытаются закрыть, //чтоб выдавала сообщение "Меня закрывают" и закрывалась! |
Сообщ.
#13
,
|
|
|
<br>function WndProc(hWn:Thandle;mMsg,wParam,lParam:integer):integer; stdcall;<br>begin<br><br> Case mMsg of<br><br> WM_DESTROY:begin<br> halt(0);<br> //вот это событие<br> end;<br> WM_TIMER:UnderCur;<br><br> end;<br><br> result:=DefWindowProc(hWn,mMsg,wParam,lParam);<br><br>end;<br>begin<br><br> with WClass do<br> begin<br> lpfnWndProc:=@WndProc;<br> hInstance:=hInstance;<br> hIcon:=LoadIcon(0,IDI_hand);<br> hCursor:=LoadCursor(0,IDC_ARROW);<br> hbrBackground:=color_menu+9;<br> lpszClassName:='My';<br> style:=CS_HREDRAW or CS_VREDRAW;<br> end;<br><br>RegisterClass(WClass);<br> hWnd:=CreateWindow('My','',WS_OVERLAPPEDWINDOW,100,100,300,150,0,0,hInstance,nil);<br><br>ShowWindow(hWnd,SW_Normal);<br> UpdateWindow(hWnd);<br><br> SetTimer(hWnd,1,100,nil);<br><br> while GetMessage(mMsg, hWnd , 0, 0) do<br> begin<br> TranslateMessage(mMsg);<br> DispatchMessage(mMsg);<br> end;<br> |