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

TrayIcon

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

Студворк — интернет-сервис помощи студентам
Имеется программа которая по нажатию на кнопку скрытие или закрытие появляется в системном трее,
использую компонент TrayIcon
реализую так по нажатию на обычную кнопку
TrayIcon -> Visible = true; появляется.
а мне нужно по нажатию на значок закрытие или скрытие формы в правом верхнем углу формы.....
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.10.2009, 22:30
Ответы с готовыми решениями:

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

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

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

8
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
14.10.2009, 22:35
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
напиши в событии OnCloseQuery:

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

Решение

Цитата Сообщение от Rumus Посмотреть сообщение
а что такое CanClose = false;
Это переменная, передваемая в метод, которая отвечает за возможность закрытия формы. Вообщем, OnCloseQuery выполняется тогда, когда посылается сообщение закрытия окна (аналогично OnClose и является посути нажатием на крестик), но в отличии от OnClose, можно управлять - стоит закрывать окно, или нет. В данном случае, мы присваеваем CanClose = false, что значит, что окно закрывать не надо, и выполняем код: добавлячем иконку в трей и прячем окно.
3
6 / 6 / 1
Регистрация: 29.09.2009
Сообщений: 91
14.10.2009, 22:58  [ТС]
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
Это переменная, передваемая в метод, которая отвечает за возможность закрытия формы. Вообщем, OnCloseQuery выполняется тогда, когда посылается сообщение закрытия окна (аналогично OnClose и является посути нажатием на крестик), но в отличии от OnClose, можно управлять - стоит закрывать окно, или нет. В данном случае, мы присваеваем CanClose = false, что значит, что окно закрывать не надо, и выполняем код: добавлячем иконку в трей и прячем окно.
Спасибо за точность
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
16.10.2009, 13:31
А у меня вот какой вопрос. 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
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
17.10.2009, 01:14
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
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
17.10.2009, 11:31
Цитата Сообщение от 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
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
17.10.2009, 12:34
Цитата Сообщение от Maestrino Посмотреть сообщение
Form1->Hide(); // На эту ругается
используй вместо Form1->Hide() и Form1->Show() соответственно:
C++
1
2
ShowWindow(Form1->Handle, SW_HIDE); // спрятать главное окно
ShowWindow(Form1->Handle, SW_SHOW); // отобразить главное окно

Цитата Сообщение от Maestrino Посмотреть сообщение
Нет, когда программа должна сворачиваться в трей, то она сворачивается не в трей, а на панель задач.
ну естевственно, это действие поумолчанию. ты должен отлавливать событие сворачивания окна, прятать окно с панели задач (функцию я приводил выше) и добавлять иконку в трей.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.10.2009, 12:34
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru