Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.06.28;
Скачать: CL | DM;

Вниз

Балон над TRxTrayIcon   Найти похожие ветки 

 
leonidus   (2008-05-25 18:28) [0]

Код который использую для того чтобы поместить иконку в трей и вывести нал дей балон с сообщением:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

const
 NIF_INFO = $10;
 NIF_MESSAGE = 1;
 NIF_ICON = 2;
 NOTIFYICON_VERSION = 3;
 NIF_TIP = 4;
 NIM_SETVERSION = $00000004;
 NIM_SETFOCUS = $00000003;
 NIIF_INFO = $00000001;
 NIIF_WARNING = $00000002;
 NIIF_ERROR = $00000003;

 NIN_BALLOONSHOW = WM_USER + 2;
 NIN_BALLOONHIDE = WM_USER + 3;
 NIN_BALLOONTIMEOUT = WM_USER + 4;
 NIN_BALLOONUSERCLICK = WM_USER + 5;
 NIN_SELECT = WM_USER + 0;
 NINF_KEY = $1;
 NIN_KEYSELECT = NIN_SELECT or NINF_KEY;
 
 TRAY_CALLBACK = WM_USER + $7258;

type
 PNewNotifyIconData = ^TNewNotifyIconData;
 TDUMMYUNIONNAME    = record
   case Integer of
     0: (uTimeout: UINT);
     1: (uVersion: UINT);
 end;

 TNewNotifyIconData = record
   cbSize: DWORD;
   Wnd: HWND;
   uID: UINT;
   uFlags: UINT;
   uCallbackMessage: UINT;
   hIcon: HICON;
  //Version 5.0 is 128 chars, old ver is 64 chars
   szTip: array [0..127] of Char;
   dwState: DWORD; //Version 5.0
   dwStateMask: DWORD; //Version 5.0
   szInfo: array [0..255] of Char; //Version 5.0
   DUMMYUNIONNAME: TDUMMYUNIONNAME;
   szInfoTitle: array [0..63] of Char; //Version 5.0
   dwInfoFlags: DWORD;   //Version 5.0
 end;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   IconData: TNewNotifyIconData;
   procedure SysTrayIconMsgHandler(var Msg: TMessage); message TRAY_CALLBACK;
   procedure AddSysTrayIcon;
   procedure ShowBalloonTips;
   procedure DeleteSysTrayIcon;
 public
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

uses ShellAPI;

procedure TForm1.SysTrayIconMsgHandler(var Msg: TMessage);
begin
 case Msg.lParam of
   WM_MOUSEMOVE:;
   WM_LBUTTONDOWN:;
   WM_LBUTTONUP:;
   WM_LBUTTONDBLCLK:;
   WM_RBUTTONDOWN:;
   WM_RBUTTONUP:;
   WM_RBUTTONDBLCLK:;
   //followed by the new messages
   NIN_BALLOONSHOW:
   {Sent when the balloon is shown}
     ShowMessage("NIN_BALLOONSHOW");
   NIN_BALLOONHIDE:
   {Sent when the balloon disappears?Rwhen the icon is deleted,
   for example. This message is not sent if the balloon is dismissed because of
   a timeout or mouse click by the user. }
     ShowMessage("NIN_BALLOONHIDE");
   NIN_BALLOONTIMEOUT:
   {Sent when the balloon is dismissed because of a timeout.}
     ShowMessage("NIN_BALLOONTIMEOUT");
   NIN_BALLOONUSERCLICK:
   {Sent when the balloon is dismissed because the user clicked the mouse.
   Note: in XP there"s Close button on he balloon tips, when click the button,
   send NIN_BALLOONTIMEOUT message actually.}
     ShowMessage("NIN_BALLOONUSERCLICK");
 end;
end;

procedure TForm1.AddSysTrayIcon;
begin
 IconData.cbSize := SizeOf(IconData);
 IconData.Wnd := AllocateHWnd(SysTrayIconMsgHandler);
 {SysTrayIconMsgHandler is then callback message" handler}
 IconData.uID := 0;
 IconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
 IconData.uCallbackMessage := TRAY_CALLBACK;   //user defined callback message
 IconData.hIcon := Application.Icon.Handle;    //an Icon"s Handle
 IconData.szTip := "Please send me email.";
 if not Shell_NotifyIcon(NIM_ADD, @IconData) then
   ShowMessage("add fail");
end;

procedure TForm1.ShowBalloonTips;
var
 TipInfo, TipTitle: string;
begin
 IconData.cbSize := SizeOf(IconData);
 IconData.uFlags := NIF_INFO;
 TipInfo := "Please send me email.";
 strPLCopy(IconData.szInfo, TipInfo, SizeOf(IconData.szInfo) - 1);
 IconData.DUMMYUNIONNAME.uTimeout := 3000;
 TipTitle := "Happyjoe@21cn.com";
 strPLCopy(IconData.szInfoTitle, TipTitle, SizeOf(IconData.szInfoTitle) - 1);
 IconData.dwInfoFlags := NIIF_INFO;     //NIIF_ERROR;  //NIIF_WARNING;
 Shell_NotifyIcon(NIM_MODIFY, @IconData);
 {in my testing, the following code has no use}
 IconData.DUMMYUNIONNAME.uVersion := NOTIFYICON_VERSION;
 if not Shell_NotifyIcon(NIM_SETVERSION, @IconData) then
   ShowMessage("setversion fail");
end;

procedure TForm1.DeleteSysTrayIcon;
begin
 DeallocateHWnd(IconData.Wnd);
 if not Shell_NotifyIcon(NIM_DELETE, @IconData) then
   ShowMessage("delete fail");
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 AddSysTrayIcon;
 ShowBalloonTips;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 DeleteSysTrayIcon;
end;
end.

Код не мой, но работает отлично.

Теперь встала задача поместить в трей иконку используя TRxTrayIcon и так же вывести дан дим балон, но как не бился ничего не выходит, где грабли?


 
Palladin ©   (2008-05-26 16:00) [1]

грабли в том, что RXTrayIcon их не поддерживает


 
leonidus   (2008-05-26 23:30) [2]

т.е. тогда один выход - вручную помещать иконку в трей или все же можно что-то придумать?


 
Германн ©   (2008-05-27 01:18) [3]


> leonidus   (26.05.08 23:30) [2]
>
> т.е. тогда один выход - вручную помещать иконку в трей или
> все же можно что-то придумать?
>

У тебя есть работающий (по твоим словам) код. Зачем тебе TRxTrayIcon? Он нужен только тем, кто не может сам написать код для иконки в трее.

Или у тебя есть чужой код [0], в котором ты не можешь разобраться, чтобы что-то изменить в нём. И есть TRxTrayIcon, в котором ты можешь изменить что-то тебе нужное (в Инспекторе объектов), но там нет BaloonHint?


 
leonidus   (2008-05-27 16:40) [4]

Как я и написал выше код не мой и как вы правильно заметили я в нем разобраться не могу, потому и хочу "скрестить" его и TRxTrayIcon.



Страницы: 1 вся ветка

Текущий архив: 2009.06.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
15-1239784299
Kolan
2009-04-15 12:31
2009.06.28
«Интерфейс пользователя» → Сетка в таблицах


15-1240614017
Городской Шаман
2009-04-25 03:00
2009.06.28
В Украине официально узаконили взятки.


15-1240480713
12
2009-04-23 13:58
2009.06.28
А что это за копия этого сайта?


2-1242046804
СДракон
2009-05-11 17:00
2009.06.28
Excel


15-1240900857
LiveCD
2009-04-28 10:40
2009.06.28
Выбор ОС