Mega Code Archive

 
Categories / Delphi / System
 

Windows Ballon

Title: Windows Ballon Question: How to make the windows ballon Answer: unit NotifyBalloon; interface uses SysUtils,Windows, Classes, ShellApi,Forms,Dialogs; const NIF_INFO = $10; type TNotifyIcons = (NIIF_NONE , NIIF_INFO ,NIIF_WARNING ,NIIF_ERROR ,NIIF_USER ); TNOTIFYICONDATA = record cbSize: DWORD; Wnd: HWND; uID: UINT; uFlags: UINT; uCallbackMessage: UINT; hIcon: HICON; szTip: array [0..127] of AnsiChar; dwState: DWORD; dwStateMask: DWORD; szInfo: array [0..255] of AnsiChar; uTimeout: UINT; szInfoTitle: array [0..63] of AnsiChar; dwInfoFlags: DWORD; end; TNotifyBalloon = class(TComponent) private FTitle: String; FText: String; NIcon : Integer; protected { Protected declarations } FIcon: TNotifyIcons; Data: TNOTIFYICONDATA; procedure SetIcon; public { Public declarations } ClientHandle : HWND; IconHandle : HWND; constructor Create(AOwner: Tcomponent); override; procedure ShowNotifyBalloon; procedure NotifyIcon; procedure DeleteIcon; published { Published declarations } property Icon : TNotifyIcons read FIcon write FIcon; property Title : String read FTitle write FTitle ; property Text : String read FText write FText ; end; procedure Register; implementation {*.res} constructor TNotifyBalloon.Create(AOwner : TComponent); begin inherited Create(AOwner); FIcon := NIIF_NONE; end; procedure TNotifyBalloon.NotifyIcon; begin FillChar(Data,Sizeof(Data),0); with Data do begin cbSize:= Sizeof(Data); Wnd:= ClientHandle; uID:= 100; uFlags:= NIF_ICON; hIcon:= IconHandle; end; Shell_NotifyIcon(NIM_ADD,@Data); end; procedure TNotifyBalloon.DeleteIcon; begin FillChar(Data,Sizeof(Data),0); with Data do begin cbSize:= Sizeof(Data); Wnd:= ClientHandle; uID:= 100; hIcon:= IconHandle; end; Shell_NotifyIcon(NIM_DELETE, @Data); end; procedure TNotifyBalloon.SetIcon ; begin if FIcon = NIIF_NONE then NIcon := $0; if FIcon = NIIF_INFO then NIcon := $1; if FIcon = NIIF_WARNING then NIcon := $2; if FIcon = NIIF_ERROR then NIcon := $3; if FIcon = NIIF_USER then NIcon := $4; end; procedure TNotifyBalloon.ShowNotifyBalloon; begin FillChar(Data,Sizeof(Data),0); with Data do begin cbSize:= Sizeof(Data); Wnd:= ClientHandle; uID:= 100; uFlags := NIF_ICON or NIF_INFO; hIcon:= Application.Icon.Handle; StrLCopy(szInfoTitle,PChar(FTitle),Sizeof(szInfoTitle)-1); StrLCopy(szInfo,PChar(FText),Sizeof(szInfo)-1); SetIcon; dwInfoFlags := NIcon; end; Shell_NotifyIcon(NIM_MODIFY,@data); end; procedure Register; begin RegisterComponents('Win32', [TNotifyBalloon]); end; end. //an example to use it.... procedure TForm1.FormCreate(Sender: TObject); begin NotifyBalloon1.ClientHandle := Handle; NotifyBalloon1.IconHandle := Application.Icon.Handle; NotifyBalloon1.NotifyIcon; with NotifyBalloon1 do begin Title := 'Atencin'; Text := 'Se est quedando sin espacio en el disco C:\'; Icon := NIIF_WARNING; ShowNotifyBalloon; end; end;