подскажите в чем ощибка? вот код программы которая по теории при нажатии левой кнопки мыши на своей иконке в области трея должна показывать Balloon но по неизвестной мне причине этого не делает!
| Код | unit Unit1;
interface
uses Windows, ShellApi, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus;
type TForm1 = class(TForm) PopupMenu1: TPopupMenu; Exit: TMenuItem; procedure ExitClick(Sender: TObject); procedure FormCreate(Sender: TObject); private procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SysCommand; procedure WMShowWindow(var Msg: TWMShowWindow); message WM_ShowWindow; { Private declarations } public { Public declarations } end;
type TTimeoutOrVersion = record case Integer of 0: (uTimeout: UINT); 1: (uVersion: UINT); end; TNotifyIconDataEx = record cbSize: DWORD; hWnd: HWND; uID: UINT; uFlags: UINT; uCallbackMessage: UINT; hIcon: HICON; szTip: array[0..63] 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;
TBalloonHintIcon = (bitNone, bitInfo, bitWarning, bitError); TBalloonHintTimeOut = 10..60;
const NIIF_NONE = $00000000; NIIF_INFO = $00000001; NIIF_WARNING = $00000002; NIIF_ERROR = $00000003; NIF_STATE = $00000008; NIF_INFO = $00000010; NIF_GUID = $00000020;
var Form1: TForm1; NID:_NOTIFYICONDATA; pintr:Pointer; hide_bol:Boolean;
implementation
{$R *.dfm}
procedure AddTrayIcon(); begin hide_bol:=true; ShowWindow(form1.Handle, SW_HIDE); PostMessage(Application.Handle,WM_SHOWWINDOW,0,SW_PARENTCLOSING); Shell_NotifyIcon(NIM_ADD, pintr); end;
//********* Ïðÿ÷åì Balloon*****************************************
function HideBalloonHint: boolean; var NIDEx: TNotifyIconDataEx; begin NIDEx.cbSize := SizeOf(NIDEx); NIDEx.hWnd := FindWindow('TForm1','Balloon Systray'); NIDEx.uID := 100; NIDEx.uFlags:=NIF_INFO; NIDEx.szInfo:=''; Result:=Shell_NotifyIcon(NIM_MODIFY, @NIDEx); end;
//********* Ïîêàçûâàåì Balloon*****************************************
function ShowBalloonHint(Title: String; Text: String; IconType: TBalloonHintIcon; TimeoutSecs: TBalloonHintTimeOut): boolean; const aBalloonIconTypes: array[TBalloonHintIcon] of Byte = (NIIF_NONE, NIIF_INFO, NIIF_WARNING, NIIF_ERROR); var NIDEx: TNotifyIconDataEx; begin // HideBalloonHint; NIDEx.cbSize := SizeOf(NIDEx); NIDEx.hWnd := nid.Wnd {FindWindow('TForm1','Balloon Systray')}; NIDEx.uID := NID.uID {100}; NIDEx.uFlags := NID.uFlags; NIDEx.hIcon := NID.hIcon; NIDEx.uCallbackMessage := WM_SHOWWINDOW; NIDEx.szTip := 'Balloon SysTrayArea programm'; StrLCopy(NIDEx.szInfo, PChar(Text), SizeOf(NIDEx.szInfo)-1); StrLCopy(NIDEx.szInfoTitle, PChar(Title), SizeOf(NIDEx.szInfoTitle)-1); NIDEx.TimeoutOrVersion.uTimeout := TimeoutSecs * 1000; NIDEx.dwInfoFlags := aBalloonIconTypes[IconType]; Result:=Shell_NotifyIcon(NIM_MODIFY, @NIDEx); end;
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand); begin if Msg.CmdType = SC_ICON then AddTrayIcon() else inherited; end;
procedure TForm1.FormCreate(Sender: TObject); begin pintr:=@NID; NID.cbSize:=1024; NID.Wnd:=FindWindow('TForm1','Balloon Systray'); NID.uID:=Application.Handle; NID.hIcon:=form1.Icon.Handle; NID.uFlags:=$7; { $7 or 0111b = NIF_MESSAGE, NIF_ICON, NIF_TIP} NID.uCallbackMessage:=WM_SHOWWINDOW; {WM_GETMINMAXINFO} NID.szTip:='Balloon SysTrayArea programm'; //******************************************************** end;
procedure TForm1.WMShowWindow(var Msg: TWMShowWindow); var pnt:TPoint; begin case Msg.Status of $202 : if hide_bol then ShowBalloonHint('BALLOON','Âîò îí ß!!',bitInfo,30); $205 : begin GetCursorPos(pnt); PopupMenu1.Popup(pnt.X,pnt.Y); end else inherited; end; end;
procedure TForm1.ExitClick(Sender: TObject); begin if hide_bol then begin Shell_NotifyIcon(NIM_DELETE,pintr); ShowWindow(form1.Handle, SW_SHOW) ; PostMessage(Application.Handle,WM_SHOWWINDOW,1,SW_PARENTOPENING); end; Application.Terminate; end;
end.
|
|