Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Балун в трее  (Прочитано 49929 раз)
0 Пользователей и 1 Гость смотрят эту тему.
zubr
Гость
« Ответ #30 : 24-06-2008 16:40 » 

marat_
Цитата
Но при чем здесь Visual С++ ?!  Там немного по-другому это сделано. Мне бы для билдера... К тому же, балун-то появляется, но не в том месте, где нужно. Я думаю, что проблема решается как-то совсем просто.
Проблема решается одинаково, что в студии, что в билдере, что в Delphi, что в любой другой среде программирования под Windows. Поэтому, когда говорят в студии можно сделать, а билдере нет (или наоборот), то говорят ерунду. А компонент - это готовое решение, и не всегда оно оптимально, для конкретной задачи, поэтому не стоит всегда надеяться на готовые компоненты, иногда стоит приложить и свои руки, имхо.
Записан
marat_
Шеф-повар
Опытный

ru
Offline Offline

« Ответ #31 : 24-06-2008 23:45 » 

zubr, ты совершенно прав. но тут трудности были именно из-за компонента. я говорил, что в билдере проблемы, желая указать на vlc. именно по твоему способу (тогда, когда мне это было нужно) я и решил проблему.

возможно вся проблема в том, что сам компонент находится на вкладке примеры. т.е. он возможно недоработан, и балун там просто не предусмотрен.
Записан
BlackStar
Постоялец

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #32 : 25-06-2008 09:11 » 

Совершенно верно. Балуна в TTrayIcon в шестом билдере нет. Но проблема в том, что невозможно его дорисовать, потому как не получается добраться до нужных хендлов! А раз так, то система рассматривает эти попытки добавить балун как рисование новой иконки в трее и т.д. и т.п.
Записан

Программирование на заказ   C/C++, Delphi, PHP, javascript
zubr
Гость
« Ответ #33 : 25-06-2008 09:22 » 

HempStar, смотри, ты сколько времени затратил на создание балуна в трее с использованием TTrayIcon, когда за это время можно было решить вопрос без всяких компонентов или свой компонент написать.
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #34 : 25-06-2008 10:06 » 

HempStar, до каких хендлов добраться нельзя?
Записан

Удачного всем кодинга! -=x[PooH]x=-
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #35 : 25-06-2008 10:26 » 

добраться до хендла окошка, которое содержит иконки трея,  можно так:
Код:
HWND hShell_TrayWnd=::FindWindow("Shell_TrayWnd",0);
if(hShell_TrayWnd)
{
HWND hTrayNotifyWnd=::FindWindowEx(hShell_TrayWnd,0,"TrayNotifyWnd",0);
if(hTrayNotifyWnd)
{
HWND hSysPager=::FindWindowEx(hTrayNotifyWnd,0,"SysPager",0);
if(hSysPager)
{
HWND hToolBarWindow32=::FindWindowEx(hSysPager,0,"ToolBarWindow32",0);
if(hToolBarWindow32)
{
//hToolBarWindow32 - искомое
}
}
}
}
Записан

marat_
Шеф-повар
Опытный

ru
Offline Offline

« Ответ #36 : 25-06-2008 11:22 » 

Алексей1153++, похоже на поиск золота в куче песка...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #37 : 25-06-2008 13:46 » 

marat_, такова иерархия окон, все вопросы к дядюшке Биллу Улыбаюсь
Записан

alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #38 : 08-04-2009 06:53 » 

что то не понимаю, сделал, вроде работает, но показывет почему то один раз!
может как-то надо  true false где то написать при показе.
Записан

Улыбаюсь Ага
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #39 : 08-04-2009 07:45 » new

alex87, код в студию )
Записан

alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #40 : 09-04-2009 03:06 » 

вроде сделал
Код:
void __fastcall TForm1::CreateBallon() //создание
{
nid.cbSize = sizeof( NOTIFYICONDATA );
nid.dwInfoFlags = NIIF_INFO;
nid.hIcon = Image1->Picture->Icon->Handle;
nid.hWnd = this->Handle;
nid.uID = 0;
nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE | NIF_INFO;
nid.uTimeout = 100;
Shell_NotifyIcon(NIM_ADD, &nid);
}
Код:
void __fastcall TForm1::ShowBallon(AnsiString mes) //показ балуна
{
strcpy( nid.szInfo, mes.c_str() );
strcpy( nid.szInfoTitle, "Сообщение!" );
strcpy( nid.szTip, "Программа" );
Shell_NotifyIcon( NIM_MODIFY, &nid );
}
теперь вот она рисует иконку в трее, но еще есть компанент трейикон который создает иконку и минимизирует программу и на ней стоит обработчик восстановления, как теперь сделать чтоб не было двух иконок в трее а одна которая как раз показывает балун и при 2м нажатии по нему программа востанавливалась?
Записан

Улыбаюсь Ага
zubr
Гость
« Ответ #41 : 09-04-2009 04:19 » 

alex87, надо сделать выбор - или своя иконка, тогда к ней надо просто прикрутить обработчик, или иконка от компонента трейикон, но тогда не будет балуна...
Записан
alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #42 : 10-04-2009 02:23 » 

а можно например сделать чтоб при нажатии на сообщение балун форма разворачивалась?
Записан

Улыбаюсь Ага
alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #43 : 10-04-2009 02:36 » 

еще есть без балуна, рисовать окно... HintWindow, есть у кого пример как обьявить и нарисовать это окно?
Записан

Улыбаюсь Ага
zubr
Гость
« Ответ #44 : 10-04-2009 03:35 » 

а можно например сделать чтоб при нажатии на сообщение балун форма разворачивалась?
Не понял, что значит при нажатии на сообщение...
Обработку сообщений иконки, которые вызывают-закрывают балун смотри в моем примере в этой теме.
еще есть без балуна, рисовать окно... HintWindow, есть у кого пример как обьявить и нарисовать это окно?
В борланде можно сделать 2-мя путями:
1. Используя компонент TApplicationEvents, создавать свое окно в обработчике данного компонента OnShowHint.
2. Переопределить свой класс на базе класса THintWindow.
Записан
alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #45 : 10-04-2009 05:57 » 

Цитата
2. Переопределить свой класс на базе класса THintWindow.
есть инфа как по шагово применить THintWindow?
Записан

Улыбаюсь Ага
zubr
Гость
« Ответ #46 : 10-04-2009 09:27 » 

1. Открываешь исходники на THintWindow (в Delphi в файле Controls.pas). Изучаешь их.
2. Создаешь свой класс-наследник THintWindow.
3. Добавляешь к нему (или переопределяешь) свои нужные тебе свойства-методы.
4. В событии (как вариант) OnCreate главной формы приложения глобальной переменной HintWindowClass устанавливаешь значение твоего класса, предварительно сохранив в другой переменной старое значение класса, примерно так:
Код:
Application->ShowHint = false;
 THintWindowClass OldHintWindowClass =  HintWindowClass;
 HintWindowClass = TMyHintWindow;
 Application->ShowHint = true;
5. Для возврата стандартного или предыдущего класса хинта присваиваем глобальной переменной HintWindowClass старое значение класса.
Записан
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines