Nu HAR jeg set der er C++ katgorien, og jeg ved godt det er Delphi kode jeg poster !!!!
Jeg har selv haft en del døje med at finde ud af det .... Det Delphi er stort set ren Win32 så det skulle være muligt at porte til VC++ (Jeg vil gerne have en kopi). Og er det til C++ Builder er det MEGET nemt ...
unit TrayStuff;
interface
uses
SysUtils, Windows, ShellAPI;
type
NotifyIconData_50 = record // defined in 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{record};
const
NIF_INFO = $00000010;
NIIF_NONE = $00000000;
NIIF_INFO = $00000001;
NIIF_WARNING = $00000002;
NIIF_ERROR = $00000003;
type
TBalloonTimeout = 10..30{seconds};
TBalloonIconType = (bitNone, // no icon
bitInfo, // information icon (blue)
bitWarning, // exclamation icon (yellow)
bitError); // error icon (red)
function RemoveTrayIcon((*const Window: HWND;*) const IconID: Byte): Boolean;
function AddTrayIconMsg(const Window: HWND; const IconID: Byte; const Icon: HICON; const Msg: Cardinal; const Hint: String = ''): Boolean;
function AddTrayIcon(const Window: HWND; const IconID: Byte; const Icon: HICON; const Hint: String = ''): Boolean;
function BalloonTrayIcon(const Timeout: TBalloonTimeout; const BalloonText, BalloonTitle: String; const BalloonIconType: TBalloonIconType): Boolean;
var
NID_50 : NotifyIconData_50;
implementation
function AddTrayIcon(const Window: HWND; const IconID: Byte; const Icon: HICON; const Hint: String = ''): Boolean;
begin
FillChar(NID_50, SizeOf(NotifyIconData_50), 0);
with NID_50 do
begin
cbSize := SizeOf(NotifyIconData_50);
Wnd := Window;
uID := IconID;
if Hint = '' then begin
uFlags := NIF_ICON;
end{if} else begin
uFlags := NIF_ICON or NIF_TIP;
StrPCopy(szTip, Hint);
end{else};
hIcon := Icon;
end{with};
Result := Shell_NotifyIcon(NIM_ADD, @NID_50);
end;
function AddTrayIconMsg(const Window: HWND; const IconID: Byte; const Icon: HICON; const Msg: Cardinal; const Hint: String = ''): Boolean;
begin
FillChar(NID_50, SizeOf(NotifyIconData_50), 0);
with NID_50 do
begin
cbSize := SizeOf(NotifyIconData_50);
Wnd := Window;
uID := IconID;
if Hint = '' then
begin
uFlags := NIF_ICON or NIF_MESSAGE;
end{if}
else
begin
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
StrPCopy(szTip, Hint);
end{else};
uCallbackMessage := Msg;
hIcon := Icon;
end{with};
Result := Shell_NotifyIcon(NIM_ADD, @NID_50);
end;
{removes an icon}
function RemoveTrayIcon((*const Window: HWND;*) const IconID: Byte): Boolean;
begin
/// FillChar(NID, SizeOf(NotifyIconData), 0);
with NID_50 do
begin
// cbSize := SizeOf(NotifyIconData);
// Wnd := Window;
uID := IconID;
end{with};
Result := Shell_NotifyIcon(NIM_DELETE, @NID_50);
end;
function BalloonTrayIcon(const Timeout: TBalloonTimeout; const BalloonText, BalloonTitle: String; const BalloonIconType: TBalloonIconType): Boolean;
const
aBalloonIconTypes : array[TBalloonIconType] of Byte = (NIIF_NONE, NIIF_INFO, NIIF_WARNING, NIIF_ERROR);
begin
// FillChar(NID_50, SizeOf(NotifyIconData_50), 0);
with NID_50 do
begin
// cbSize := SizeOf(NotifyIconData_50);
// Wnd := Window;
// uID := IconID;
uFlags := NIF_INFO;
StrPCopy(szInfo, BalloonText);
uTimeout := Timeout * 1000;
StrPCopy(szInfoTitle, BalloonTitle);
dwInfoFlags := aBalloonIconTypes[BalloonIconType];
end{with};
Result := Shell_NotifyIcon(NIM_MODIFY, @NID_50);
end;
Jens B