Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сообщение из трея [WinXP]


Аноним ©   (2005-10-09 14:07:00) 

Очень нужно  и очень быстро. Пожалуйста, подскажите: как сделать такое же сообщение, как то, которое появляется когда XP находит новое оборудование и т.п.


Zeqfreed   (2005-10-09 14:48:00) [1]

Аноним   (09.10.05 14:07)
uses
ShellAPI;

...

const
WM_TRAYMSG = WM_USER + 400;

NIIF_NONE = $00000000;
NIIF_INFO = $00000001;
NIIF_WARNING = $00000002;
NIIF_ERROR = $00000003;

NIF_STATE = $00000008;
NIF_INFO = $00000010;
NIF_GUID = $00000020;

type
TBalloonHintIcon = (bitNone, bitInfo, bitWarning, bitError);
TBalloonHintTimeOut = 10..60;

TTimeoutOrVersion = record
 case Integer of
  0: (uTimeout: UINT);
  1: (uVersion: UINT);
end;

TNotifyIconDataEx = record
 cbSize: DWORD;
 Wnd: HWND;
 uID: UINT;
 uFlags: UINT;
 uCallbackMessage: UINT;
 hIcon: HICON;
 szTip: array[0..127] of AnsiChar; // Previously 64 chars, now 128
 dwState: DWORD;
 dwStateMask: DWORD;
 szInfo: array[0..255] of AnsiChar;
 TimeoutOrVersion: TTimeoutOrVersion;
 szInfoTitle: array[0..63] of AnsiChar;
 dwInfoFlags: DWORD;
 {$IFDEF _WIN32_IE_600}
 guidItem: TGUID;
 {$ENDIF}
end;

...

var
...
 TrayData : TNotifyIconDataEx;
 TrayEnabled : Boolean = false;

...

function MakeTrayIcon(const ParentWnd : HWND; const Hint : String) : boolean;
begin
ZeroMemory(@TrayData, SizeOf(TNotifyIconDataEx));
with TrayData do begin
 cbSize := SizeOf(TrayData);
 Wnd := ParentWnd;
 uID := 123;
 uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
 uCallbackMessage := WM_TRAYMSG;
 hIcon := Application.Icon.Handle;
 Move(PChar(Hint)^, szTip, length(Hint));
end;

TrayEnabled := Shell_NotifyIcon(NIM_ADD, @TrayData);
Result := TrayEnabled;
end;

procedure FreeTrayIcon;
begin
if TrayEnabled then Shell_NotifyIcon(NIM_DELETE, @TrayData);
end;

procedure UpdateTrayHint(const newHint : String);
begin
ZeroMemory(@TrayData.szTip, SizeOf(TrayData.szTip));
Move(PChar(newHint)^, TrayData.szTip, length(newHint));
TrayData.uFlags := NIF_TIP;
Shell_NotifyIcon(NIM_MODIFY, @TrayData);
end;

function HideBalloonHint(const ParentWnd : HWND) : boolean;
var
NID : TNotifyIconDataEx;
begin
NID.cbSize := SizeOf(NID);
NID.Wnd := ParentWnd;
NID.uID := 123;
NID.uFlags := NIF_INFO;
NID.szInfo := '';

Result := Shell_NotifyIcon(NIM_MODIFY, @NID);
end;

function ShowBalloonHint(const ParentWnd : HWND;
                        const Title, Text: String;
                        const IconType: TBalloonHintIcon;
                        const TimeoutSecs: TBalloonHintTimeOut): boolean;
const
aBalloonIconTypes: array[TBalloonHintIcon] of Byte = (NIIF_NONE, NIIF_INFO, NIIF_WARNING, NIIF_ERROR);
var
NID : TNotifyIconDataEx;
begin
HideBalloonHint(ParentWnd);
NID.cbSize := SizeOf(NID);
NID.Wnd := ParentWnd;
NID.uID := 123;
NID.uFlags := NIF_INFO;

StrLCopy(NID.szInfo, PChar(Text), SizeOf(NID.szInfo)-1);
StrLCopy(NID.szInfoTitle, PChar(Title), SizeOf(NID.szInfoTitle)-1);

NID.TimeoutOrVersion.uTimeout := TimeoutSecs * 1000;
NID.dwInfoFlags := aBalloonIconTypes[IconType];

Result := Shell_NotifyIcon(NIM_MODIFY, @NID);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
MakeTrayIcon(Handle, 'Hint');
ShowBalloonHint(Handle, 'Demo', 'This is a balloon hint', bitInfo, 10);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
HideBalloonHint(Handle);
FreeTrayIcon();
end;

...


Примерно так. И здесь нет обработки сообщения (WM_TRAYMSG в примере) от иконки.


Наверх

Титульная страница Поиск, карта сайта Написать письмо