![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Программа не дает выключиться Windows [D6, WinXP]
Коля © (2006-11-09 18:04:00)После того как в событии FormCloseQuery поставил application.terminate; - программа закрывается, но Windows перестает выключаться.
Программа имеет иконку в трее, отлавливает сообщение SC_MINIMIZE и уходит в трею, может быть дело в этом? Так же на момент выключения ServerSocket слушает порт.
procedure TChatForm.WMSysCommand;
begin
if (Msg.CmdType = SC_MINIMIZE) then
ChatForm.visible:=false
else
inherited;
end;
Как с этим бороться?
MetalFan (2006-11-10 11:14:00) [1]>[14]
кстати и indy лучше тоже иметь последней версии)
RWolf (2006-11-10 09:34:00) [2]>[11]
Это лечится установкой Powersock последней версии. Сам недавно столкнулся с этой проблемой.
Rouse_ (2006-11-10 09:17:00) [3]
> DefWindowProc нет
ну тогда вот тебе и ответ - нужно ее вызывать. И есественно еще и NMFtp выкинуть.
Anatoly Podgoretsky (2006-11-09 20:54:00) [4]> Коля (09.11.2006 20:46:11) [11]
Ты еще ленив и справку прочитать про Destroy
Коля (2006-11-09 20:46:00) [5]
> путём выкидывания NM в топку и перехода на Indy/ICS/Synapse/WinSock
> API/etc/etc/etc.
Слишком я ленив чтобы все переписывать... Но на будующее учту.
А если, не дай бог, кто нибудь еще столкнется с этой гадостью, то лечится путем добавления строчки
NMFTP1.Destroy;
в FormCloseQuery
Ketmar (2006-11-09 20:12:00) [6]>[9] Коля 9-Nov-2006, 19:53
>А виноваты именно NetMasters.
это известный их баг.
>Как лечиться?
путём выкидывания NM в топку и перехода на Indy/ICS/Synapse/WinSock API/etc/etc/etc.
Ketmar (2006-11-09 19:53:00) [7]>[7] Коля 9-Nov-2006, 19:19
>А разьве если запрос и был проглочен, но программа
>завершилась, выключение винды все равно прерывается?
не обязательно. см. справку по WM_QUERYENDSESSION.
>Есть 2 вопроса:
>Как вручную обработать этот запрос?
поймать сообщение (см. выше) -- желательно в application -- и ответить.
>Во первых как дебагить такую ситуацию?
WinSpy/WinSpector/... и смотреть, что, кому, куда и когда приходит, а также что на это отвечают.
Коля (2006-11-09 19:53:00) [8]Да уж.......
Выявил проблему после того как весь (весь !!!!!!) код программы стоял в фигурных скобках и когда я начял удалять с формы компоненты. Эх люблю я Делфи...
А виноваты именно NetMasters. Стоит их NMFtp который и глотает сообщение.
Причем он выключен, и программа к нему не обращается.
Как лечиться?
(Delphi 6 sp2)
Коля (2006-11-09 19:19:00) [9]> таки ищи гадину, которая глотает запрос на окончание сессии.
А разьве если запрос и был проглочен, но программа завершилась, выключение винды все равно прерывается?
Есть 2 вопроса:
Как вручную обработать этот запрос?
Во первых как дебагить такую ситуацию?
Ketmar (2006-11-09 19:04:00) [10]таки ищи гадину, которая глотает запрос на окончание сессии.
Anatoly Podgoretsky (2006-11-09 18:58:00) [11]от NetMasters тоже стандартный
Ketmar (2006-11-09 18:50:00) [12]"имеет иконку в трэе". убери её. или возьми нормальный компонент. %-)
Коля (2006-11-09 18:14:00) [13]А если убрать application.terminate из FormCloseQuery то дело на нем и повисает, FormClose FormDestroy не происходят
Коля (2006-11-09 18:11:00) [14]ServerSocket стандартный
DefWindowProc нет, иконку убираю так:
try
with tray do begin
cbSize := SizeOf(TNotifyIconData);
Wnd := ChatForm.Handle;
uID := 1;
end;
Shell_NotifyIcon(NIM_DELETE, Addr(tray));
finally
Application.Terminate;
end;
Rouse_ (2006-11-09 18:06:00) [15]ServerSocket не от NetMasters случаем? Если нет, то в оконной процедуре иконки DefWindowProc вызывается?