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

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

Программа не дает выключиться 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 вызывается?


Наверх

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