![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не выключается виндовс с запущеной программой [D7, 2000, XP]
KyRo © (2006-08-17 11:07:00)Добрый день.
У меня с запущеной программой отказывается выключатся,перезагружатся виндовс пока ее не закроеш руками.
Путем исключений нашол что перестает она автоматически закрыватся после того как я прячу ее в трей (Если не прятать ее все нормально) , при этом не зависимо висит она в трее или уже извлек ее из него.
Подскажите из за чего это может быть
Вот код как я прячу ее в трей
//=====================================================
//Процедура прячущая программу в Tray
Function Ttray.Active(Visible:boolean):boolean;
begin
With MyNotifyIconData do
begin
CbSize:=SizeOf(MyNotifyIconData);
Wnd := AllocateHWnd(TrayMsgHandler);
Uid:=0;
uFlags:= NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage:=WM_NOTIFYICON;
if Assigned(FImage)
then HIcon:=FImage.Icon.Handle
else HIcon:=LoadIcon(Hinstance,'MAINICON');
lstrcpyn(SzTip,PChar(FHint),length(FHint)+1);
end;
Result:=Shell_NotifyIcon(NIM_ADD,@MyNotifyIconData);
if (result=True)and(Visible<>False) then
(Owner as TWinControl).visible:=False;
Active:=Result;
end;
//======================================================
//Процедура извлекающая программу из Tray
Function Ttray.DeActive;
begin
Result:=Shell_NotifyIcon(NIM_DELETE,@MyNotifyIconData);
if Result then
(Owner as TWinControl).visible:=True;
DeActive:=Result;
end;
KyRo (2006-08-17 16:17:00) [1]
> Loginov Dmitry © (17.08.06 15:55) [18]
> Отлавливай сообщение иконке WM_QUERYENDSESSION
Такой вариант я уже пробовал . Да отлавливается программа нормально выключается но на этом перезагрузка винды прекращается как будто после попадения в трей винда теряет связь с программой и шлет сообщение уже новому для себя процесу.
Теперь тоже определил что проблема в компоненте работы с треем . С новой компонентой все ок !! Спасибо
> Ketmar ©
Loginov Dmitry (2006-08-17 15:55:00) [2]Отлавливай сообщение иконке WM_QUERYENDSESSION
KyRo (2006-08-17 13:13:00) [3]Спасибо вроде с новой компонентой проблема пропала
Ketmar (2006-08-17 12:42:00) [4]> [15] Сергей М. © (17.08.06 12:41)
TRxTrayIcon. %-)
Сергей М. (2006-08-17 12:41:00) [5]
> у кого нить есть хорошоработающий компонент для работы с
> треем
TCoolTray (или как-то на то похожее) в составе RxLib
> class(TComponent)
Тогда уж TWinControl следовало бы использовать в кач-ве предка.
Ketmar (2006-08-17 12:39:00) [6]> [13] KyRo (17.08.06 12:33)
ушло, раз ты такой ленивый. %-)
KyRo (2006-08-17 12:33:00) [7]
> Сергей М. © (17.08.06 12:18) [11]
>
> > это кусок кода компоненты
> >
>
>
> Компонент этот наследник какого класса ?
class(TComponent)ъ
А может у кого нить есть хорошоработающий компонент для работы с треем. Его поменять для меня не проблема .
Был бы очень признателен olegmail@bigmir.net
Ketmar (2006-08-17 12:20:00) [8]> [10] KyRo (17.08.06 12:16)
подумать -- не судьба? если AllocateHWnd() -- в конструкторе, то DeallocateHWnd() -- в деструкторе, натурально.
Сергей М. (2006-08-17 12:18:00) [9]
> это кусок кода компоненты
>
Компонент этот наследник какого класса ?
KyRo (2006-08-17 12:16:00) [10]
> > [6] KyRo (17.08.06 12:04)
> тогда не забывай DeallocateHWnd(). должно помочь. в моей
> компоненте всё работает. %-)
А где его там использовать ?
Ketmar (2006-08-17 12:13:00) [11]> [7] DprYg © (17.08.06 12:12)
ну, может, просто для общего развития? или там какая-то эксклюзивная фича есть...
Ketmar (2006-08-17 12:12:00) [12]> [6] KyRo (17.08.06 12:04)
тогда не забывай DeallocateHWnd(). должно помочь. в моей компоненте всё работает. %-)
DprYg (2006-08-17 12:12:00) [13]А зачем писать этот компонент, если их такого рода в инете уже море?
KyRo (2006-08-17 12:04:00) [14]Да это кусок кода компоненты
Ketmar (2006-08-17 11:55:00) [15]> [3] DprYg © (17.08.06 11:53)
да, не успел дописать. %-)
Ketmar (2006-08-17 11:55:00) [16]кстати, а зачем AllocateHWnd()? это код компонента, что ли? не проще ли сразу из главной формы работать со значком?
DprYg (2006-08-17 11:53:00) [17]uses Ctrl + F1;
Note:Use the DeallocateHWnd procedure to free windows that are created using AllocateHWnd.
KyRo (2006-08-17 11:15:00) [18]А мне кажетса что здесь.
Потому что я запускаю программу делаю все что надо (только не сворачиваю в трей) нажимаю логоф или перезагрузку все работает , а как только сверну в трей все прога отказывается давать перезагружать комп
Ketmar (2006-08-17 11:08:00) [19]проблема не здесь.