C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как сделать, чтобы окно пр. было свернуто в трей ?, ....
Grigoriy
Отправлено: 09.12.2005, 14:03


Мастер участка

Группа: Участник
Сообщений: 381



Какие функции нужно использовать, чтобы на панели задач не отображалась программа, а только свернута была в трей ?
AVC
Отправлено: 09.12.2005, 14:49


Ветеран

Группа: Модератор
Сообщений: 1583



Гасить окно приложения и рисовать иконку в трее. Есть и пример и компонент в Builder'е. Если хотите Win API посмотрите пример тут страница 2 TBarDemo.rar

Добавлено.
Простите. В этом проекте этого еще не было. Вот правильный вариант.

User Attached Image Скачать файл
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



Маленькое замечание — не существует минимизации в трай. Есть невидимость окон приложения и управление через значек в трае.

Вернуться в Вопросы программирования в C++Builder