zubr
Гость
|
|
« Ответ #30 : 24-06-2008 16:40 » |
|
marat_Но при чем здесь Visual С++ ?! Там немного по-другому это сделано. Мне бы для билдера... К тому же, балун-то появляется, но не в том месте, где нужно. Я думаю, что проблема решается как-то совсем просто. Проблема решается одинаково, что в студии, что в билдере, что в Delphi, что в любой другой среде программирования под Windows. Поэтому, когда говорят в студии можно сделать, а билдере нет (или наоборот), то говорят ерунду. А компонент - это готовое решение, и не всегда оно оптимально, для конкретной задачи, поэтому не стоит всегда надеяться на готовые компоненты, иногда стоит приложить и свои руки, имхо.
|
|
|
Записан
|
|
|
|
marat_
Шеф-повар
Опытный
Offline
|
|
« Ответ #31 : 24-06-2008 23:45 » |
|
zubr, ты совершенно прав. но тут трудности были именно из-за компонента. я говорил, что в билдере проблемы, желая указать на vlc. именно по твоему способу (тогда, когда мне это было нужно) я и решил проблему.
возможно вся проблема в том, что сам компонент находится на вкладке примеры. т.е. он возможно недоработан, и балун там просто не предусмотрен.
|
|
|
Записан
|
|
|
|
BlackStar
|
|
« Ответ #32 : 25-06-2008 09:11 » |
|
Совершенно верно. Балуна в TTrayIcon в шестом билдере нет. Но проблема в том, что невозможно его дорисовать, потому как не получается добраться до нужных хендлов! А раз так, то система рассматривает эти попытки добавить балун как рисование новой иконки в трее и т.д. и т.п.
|
|
|
Записан
|
Программирование на заказ C/C++, Delphi, PHP, javascript
|
|
|
zubr
Гость
|
|
« Ответ #33 : 25-06-2008 09:22 » |
|
HempStar, смотри, ты сколько времени затратил на создание балуна в трее с использованием TTrayIcon, когда за это время можно было решить вопрос без всяких компонентов или свой компонент написать.
|
|
|
Записан
|
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #34 : 25-06-2008 10:06 » |
|
HempStar, до каких хендлов добраться нельзя?
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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_
Шеф-повар
Опытный
Offline
|
|
« Ответ #36 : 25-06-2008 11:22 » |
|
Алексей1153++, похоже на поиск золота в куче песка...
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #37 : 25-06-2008 13:46 » |
|
marat_, такова иерархия окон, все вопросы к дядюшке Биллу
|
|
|
Записан
|
|
|
|
alex87
|
|
« Ответ #38 : 08-04-2009 06:53 » |
|
что то не понимаю, сделал, вроде работает, но показывет почему то один раз! может как-то надо true false где то написать при показе.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #39 : 08-04-2009 07:45 » |
|
alex87, код в студию )
|
|
|
Записан
|
|
|
|
alex87
|
|
« Ответ #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
|
|
« Ответ #42 : 10-04-2009 02:23 » |
|
а можно например сделать чтоб при нажатии на сообщение балун форма разворачивалась?
|
|
|
Записан
|
|
|
|
alex87
|
|
« Ответ #43 : 10-04-2009 02:36 » |
|
еще есть без балуна, рисовать окно... HintWindow, есть у кого пример как обьявить и нарисовать это окно?
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #44 : 10-04-2009 03:35 » |
|
а можно например сделать чтоб при нажатии на сообщение балун форма разворачивалась?
Не понял, что значит при нажатии на сообщение... Обработку сообщений иконки, которые вызывают-закрывают балун смотри в моем примере в этой теме. еще есть без балуна, рисовать окно... HintWindow, есть у кого пример как обьявить и нарисовать это окно?
В борланде можно сделать 2-мя путями: 1. Используя компонент TApplicationEvents, создавать свое окно в обработчике данного компонента OnShowHint. 2. Переопределить свой класс на базе класса THintWindow.
|
|
|
Записан
|
|
|
|
alex87
|
|
« Ответ #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 старое значение класса.
|
|
|
Записан
|
|
|
|
|