Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 13

Реагирование на действия из трея

16.06.2011, 19:11. Показов 1812. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
NOTIFYICONDATA icon;
const MyTrayIcon = WM_USER + 555;
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Application->OnMessage=AppMessage;
}
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
ShowWindow(Application->Handle, SW_HIDE);
icon.hWnd=Application->Handle;
icon.hIcon=Application->Icon->Handle;
icon.uFlags= NIF_ICON | NIF_MESSAGE | NIF_TIP;
icon.cbSize=sizeof(NOTIFYICONDATA);
icon.uID=555;;
icon.uCallbackMessage=MyTrayIcon;
strcpy(icon.szTip,"мое приложение");
Shell_NotifyIcon(NIM_ADD,&icon);
Form1->Visible=false;
CanClose=0;
 
}
void __fastcall TForm1::AppMessage (tagMSG &msg, bool &handled)
{
if(msg.message==MyTrayIcon) ShowMessage("1");
}
В трей то прячется программа, но никак не реагирует из этого трея=(
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.06.2011, 19:11
Ответы с готовыми решениями:

Реагирование на события
Всем привет. Подскажите пожалуйста (а лучше пример в студию) как правельно реализовать реагирование на событие. В потоке я хочу...

Реагирование на изменение переменной
Предположим, на форме 2 кнопки. при нажатии 1ой меняется значение переменной на 0. А во второй кнопке код: если переменная=0 тогда...

Реагирование на ошибки (потоки)
В книге есть пример программы, которая реагирует на ошибки потоков. Программа завершается на первой же проверке. Изначально в коде не был...

11
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
16.06.2011, 19:17
нужно обрабатывать нажатие на иконку в трее
C++
1
if(НажатаКакаяНибудьКнопкаМышиНаMyTrayIcon) {ShowMessage("1")};
, а также привязать к MyTrayIcon какое-нибудь ПопАпМеню.
0
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 13
16.06.2011, 20:34  [ТС]
Можно пример?)
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
16.06.2011, 22:08
Вот так мне кажется куда проще прятать в трей:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
      if (CheckBox5->Checked== true)
       {
        Action=caNone; // Прервать команду закрытия, далее новая команда
        Application->ShowMainForm = false;
        ShowWindow(Handle,SW_HIDE); // Скрываем программу
        ShowWindow(Application->Handle,SW_HIDE); // Скрываем кнопку с TaskBar'а
         if (CheckBox3->Checked==true) {
            RegisterShortCut(Application->Handle, HotKey1->HotKey, 0x0f);
            TrayIcon1->Visible= false; // Скрываем иконку с трея
            }
          if (CheckBox1->Checked==true) {
                    if (CheckBox7->Checked==true) {
                        CheckBox4->Checked=true;
                     }
                     if (CheckBox8->Checked==true){
                       Panel41Click(NULL);
                       ShowMessage("Устройство может быть извлечено");      // здесь автоматически делаем безопасное извлечение
                     }
            }
        }
}
А так отображаем:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
     UnregisterHotKey(Handle, // Handle окна
                        0x00F  // идентификатор горячего ключа
                        );
 
   ShowWindow(Handle,SW_SHOW);
   ShowWindow(Application->Handle,SW_SHOW);
   Application->ShowMainForm = true;// Отображаем форму
 
   TrayIcon1->Visible= true;
 
   Form1->SetFocus();
 
}
все это есть на форуме, с поиском намного быстрее чем ждать ответа, и еще совет если долго нет ответа на поставленный вопрос, значит он есть гдето на форуме в одной из тем.удачи!
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
16.06.2011, 22:16
Samrisbe, человек, похоже, хочет балун , хотя и про это есть - поискать бы соотвествующую тему от Sasha, который это одно время сильно интересовался.
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
16.06.2011, 22:25
А Балун это чо ца таке?
Я не асс в с++ но програмный код от програмного шифра отличаю (это когда даже глядя в исходник не разбереш о чем ЭТО КИНО...
Прошу прошения у Мадераторов и Супермадераторов за офтоп,
просто в Однокласниках одни остались!
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
16.06.2011, 22:31
Цитата Сообщение от Samrisbe Посмотреть сообщение
А Балун это чо ца таке?
Другими слова Боян - заезженный вопрос.
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
16.06.2011, 23:07
Ну вы, блин, даете . Балун - это Balloon Hint , подсказка в виде облачка, как в комиксах .
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
16.06.2011, 23:12
Ну так выражайся точнее))) балун еще в схемотехнике есть))
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
16.06.2011, 23:19
Nouko, если речь идет о трее - куда уж точнее - Balloon - он и есть Балун , и если есть упоминание, что данный вопрос обсуждался в теме конкретного участника, хотя твоя верчия мне очень понравилась .
0
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 13
17.06.2011, 06:16  [ТС]
*.h
C++
1
2
3
4
5
6
7
#define WM_MYICONNOTIFY    WM_USER+1
private:
void __fastcall MTIcon(TMessage&);
public:     // User declarations
        BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_MYICONNOTIFY,TMessage,MTIcon);
        END_MESSAGE_MAP(TComponent);
*.cpp
icon.uCallbackMessage=WM_MYICONNOTIFY;
C++
1
2
3
4
5
void __fastcall TForm1::MTIcon(TMessage&a)
{
  if(a.Msg==WM_RBUTTONDOWN) ShowMessage("11");
 
}
Хочу добиться хоть какой то реакции из трея. Ничего не получается=(
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
17.06.2011, 08:37
вот как оно могло бы выглядеть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
H.
public:    // User declarations
  __fastcall TForm1(TComponent* Owner);
BEGIN_MESSAGE_MAP
  VCL_MESSAGE_HANDLER(WM_TRAY_ICON_MESSAGE,TMessage,TrayIcon_HandleMessage)
END_MESSAGE_MAP(TForm)
.CPP
 
//---------------------------------------------------------------------------
void TForm1::TrayIcon_HandleMessage(TMessage &Message) // обробка повідомлень від іконки
{
/*
const WM_MOUSEMOVE = 0x200;
const WM_LBUTTONDOWN = 0x201;     'Button down
const WM_LBUTTONUP = 0x202;       'Button up
const WM_LBUTTONDBLCLK = 0x203;   'Double-click
const WM_RBUTTONDOWN = 0x204;     'Button down
const WM_RBUTTONUP = 0x205;       'Button up
const WM_RBUTTONDBLCLK = 0x206;   'Double-click
const WM_MBUTTONDOWN = 0x207;     'Button down
const WM_MBUTTONUP = 0x208;       'Button up
const WM_MBUTTONDBLCLK = 0x209;   'Double-click
*/
/*
WM_NOTIFYICON
*/
HWND hwnd = Form1->Handle;
  switch (Message.LParam)
  {
    case WM_LBUTTONDBLCLK:
    // обработка двойного нажатия левой клавиши мыша
      if (!Visible) {
        Form1-> Show();
        Application->BringToFront();
      }
      else // если видимая форма, перемещаем наверх
        Application->BringToFront();
    break;
    case WM_RBUTTONDOWN:
    //  обработка нажатия правой клавиши мыша
      POINT pointMousePos;
      ::GetCursorPos(&pointMousePos);
      PopupMenu1->Popup(pointMousePos.x,pointMousePos.y);
      SetForegroundWindow(Handle);
    break;
    case WM_SIZE: {
      if (Message.LParam == SIZE_MINIMIZED) {
        Application->MessageBox(L"SIZE_MINIMIZED, SW_HIDE", L"MINIMIZED", MB_ICONEXCLAMATION);
        ShowWindow(hwnd, SW_HIDE);
        // 1
      }
      else {
        Application->MessageBox(L"SW_SHOW", L"SHOW", MB_ICONEXCLAMATION);
        ShowWindow(hwnd, SW_SHOW);
      // 2
      }
    }
    break;
    // и т.д. ...
    case WM_RBUTTONDBLCLK:
    case WM_MOUSEMOVE:
    case WM_LBUTTONDOWN:
//      ShowMessage("Нажата правая лапа мыша :) ");
    break;
  }
//  TForm::Dispatch(&Message);
}
Примечания:
1. Это цитата из рабочего кода.
2. Это пример, а не код для копипейста.
3. Названия и прочее, естественно, должны быть ваши.
4. Консультации и техническое обслуживание не предоставляются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.06.2011, 08:37
Помогаю со студенческими работами здесь

Реагирование на клик по ячейке
Есть такая задача: Требуется написать макрос, который будет реагировать на кликанье человека по ячейкам: на какую кликнул - в этой ячейке...

Реагирование на визуальное изменение
Может кто поможет в следующей ситуации... Есть программа, в ней есть визуальный элемент, который в виде полосы движется, либо стоит...

Реагирование на закрытие страницы
Я видел на некторых сайтах (сейчас не вспомню) , когда закрываешь (уходишь) страницу , выводится типа alert() - "Вы хотите покинуть...

Реагирование на нажатие клавиш в JS
помогите кто может!!! как сделать в JS к примеру: при нажатии CTRL+A допустим alert("ok"); ??????? заранее...

Реагирование Form на изменение переменной
Всем привет! Такой вопрос: у меня есть у меня есть компонент Settings, где есть определенные переменные; две формы, MainForm и SettigsForm;...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
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
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами 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 из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru