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

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

Не выключается виндовс с запущеной программой [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]

проблема не здесь.


Наверх

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