Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.06.28;
Скачать: [xml.tar.bz2];

Вниз

Балон над 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.06.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.005 c
15-1240118968
AIRDIGER
2009-04-19 09:29
2009.06.28
Откомпилированные Delphi-модули (.dcu) в исходный код (.pas)


15-1240305165
Cobalt
2009-04-21 13:12
2009.06.28
Лицензионность винды


15-1240900867
Василий Жогарев
2009-04-28 10:41
2009.06.28
PostgreSQL & UTF8


15-1240225644
T&F
2009-04-20 15:07
2009.06.28
Отслеживание входящих подключений


2-1241858175
lewka
2009-05-09 12:36
2009.06.28
Московское время





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский