Collapse Troll
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Здравствуйте! При старте скрываю форму, по щелчку на иконке в трее - скрываю/показываю. Поэтому после инициализации формы сразу скрываю окно: Код: // Project1.cpp //... WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); // скрываем главную форму Application->ShowMainForm = false; Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } //... | На форму добавляю коимпонент TrayIcon, в класс формы добавляю переменную-флажок windowState, которая указывает - показывается в данный момент окно или нет. При щелчке по иконке показываю/скрываю форму. В событии OnShow формы вызваю функцию HideApplicationForm, которая скрывает программу также из панели задач. Код: //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "trayicon" #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { windowState = false; Form1->Visible = false; } //--------------------------------------------------------------------------- // при щелчке на иконке void __fastcall TForm1::ShowApplicationForm(TObject *Sender) { if(windowState) Form1->Visible = false; else Form1->Visible = true; windowState=!windowState; } //--------------------------------------------------------------------------- // В событии OnShow вызываю эту функцию, которая убирает программу из панели задач void __fastcall TForm1::HideApplicationForm(TObject *Sender) { ShowWindow(Handle,SW_HIDE); ShowWindow(Application->Handle,SW_HIDE); } //--------------------------------------------------------------------------- | Работает, но при двойном клике на иконке в трее приложение все равно на долю секунды появляется на панели задач(потом исчезает). при одиночном клике все хорошо. Как избавиться от этого "моргания", ловить двойной клик на трее?.. Или добавить Код: Код: ShowWindow(Handle,SW_HIDE); ShowWindow(Application->Handle,SW_HIDE); | еще куда-то? |