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

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

системный трей


Anton S. ©   (2005-08-07 23:10:00) 

Как добиться того, чтобы приложение "жило" в системном трее, а не на панели задач?
И еще один вопрос - как заставить окно вообще не отображаться ни на панели задач, ни в системном трее?


DVM   (2005-08-08 16:48:00) [1]


> То есть, часть панели задач (taskbar), но не сама панель
> задач.

Почему в классе окна панели задач фигурирует слово SysTray?

> SysTray - это область уведомлений (notification area).

Это TrayNotifyWnd, слова Sys там нет.


Юрий Зотов   (2005-08-08 16:27:00) [2]

DVM ©   (08.08.05 13:26) [7]

SysTray - это область уведомлений (notification area). То есть, частьпанели задач (taskbar), но не самапанель задач.


Alexander Panov   (2005-08-08 15:32:00) [3]

К сожалению, MS поменял термин. Раньше в MSDN прямо звучало название "System Tray". Теперь этот термин сменился на "StatusBar" и практически единственное упоминание "Tray" в MSDN ограничивается комментарием к Shell_NotifyIcon:

Remarks

The taskbar notification area is sometimes erroneously called the "tray."


DVM   (2005-08-08 14:20:00) [4]


> n0name   (08.08.05 14:07) [8]

Я думаю, что сейчас я уже не найду точной страницы, но там буквально говорилось так: "...Область уведомлений, также часто ошибочно называемая трей...". Где то в описании ShellNotifyIcon, по-моему было.


n0name   (2005-08-08 14:10:00) [5]

>>Systray = "панель задач", на том же MSDN есть прямое подтверждение.
Где именно?


n0name   (2005-08-08 14:07:00) [6]

>>Systray = "панель задач", на том же MSDN есть прямое подтверждение.
Где именно?


DVM   (2005-08-08 13:26:00) [7]


> Как добиться того, чтобы приложение "жило" в системном трее,
> а не на панели задач?

Systray = "панель задач", на том же MSDN есть прямое подтверждение.


n0name   (2005-08-08 06:29:00) [8]

MSDN - лучший справочный ресурс по WinAPI.


Adder   (2005-08-08 00:40:00) [9]

http://www.firststeps.ru/mfc/winapi/


grouzd[E]v   (2005-08-08 00:09:00) [10]

SDK / FAQ - нужно искать по конкретному вопросу имхо


Anton S.   (2005-08-08 00:04:00) [11]

Еще не пробовал использовать, но спасибо за совет.
Кстати, не могли бы подсказать какой-нибудь хороший справочный материал (книги или online-ресурсы) по WIN-API, желательно на русском языке?


grouzd[E]v   (2005-08-07 23:35:00) [12]

PS это код из Project Source ессно (project > view source)


grouzd[E]v   (2005-08-07 23:33:00) [13]

> в трей - через WinAPI. лучше воспользоваться компонентом из библиотеки rxlib (rxlib.ru)
> убрать из таскбара (из faq здесь же, который, впрочем даавно не работает):

program Project1;

uses
 Forms,
 Windows,
 Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

var
ExtendedStyle : integer;

begin
 Application.Initialize;
 ExtendedStyle:=GetWindowLong(application.Handle, GWL_EXSTYLE);
 SetWindowLong(Application.Handle, GWL_EXSTYLE,
   ExtendedStyle or WS_EX_TOOLWINDOW {AND NOT WS_EX_APPWINDOW});
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

Если включить коментарий {AND NOT WS_EX_APPWINDOW}, то получите очень интересное приложение. Оно не видно в TaskBar и на него нельзя переключиться по Alt-Tab, но когда приложение минимизируется оно остается на рабочем столе в виде свернутого заголовка (прямо как в старом добром Windows 3.11)

Только сpазу пpедупpеждаю пpо гpабли, на котоpые я наступал:
Будь готов к тому, что если пpи попытке закpытия пpиложения в OnCloseQuery или OnClose выводится вопpос о подтвеpждении, то могут быть пpоблемы с автоматическим завеpшением пpогpаммы пpи shutdown - под Win95 пpосто зависает, под WinNT не завеpшается.
Очевидно, что сообщение выводится, но его не видно (пpичем SW_RESTORE не сpабатывает).
Решение - ловить WM_QueryEndSession и после всяких завеpшающих действий и вызова CallTerminateProcs выдавать Halt.


Наверх

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