Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/67: Рейтинг темы: голосов - 67, средняя оценка - 4.87
6 / 6 / 1
Регистрация: 29.09.2009
Сообщений: 91
1

TrayIcon

14.10.2009, 22:30. Показов 13265. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется программа которая по нажатию на кнопку скрытие или закрытие появляется в системном трее,
использую компонент TrayIcon
реализую так по нажатию на обычную кнопку
TrayIcon -> Visible = true; появляется.
а мне нужно по нажатию на значок закрытие или скрытие формы в правом верхнем углу формы.....
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2009, 22:30
Ответы с готовыми решениями:

TrayIcon
День добрый! Есть такой код. Всё хорошо, только одна проблема кнопка сворачивания работает только...

TrayIcon
Здравствуйте. Написал программку, создал ярлык к экзешнику и поместил в автозагрузку. При запуске...

Работа с TrayIcon
Здраствуйте, как сделать чтобы при нажатии кнопки свернуть справа вверху на проге она сворачивалась...

PopUpMenu в TrayIcon
Подскажите в как исправить проблему с PopUpMenu в TrayIcon, - он почему-то складывается в 2 столбца...

8
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
14.10.2009, 22:35 2
Цитата Сообщение от Rumus Посмотреть сообщение
а мне нужно по нажатию на значок закрытие или скрытие формы в правом верхнем углу формы.....
напиши в событии OnCloseQuery:

C++
1
2
3
CanClose = false;
TrayIcon->Visible = true;
Form1->Hide();
1
6 / 6 / 1
Регистрация: 29.09.2009
Сообщений: 91
14.10.2009, 22:47  [ТС] 3
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
напиши в событии OnCloseQuery:

C++
1
2
3
CanClose = false;
TrayIcon->Visible = true;
Form1->Hide();
Большое спасибо работает, а что такое CanClose = false;
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
14.10.2009, 22:50 4
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Rumus Посмотреть сообщение
а что такое CanClose = false;
Это переменная, передваемая в метод, которая отвечает за возможность закрытия формы. Вообщем, OnCloseQuery выполняется тогда, когда посылается сообщение закрытия окна (аналогично OnClose и является посути нажатием на крестик), но в отличии от OnClose, можно управлять - стоит закрывать окно, или нет. В данном случае, мы присваеваем CanClose = false, что значит, что окно закрывать не надо, и выполняем код: добавлячем иконку в трей и прячем окно.
3
6 / 6 / 1
Регистрация: 29.09.2009
Сообщений: 91
14.10.2009, 22:58  [ТС] 5
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
Это переменная, передваемая в метод, которая отвечает за возможность закрытия формы. Вообщем, OnCloseQuery выполняется тогда, когда посылается сообщение закрытия окна (аналогично OnClose и является посути нажатием на крестик), но в отличии от OnClose, можно управлять - стоит закрывать окно, или нет. В данном случае, мы присваеваем CanClose = false, что значит, что окно закрывать не надо, и выполняем код: добавлячем иконку в трей и прячем окно.
Спасибо за точность
1
Маэстро
Вирусоборец
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
16.10.2009, 13:31 6
А у меня вот какой вопрос. TrayIcon - выставлены следующие свойства:

1. Visible - true // Показываем значок в трее
2. RestoreOn - imLeftClickUp // Восстанавливаем окно по одинарному щелчку л.к.м.

События:
1. OnClick
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm1::FormCreate(TObject *Sender)
{
   Flag = true;  // Объявлен в .h как bool Flag
}
...
// Переводим программу в трей и по щелчку восстанавливаем
// так же по щелчку левой кнопки мыши - прячем обратно-----------------------
void __fastcall TForm1::TrayIcon1Click(TObject *Sender)
{
   if(Flag){
     Form1->Visible = false;
     Flag = false;
    }
   else if(!Flag){
     Form1->Visible = true;
     Flag = true;
    }
}
Цель: Сделать, чтобы по одинарному щелчку иконки в трее, можно было восстановить\спрятать программу в трей.

Пока получается так. Жму кнопочку минимизации, программа прячется в трей(всё правильно). Щёлкаю иконку в трее, программа появляется(всё правильно). Жму иконку в трее, окно программы исчезает, но остаётся кнопка на панели задач... Как сделать, чтобы по щелчку на иконку программа так же скрывалась в трей, как если бы по кнопке минимизации.

Пробовал различные выкрутасы с обработчиком OnRestrore и OnMinimize, но получается либо так же, либо совсем не так...
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
17.10.2009, 01:14 7
Maestrino,
1. Вместо флага, попробуй сделать так (зачем нужна переменная, если она есть в классе ):

C++
1
2
3
4
    if (Form1->Showing)
        Form1->Hide();
    else
        Form1->Show();
2. Насчет кнопки на панели задач не понял вопроса... ты об этом?

C++
1
2
ShowWindow(Application->Handle, SW_HIDE); // спрятать задачу на панели задач
ShowWindow(Application->Handle, SW_SHOW); // отобразить задачу на панели задач
1
Маэстро
Вирусоборец
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
17.10.2009, 11:31 8
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
Вместо флага, попробуй сделать так
Попробовал. Но так ругается на то что невозможно вызвать функцию.
[C++ Ошибка] Tutor1.cpp(596): E2314 Call of nonfunction
C++
1
2
3
4
5
6
7
8
9
// Переводим программу в трей и по щелчку восстанавливаем
// так же по щелчку левой кнопки мыши - прячем обратно-----------------------
void __fastcall TForm1::TrayIcon1Click(TObject *Sender)
{
   if (Form1->Showing)
        Form1->Hide(); // На эту ругается
    else
        Form1->Show();
}
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
Насчет кнопки на панели задач не понял вопроса...
Нет, когда программа должна сворачиваться в трей, то она сворачивается не в трей, а на панель задач.
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
17.10.2009, 12:34 9
Цитата Сообщение от Maestrino Посмотреть сообщение
Form1->Hide(); // На эту ругается
используй вместо Form1->Hide() и Form1->Show() соответственно:
C++
1
2
ShowWindow(Form1->Handle, SW_HIDE); // спрятать главное окно
ShowWindow(Form1->Handle, SW_SHOW); // отобразить главное окно

Цитата Сообщение от Maestrino Посмотреть сообщение
Нет, когда программа должна сворачиваться в трей, то она сворачивается не в трей, а на панель задач.
ну естевственно, это действие поумолчанию. ты должен отлавливать событие сворачивания окна, прятать окно с панели задач (функцию я приводил выше) и добавлять иконку в трей.
1
17.10.2009, 12:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2009, 12:34
Помогаю со студенческими работами здесь

TrayIcon и ImageList
Здравствуйте!! Ребята, подскажите, по такому вопросу. Создаю иконку в трее не через...

BallonTimeout в TrayIcon
Использую C++Builder XE4. Решил использовать TrayIcon и конкретно его метод ShowBallonHint(). В...

TrayIcon с Child окном
Здравствуйте, подскажите, как можно исправить и можно ли вообще, тот факт, что при сворачивании...

Отсутствует TrayIcon (C++Builder XE)
Oтсутствует TrayIcon (C++Builder XE). Как сделать так, что он был. Пересмотрел все компоненты - нет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru