Grigoriy |
Отправлено: 09.12.2005, 14:03 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Какие функции нужно использовать, чтобы на панели задач не отображалась программа, а только свернута была в трей ?
|
|
AVC |
Отправлено: 09.12.2005, 14:49 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Гасить окно приложения и рисовать иконку в трее. Есть и пример и компонент в Builder'е. Если хотите Win API посмотрите пример тут страница 2 TBarDemo.rar
Добавлено.
Простите. В этом проекте этого еще не было. Вот правильный вариант.
|
|
Grigoriy |
Отправлено: 09.12.2005, 17:58 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Функция управления кнопкой приложения
CODE |
PACKAGE bool __fastcall AxTaskBar (HWND pHWND, TAxTaskBarCommand pCmd)
{
HRESULT hrc;
HRESULT hr;
ITaskbarList *ptbl;
if (pHWND == NULL) return false;
CoInitialize(NULL);
hrc = CoCreateInstance
(CLSID_TaskbarList
,NULL
,CLSCTX_INPROC_SERVER
,IID_ITaskbarList
,(void**)&ptbl
);
if (hrc != S_OK)
{// MessageBox(NULL,"NoCreate","ITaskbarList",MB_OK);
CoUninitialize();
return false;
}
bool ret = true;
hr = ptbl->HrInit();
if(hr == NOERROR)
{ switch(pCmd)
{ case tbiAdd: ptbl->AddTab (pHWND); break;
case tbiActivate: ptbl->ActivateTab (pHWND); break;
case tbiDelete: ptbl->DeleteTab (pHWND); break;
case tbiActiveAlt: ptbl->SetActiveAlt (pHWND); break;
default: ret = false; break;
}
}
ptbl->Release();
CoUninitialize();
return ret;
}
|
Никаких комментариев. В этом фрагменте кода ничего не понять мне.
Например, что делает функция CoCreateInstance ?
|
|
avc* |
Отправлено: 09.12.2005, 18:32 |
|
Не зарегистрирован
|
QUOTE |
что делает функция CoCreateInstance
|
Нажав F1 читаем:
Creates an object of the class associated with a specified class identifier
ITaskbarList Interface
Здесь можно почитать об управлении TaskBar'ом.
|
|
Gal |
Отправлено: 09.12.2005, 18:50 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 124
|
Делаешь примерно так. На форму кладешь TrayIcon с закладки Samples, потом кладешь ImageList, ApplicationEvents, PopupMenu и кнопку (это я просто тебе для примера говорю). Загоняешь в imageList иконку(и). У TrayIcon в свойствах обозначаешь ImageList, индекс иконки, которая тебе нужна. Потом обозначаешь имя PopupMenu, которое будет использоватся TrayIcon. Определяешь параметр, когда меню будет выводится, например imLeftDoubleClick. Создаешь в PopupMenu пукнкт, который будет обратно выводить окно, например Показать. Теперь пишешь обработчики событий.
Вот тебе пример
(пример не мой, Megabizon выложил на форуме www.bcbdev.ru — правда его уже не существует)
CODE |
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Application->Minimize();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrayIcon1Restore(TObject *Sender)
{
TrayIcon1->Visible = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ApplicationEvents1Minimize(TObject *Sender)
{
TrayIcon1->Minimize();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrayIcon1Minimize(TObject *Sender)
{
TrayIcon1->Visible = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N1Click(TObject *Sender)
{
//Это обработка щелчка по пункту PopupMenu
TrayIcon1->Restore();
}
//---------------------------------------------------------------------------
| |
|
Grigoriy |
Отправлено: 09.12.2005, 23:30 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Спасибо GAL.
Разобрался. Ещё заметил, что при минимизации в трей исчезает строка в закладке диспетчера задач "Приложения".
|
|
AVC |
Отправлено: 12.12.2005, 08:57 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Маленькое замечание — не существует минимизации в трай. Есть невидимость окон приложения и управление через значек в трае. |
|