Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
Batrider
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 13
1

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

16.06.2011, 19:11. Просмотров 1160. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2011, 19:11
Ответы с готовыми решениями:

Мониторинг системного трея
Приветствую. У меня необычная задача. Есть приложение, которое при отключении...

Получение изображений из трея
Подскажите, как я могу получить иконки других приложений из трея? Конкретно...

Имитация системного трея
Возник вопрос: как создать в своей программе копию системного трея (так...

Текст в иконке трея
Нашел текст исходника на Delphi, решил запустить в C++ Builder6. После...

Восстановление из трея двойным нажатием
Здраствуйте, подскажите где выставить восстановление из трея двойным нажатием...

11
LK
Заблокирован
16.06.2011, 19:17 2
нужно обрабатывать нажатие на иконку в трее
C++
1
if(НажатаКакаяНибудьКнопкаМышиНаMyTrayIcon) {ShowMessage("1")};
, а также привязать к MyTrayIcon какое-нибудь ПопАпМеню.
0
Batrider
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 13
16.06.2011, 20:34  [ТС] 3
Можно пример?)
0
Samrisbe
1352 / 722 / 66
Регистрация: 28.01.2011
Сообщений: 1,979
16.06.2011, 22:08 4
Вот так мне кажется куда проще прятать в трей:
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
LK
Заблокирован
16.06.2011, 22:16 5
Samrisbe, человек, похоже, хочет балун , хотя и про это есть - поискать бы соотвествующую тему от Sasha, который это одно время сильно интересовался.
0
Samrisbe
1352 / 722 / 66
Регистрация: 28.01.2011
Сообщений: 1,979
16.06.2011, 22:25 6
А Балун это чо ца таке?
Я не асс в с++ но програмный код от програмного шифра отличаю (это когда даже глядя в исходник не разбереш о чем ЭТО КИНО...
Прошу прошения у Мадераторов и Супермадераторов за офтоп,
просто в Однокласниках одни остались!
0
QVO
644 / 455 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
Завершенные тесты: 3
16.06.2011, 22:31 7
Цитата Сообщение от Samrisbe Посмотреть сообщение
А Балун это чо ца таке?
Другими слова Боян - заезженный вопрос.
2
LK
Заблокирован
16.06.2011, 23:07 8
Ну вы, блин, даете . Балун - это Balloon Hint , подсказка в виде облачка, как в комиксах .
0
QVO
644 / 455 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
Завершенные тесты: 3
16.06.2011, 23:12 9
Ну так выражайся точнее))) балун еще в схемотехнике есть))
0
LK
Заблокирован
16.06.2011, 23:19 10
Nouko, если речь идет о трее - куда уж точнее - Balloon - он и есть Балун , и если есть упоминание, что данный вопрос обсуждался в теме конкретного участника, хотя твоя верчия мне очень понравилась .
0
Batrider
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 13
17.06.2011, 06:16  [ТС] 11
*.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
LK
Заблокирован
17.06.2011, 08:37 12
вот как оно могло бы выглядеть
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
17.06.2011, 08:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2011, 08:37

Как развернуть форму из трея?
Всем привет:) Как программно развернуть программу из трея?

Запрос пароля при открытии из трея
Добрый день всем! Настраиваю работу программы с TrayIcon. Создал всплывающее...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru