Поиск:

Ответ в темуСоздание новой темы Создание опроса
> при щелчке на TrayIcon приложение, появляется в панели задач 
:(
    Опции темы
Rockie
Дата 6.5.2007, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: нет
Всего: 31



Здравствуйте! При старте скрываю форму, по щелчку на иконке в трее - скрываю/показываю. Поэтому после инициализации формы сразу скрываю окно: 

Код

// 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); 


еще куда-то? 

Компилер BCB 6, система Win 2003 Server Ent. edition.

p.s.: файлик проекта interface.rar(~350 Kb) выложил на http://slil.ru/24333494
p.p.s.: кто исправит - ставлю плюсег 





--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Klin
Дата 6.5.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Свое событие ShowForm.. ставите не на OnClick, а на OnRestore. А, то у вас получается наложение
Цитата(Rockie @  6.5.2007,  16:31 Найти цитируемый пост)
p.s.: файлик проекта interface.rar(~350 Kb) выложил на http://slil.ru/24333494

Зачем компилированную версию проекта приклепляете? Он же весит больше! Сохраняете проект в новую папку и выставляете.

p.s. а лучше так у TrayIcon1 в OnRestore:
Код

 Form1->Visible = !Form1->Visible;
 ShowWindow(Application->Handle,SW_HIDE);


Цитата

__fastcall TForm1::TForm1(TComponent* Owner) 
        : TForm(Owner) 
{ 
   windowState = false; 
   Form1->Visible = false; 

Этого писать не надо. А вот "Application->ShowMainForm = false; " в WinMain оставь.

Это сообщение отредактировал(а) Klin - 7.5.2007, 13:09


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.