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

Вниз

Подсказка-"шарик" у иконки трея   Найти похожие ветки 

 
Reset   (2005-11-21 13:32) [0]

Использую mdvToolTip.
Не пойму как сделать хинт у иконки трея (стандартной).
Если mdvToolTip.ShowHint(TrayIcon1.Wnd,TRUE), то хинт появляется не там где нужно :(


 
mdw ©   (2005-11-21 13:50) [1]

Посмотри BAPTrayIcon. Сам компонент подглючивает, но посмотреть можно, там это реализовано.


 
igi   (2005-11-23 17:04) [2]

Reset
Если разобрался - напиши пожалуйста, а то я ничего понять не могу...


 
Reset   (2005-11-29 11:04) [3]

Разбираюсь.
Там принцип вроде как другой - одно дело стандартный balloon, а другое дело свой. Напишу обязательно.


 
Reset   (2005-12-05 09:52) [4]

скажу сразу, что всё безрезультатно

у Бартова (в BARTrayIcon) baloon, как я понял, внедрен в сам контрол
до исправления (читай - переписывания под себя) руки не дошли и, скорее всего, дойдут не скоро :((

те примеры, которые даёт Delphi World, опираются на Commctrl и и имеют свои "глюки":
1-ый - при движении мыши balloon пропадает
2-ой - balloon появляется только у курсора мыши, и при её движении не появляется вообще

вот такие проблемы


 
Reset   (2006-01-03 17:04) [5]

итак, решение проблемы - версия 1 :)

за основу взят пример - Использование подсказки в Tray в виде шара
из Delphi World
примечание - в w98 не работает :(

{
 Use the AddSysTrayIcon procedure to add icon to notification area
 (in FormCreate, for example), and use the ShowBalloonTips procedure
 when ever you want(of cause must after you called AddSysTrayIcon procedure),
 and finally call DeleteSysTrayIcon procedure to remove icon from
 notification area after your using.
 Add propriety code to the callback message handler.

 The new feature require IE5 or later.
}

unit Unit1;

interface

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

{new constant definitions}

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;

 {define the callback message}
 TRAY_CALLBACK = WM_USER + $7258;

 {new NotifyIconData structure definition}
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;

 {AddSysTrayIcon procedure add an icon to notification area}
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;

{ShowBalloonTips procedure carry out the new feature: Balloon Tips}
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;

{here"s the deletion procedure}
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.


 
Reset   (2006-01-03 17:05) [6]

теперь исправления "под KOL"

процедура procedure TForm1.SysTrayIconMsgHandler(var Msg: TMessage);
в KOL не нужна, она преобразуется в обработчике событий самой формы ->

function TForm1.KOLForm1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
 var
   P  : TPoint;
 begin
   // Предварительное значение
      Result := FALSE;
   // Обработчик иконки трея (+ balloon)
      if Msg.message = TRAY_CALLBACK
         then begin
                // Выбор события
                case Msg.lParam of
                     WM_LBUTTONUP         : begin
                                              SetForegroundWindow(Form.Handle); // нужен !!!
                                            end;
                     WM_RBUTTONUP         : begin
                                              GetCursorPos(P); // получение коор. (в первую очередь - чтобы меню не появлялось потом в середине экрана)
                                              SetForegroundWindow(Form.Handle); // первый раз (нужны ОБА !!!)
                                              PopupMenu1.Popup(P.X,P.Y); // показ меню
                                              SetForegroundWindow(Form.Handle); // второй раз (нужны ОБА !!!)
                                            end;
                     NIN_BALLOONSHOW      : begin
                                              // MsgOK("Balloon show");
                                            end;
                     NIN_BALLOONHIDE      : // НЕ СРАБАТЫВАЕТ :  при окончании таймаута или щелчка юзера
                                            begin
                                              // MsgOK("Balloon hide");
                                            end;
                     NIN_BALLOONTIMEOUT   : begin
                                              // MsgOK("Timeout");
                                            end;
                     NIN_BALLOONUSERCLICK : // ПРИМЕЧАНИЕ: клик на [X] вызовет NIN_BALLOONTIMEOUT
                                            begin
                                              // MsgOK("UserClick");
                                            end;
                     end;
              end;
 end;


вот, собственно и всё :))


 
Igi   (2006-01-10 02:10) [7]

Спасибо, бум изучать :)



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

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

Наверх





Память: 0.49 MB
Время: 0.031 c
15-1160258215
ProgRAMmer Dimonych
2006-10-08 01:56
2006.10.29
Описание формата Rar 3.x


1-1158920867
salexn
2006-09-22 14:27
2006.10.29
обратное событие OnIdle


15-1159123421
Andy BitOff
2006-09-24 22:43
2006.10.29
Швейцарцы создали 160-мегапиксельную камеру


1-1158908490
Василий Блаженный
2006-09-22 11:01
2006.10.29
TTrayIcon & baloon tips


2-1160382514
Volodya_
2006-10-09 12:28
2006.10.29
Excel->Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский