BlackStar
|
 |
« : 19-06-2008 11:04 » |
|
Коллеги, подскажите, пожалуйста, как можно показать балун на иконке в трее? Я использую TTrayIcon и всё бы ничего, но никак не могу заставить балун появиться именно относительно этой моей иконки — он постоянно появляется рядом! Вот как я это делаю: NOTIFYICONDATA nid = { 0 };
nid.cbSize = sizeof( NOTIFYICONDATA ); nid.dwInfoFlags = NIIF_ERROR; nid.hIcon = NULL; // я не знаю как получить хендл иконки в трее. TTrayIcon использует TImageList nid.hWnd = this->Handle; // Хэндл основного окна nid.uID = 0; // Я так и не понял толком что это такое. Мне кажется, что это TTrayIcon->IconIndex... strcpy( nid.szInfo, "balloon text" ); strcpy( nid.szInfoTitle, "balloon title" ); strcpy( nid.szTip, "tip text" ); //nid.uCallbackMessage = WM_USER + 10; nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE | NIF_INFO; nid.uTimeout = 15000; Shell_NotifyIcon( NIM_ADD, &nid );
Очень надеюсь на вашу помощь. ЗЫ: Я использую Builder 6
|
|
« Последнее редактирование: 20-06-2008 12:22 от HempStar »
|
Записан
|
Программирование на заказ C/C++, Delphi, PHP, javascript
|
|
|
marat_
Шеф-повар
Опытный
Offline
|
 |
« Ответ #1 : 19-06-2008 11:05 » |
|
у меня так вообще ничего не появлялось... замучился. потом бросил.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
 |
« Ответ #2 : 19-06-2008 11:06 » |
|
HempStar, в разделе FAQ по Visual C++ есть , как это сделать, я лично вписывал ) ищи по слову BALOON
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
 |
« Ответ #3 : 19-06-2008 11:08 » |
|
|
|
|
Записан
|
|
|
|
marat_
Шеф-повар
Опытный
Offline
|
 |
« Ответ #4 : 19-06-2008 11:09 » |
|
HempStar, классно... твой код заработал. только с дополнительным местом. в первый раз такое вижу...
|
|
|
Записан
|
|
|
|
marat_
Шеф-повар
Опытный
Offline
|
 |
« Ответ #5 : 19-06-2008 11:10 » |
|
Алексей1153++, а в Visual C++ у меня, например, работало. в билдере нет.
|
|
|
Записан
|
|
|
|
BlackStar
|
 |
« Ответ #6 : 19-06-2008 11:12 » |
|
Но при чем здесь Visual С++ ?! Там немного по-другому это сделано. Мне бы для билдера... К тому же, балун-то появляется, но не в том месте, где нужно. Я думаю, что проблема решается как-то совсем просто. Если вы знаете ответ, то, я вас умоляю, напишите его здесь да и всё, а то я уже полдня разнообразные факи перелопачиваю и, поверьте, еще ни один не помог.
|
|
« Последнее редактирование: 19-06-2008 11:32 от HempStar »
|
Записан
|
Программирование на заказ C/C++, Delphi, PHP, javascript
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
 |
« Ответ #7 : 19-06-2008 11:14 » |
|
HempStar, какая разница - вижуал, не вижуал )) Ты вначале прочитай там. Вечером гляну, если что
|
|
|
Записан
|
|
|
|
marat_
Шеф-повар
Опытный
Offline
|
 |
« Ответ #8 : 19-06-2008 11:17 » |
|
HempStar, надо как-то хендл получить
|
|
|
Записан
|
|
|
|
BlackStar
|
 |
« Ответ #9 : 19-06-2008 11:25 » |
|
Алексей1153++, да есть разница, в том-то и дело  Взять хотя бы тот же LoadIcon() - я, например, не в курсе как его использовать в билдере. К тому же, я бы не хотел делать в коде новые обработчики и прочие изменения - TrayIcon меня, в общем-то, полностью пока устраивает, не хватает только нормального балуна. marat_, похоже на то, но, вместе с ним, возможно нужно что-то еще, типа, NIM_ADD сменить на NIM_MODIFY или еще что-то подобное... И какой хендл получить нужно??? TrayIcon? Я пытался - у меня не получилось :'(
|
|
« Последнее редактирование: 19-06-2008 11:29 от HempStar »
|
Записан
|
Программирование на заказ C/C++, Delphi, PHP, javascript
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
 |
« Ответ #10 : 19-06-2008 11:35 » |
|
HempStar, нету разницы в этом случае: HICON LoadIcon( HINSTANCE hInstance, LPCTSTR lpIconName ); Parameters
hInstance [in] Handle to an instance of the module whose executable file contains the icon to be loaded. This parameter must be NULL when a standard icon is being loaded. lpIconName [in] Pointer to a null-terminated string that contains the name of the icon resource to be loaded. Alternatively, this parameter can contain the resource identifier in the low-order word and zero in the high-order word. Use the MAKEINTRESOURCE macro to create this value.
To use one of the predefined icons, set the hInstance parameter to NULL and the lpIconName parameter to one of the following values.
IDI_APPLICATION Default application icon. IDI_ASTERISK Same as IDI_INFORMATION. IDI_ERROR Hand-shaped icon. IDI_EXCLAMATION Same as IDI_WARNING. IDI_HAND Same as IDI_ERROR. IDI_INFORMATION Asterisk icon. IDI_QUESTION Question mark icon. IDI_WARNING Exclamation point icon. IDI_WINLOGO Windows logo icon. Windows XP: Default application icon. Return Value
If the function succeeds, the return value is a handle to the newly loaded icon.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
а для балона нужно флаг указать кстати, не для трея я делал, хм, но может поможет: m_ToolTip.Create(this,0x40); //TTS_BALLOON==0x40
там имеется недокументированный флаг свойств баллона - 0x40
|
|
|
Записан
|
|
|
|
BlackStar
|
 |
« Ответ #11 : 19-06-2008 11:42 » |
|
Очень интересно. А как мне получить HINSTANCE программы? Да и имени иконки в Билдере не предусмотрено!
И что за тип у m_ToolTip? Это контрол какой-то?
|
|
« Последнее редактирование: 19-06-2008 11:48 от HempStar »
|
Записан
|
Программирование на заказ C/C++, Delphi, PHP, javascript
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
 |
« Ответ #12 : 19-06-2008 11:54 » |
|
HempStar, сейчас не могу покопаться (( Вечером пороюсь, а сейчас я бесполезен )))
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
 |
« Ответ #13 : 19-06-2008 18:07 » |
|
порылся я в мсдн, тоже только прямоугольного баллона добился, облако не даётся никак ...
|
|
|
Записан
|
|
|
|
BlackStar
|
 |
« Ответ #14 : 20-06-2008 10:07 » |
|
Да черт с ним с облаком! Мне любой сойдет, лишь бы над моей иконкой в трее появлялся.
|
|
|
Записан
|
Программирование на заказ C/C++, Delphi, PHP, javascript
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
 |
« Ответ #15 : 20-06-2008 10:32 » |
|
так прямоугольный то без проблем появляется: NOTIFYICONDATA ndata= { sizeof(NOTIFYICONDATA), m_hWnd, //хендл окна для отлова сообщений e_tray_puttotray_ID, //==1000 NIF_ICON|NIF_MESSAGE|NIF_TIP, WM_COMMAND, ::AfxGetApp()->LoadIcon(IDR_MAINFRAME), //как в билдере не знаю "текст тултипа" };
Shell_NotifyIcon(NIM_ADD,&ndata);
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
 |
« Ответ #16 : 20-06-2008 10:34 » |
|
кстати, можно поймать движение мыши по иконке в трее , определить координаты курсора и нарисовать какой угодно свой тултип - произведённых, скажем, от встроенного тултипа
|
|
|
Записан
|
|
|
|
marat_
Шеф-повар
Опытный
Offline
|
 |
« Ответ #17 : 20-06-2008 12:00 » |
|
Алексей1153++, в билдере или вообще не появляется, или не там, где надо. нам бы твои проблемы...
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
 |
« Ответ #18 : 20-06-2008 14:37 » |
|
marat_, а какие у меня проблемы, которые тебе бы ? ))
|
|
|
Записан
|
|
|
|
marat_
Шеф-повар
Опытный
Offline
|
 |
« Ответ #19 : 20-06-2008 22:39 » |
|
Алексей1153++, с облаком)))
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
 |
« Ответ #20 : 20-06-2008 22:40 » |
|
marat_, да нет у меня проблем с облаком, они все у HempStar )
|
|
|
Записан
|
|
|
|
marat_
Шеф-повар
Опытный
Offline
|
 |
« Ответ #21 : 20-06-2008 22:42 » |
|
Алексей1153++, а как же 14 пост?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
 |
« Ответ #22 : 21-06-2008 06:18 » |
|
marat_, 14 - это твой  а 13-й - это обращение к HempStar
|
|
|
Записан
|
|
|
|
marat_
Шеф-повар
Опытный
Offline
|
 |
« Ответ #23 : 21-06-2008 07:42 » |
|
Алексей1153++, ты опять из вапа?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
 |
« Ответ #24 : 21-06-2008 07:46 » |
|
marat_, нет , значок то посмотри у поста какой )
|
|
|
Записан
|
|
|
|
marat_
Шеф-повар
Опытный
Offline
|
 |
« Ответ #25 : 21-06-2008 08:32 » |
|
Алексей1153++,
HempStar Участник Offline Re: Балун в трее « Ответ #14 : Вчера в 11:07 » Цитировать -------------------------------------------------------------------------------- Да черт с ним с облаком! Мне любой сойдет, лишь бы над моей иконкой в трее появлялся.
вот, что вижу я
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
 |
« Ответ #26 : 21-06-2008 16:14 » |
|
marat_, странно, может я ник попутал - тогда пост не твой, но и не мой тоже
в общем - проблема то не у меня, а у него
|
|
|
Записан
|
|
|
|
BlackStar
|
 |
« Ответ #27 : 23-06-2008 09:31 » |
|
Ну вы и нафлудили  в общем, я так понимаю, что в шестом билдере эта проблема не рашаема. Примеры из вижуал студии, к сожаленью, помочь ничем не могут - ну не VCL это. Попробую поискать какой-нибудь кастомный компонент. Всем спасибо за дискуссию.
|
|
|
Записан
|
Программирование на заказ C/C++, Delphi, PHP, javascript
|
|
|
zubr
Гость
|
 |
« Ответ #28 : 23-06-2008 19:19 » |
|
Ну вы и нафлудили  в общем, я так понимаю, что в шестом билдере эта проблема не рашаема. Примеры из вижуал студии, к сожаленью, помочь ничем не могут - ну не VCL это. Попробую поискать какой-нибудь кастомный компонент. Всем спасибо за дискуссию. Ты не прав, в Delphi решаема, значит и в билдере решаема. VCL здесь не причем. Вот сваял пример на Delphi (билдера давно на компе нет): unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, shellapi, StdCtrls, Menus;
const UWM_NOTIFYICON = WM_USER+200; WM_CLOSEBALLOON = WM_USER+201;
NIF_INFO = $00000010;
NIIF_NONE = $00000000; NIIF_INFO = $00000001; NIIF_WARNING = $00000002; NIIF_ERROR = $00000003;
type TForm1 = class(TForm) PopupMenu1: TPopupMenu; Mn_exit: TMenuItem; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Mn_exitClick(Sender: TObject); private { Private declarations } procedure OnNotifyIcon(var msg:TMessage); message UWM_NOTIFYICON; procedure OnCloseBalloon(var msg:TMessage); message WM_CLOSEBALLOON; protected function SetIconTray(const hIcon:HICON; const IconID:cardinal; const szTip:string; open:boolean=True):boolean; function BalloonTrayIcon(const IconID:cardinal; const Timeout:UINT; const BalloonText, BalloonTitle:String; const BalloonIconType:DWORD):boolean; public { Public declarations } end;
NotifyIconData_Full = record // определённая в shellapi.h cbSize: DWORD; Wnd: HWND; uID: UINT; uFlags: UINT; uCallbackMessage: UINT; hIcon: HICON; szTip: array[0..MAXCHAR] of AnsiChar; dwState: DWORD; dwStateMask: DWORD; szInfo: array[0..MAXBYTE] of AnsiChar; uTimeout: UINT; // union with uVersion: UINT; szInfoTitle: array[0..63] of AnsiChar; dwInfoFlags: DWORD; end;
var Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.BalloonTrayIcon(const IconID:cardinal; const Timeout:UINT; const BalloonText, BalloonTitle:String; const BalloonIconType:DWORD):boolean; var data:NotifyIconData_Full; begin ZeroMemory(@data, sizeof(data)); data.cbSize := sizeof(data); data.Wnd := Handle; data.uID:= IconID; data.uFlags := NIF_INFO; StrPCopy(data.szInfo, BalloonText); StrPCopy(data.szInfoTitle, BalloonTitle); data.dwInfoFlags := BalloonIconType; data.uTimeout := Timeout; Result := Shell_NotifyIcon(NIM_MODIFY, @data); end;
function TForm1.SetIconTray(const hIcon:HICON; const IconID:cardinal; const szTip:string; open:boolean=True):boolean; var data:NotifyIconData; begin Result:=False; ZeroMemory(@data, sizeof(data)); data.cbSize := sizeof(data); data.Wnd := Handle; If open then begin data.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE or NIF_INFO; data.uID:=IconID; data.hIcon := hIcon; if data.hIcon = 0 then exit; //устанавливаем обработчик сообщений иконки data.uCallbackMessage := UWM_NOTIFYICON; StrPCopy(data.szTip, szTip); Result := Shell_NotifyIcon(NIM_ADD, @data); end else Result := Shell_NotifyIcon(NIM_DELETE, @data); end;
procedure TForm1.OnNotifyIcon(var msg:TMessage); var point:TPoint; begin inherited; if msg.LParam=WM_RBUTTONUP then begin //вызываем попап-меню SetForegroundWindow(Handle); GetCursorPos(point); PopupMenu1.Popup(point.x, point.y); PostMessage(Handle, WM_NULL, 0, 0); end; if msg.LParam=WM_MOUSEMOVE then begin //вызываем балун BalloonTrayIcon(0, 15000, 'this is the balloon text', 'title', NIIF_WARNING); //когда курсор вышел из иконки вызываем закрытие баллуна PostMessage(Handle, WM_CLOSEBALLOON, 0, 0); end; end;
procedure TForm1.FormCreate(Sender: TObject); begin //добавляем иконку в трей при открытии приложения SetIconTray(Application.Icon.Handle, 0, 'blablabla'); end;
procedure TForm1.FormDestroy(Sender: TObject); begin SetIconTray(0, 0, '', False); end;
procedure TForm1.OnCloseBalloon(var msg:TMessage); begin BalloonTrayIcon(0, 0, '', '', 0); end;
procedure TForm1.Mn_exitClick(Sender: TObject); begin Close; end;
end.
В аттачменте екзешник примера. З.Ы. Забыл, констатнты объявленные в исходнике (кроме UWM_NOTIFYICON, WM_CLOSEBALLOON), а также структуру NotifyIconData_Full в билдере объявлять не надо, так как в shellapi.h все это должно быть.
|
|
« Последнее редактирование: 24-06-2008 03:59 от zubr »
|
Записан
|
|
|
|
marat_
Шеф-повар
Опытный
Offline
|
 |
« Ответ #29 : 24-06-2008 05:25 » |
|
zubr, просто в билдере компонент есть иконка треевская. вот из неё балун ну никак не получится.
|
|
|
Записан
|
|
|
|
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 старое значение класса.
|
|
|
Записан
|
|
|
|
|