Текущий архив: 2005.01.02;
Скачать: CL | DM;
ВнизSystem Tray Найти похожие ветки
← →
MaxxSoft © (2004-11-16 11:03) [0]Как свернуть / восстановить приложение в System Tray?
← →
zz 5 © (2004-11-16 11:10) [1]Приложение не сворачивается в System Tray, туда добавляется иконка
← →
MaxxSoft © (2004-11-16 11:24) [2]Это я понимаю. Хорошо поставим вопрос так: как добавить иконку в Tray и ловить нажатие на нее?
← →
Piter © (2004-11-16 11:25) [3]Вопрос: Как поместить иконку приложения в System Tray?
Ответ: для работы с SysTray (область, где часики) в WinApi есть функция - Shell_NotifyIcon. С помощью нее можно добавлять свои иконки в SysTray, модифицировать их и удалять.function Shell_NotifyIcon(dwMessage: DWORD; lpData: PNotifyIconData): BOOL; stdcall;
Ее заголовок, а также определение типов TNotifyIconData, PNotifyIconData находится в юните shellapi.pas, который надо подключить для использования данной функции:
code>uses
..., ShellAPI;
Пример вызова:
предполагается, что в программе где-то объявлена глобальная переменная NID: TNotifyIconDataprocedure TForm1.Button1Click(Sender: TObject);
var
begin
NID.uID :=0;
NID.Wnd := Handle;
NID.uCallbackMessage :=WM_USER;
NID.hIcon := LoadIcon(HINSTANCE,"ICON1");
NID.szTip := "Моя иконка";
NID.uFlags :=NIF_ICON or NIF_MESSAGE or NIF_TIP;
NID.cbSize :=sizeof(NID);
Shell_NotifyIcon(NIM_ADD,@NID);
end;
Файл проекта с данным примером можно загрузить ЗДЕСЬ
Вы можете подробнее почитать по данномй теме ЗДЕСЬ (systray_ext.txt)
Отвечал: Piter
← →
MaxxSoft © (2004-11-16 11:52) [4]А можно ссылочки "ЗДЕСЬ" еще раз...
← →
grom (2004-11-16 20:18) [5]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ExtCtrls,ShellApi;
type
TNotifyIconBalloon = record
cbSize: DWORD;
hWnd: 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;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
PopupMenu1: TPopupMenu;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure PopupMenu1Popup(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure DefaultHandler(var M); override;
procedure Ico(var M:TMessage); message WM_USER+222;
end;
var
Form1: TForm1;
N:TNotifyIconBalloon;
WM_TASKBARCREATED: Cardinal;
b:Boolean;
implementation
{$R *.dfm}
procedure BalloonHint(NIco,Flag:byte;Title,Text:string);
begin
N.cbSize:=SizeOf(TNotifyIconBalloon);
N.uID:=NIco;
N.uFlags:=$00000010;
StrPLCopy(N.szInfo,Text,SizeOf(N.szInfo)-1);
StrPLCopy(N.szInfoTitle,Title,SizeOf(N.szInfoTitle)-1);
N.uTimeout:=5000;
N.dwInfoFlags:=Flag;
Shell_NotifyIcon(NIM_MODIFY,@N);
end;
procedure AddModDelIcon(H:HWND;R,NIco:byte;Icon:HICON;S:string);
begin
N.cbSize:=SizeOf(TNotifyIconBalloon);
N.hWnd:=H;
N.uID:=NIco;
N.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
N.uCallbackMessage:=WM_USER+222;
N.hIcon := Icon;
StrPLCopy(N.szTip,S,SizeOf(N.szTip)-1);
if R=1 then Shell_NotifyIcon(NIM_ADD,@N);
if R=2 then Shell_NotifyIcon(NIM_MODIFY,@N);
if R=3 then Shell_NotifyIcon(NIM_DELETE,@N);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
AddModDelIcon(Handle,1,1,Application.Icon.Handle,"Add Icon 1");
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
beep;
b:= not b;
if b then AddModDelIcon(Handle,2,1,Icon.Handle,"Modify Icon 1")
else AddModDelIcon(Handle,2,1,Application.Icon.Handle,"Modify Icon 2")
end;
procedure TForm1.Button2Click(Sender: TObject);//Show Balloon
begin //1= INFO; 2= WARNING; 3= ERROR;
BalloonHint(1,1,"Balloon hint",FormatDateTime("Ñåãîäíÿ : dddd"^m"ddddd ã.",Now))
end;
procedure TForm1.Button3Click(Sender: TObject);//Hide Balloon
begin
BalloonHint(1,0,"","")
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
AddModDelIcon(Handle,3,1,0,"")//Delete Icon
end;
procedure TForm1.Ico(var M:TMessage);
begin
if M.WParam=1 then
case M.LParam of
WM_RBUTTONUP : PopupMenu1.Popup(Mouse.CursorPos.x,Mouse.CursorPos.y);
WM_LBUTTONUP : Button1.Click;
end;
end;
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
SetForegroundWindow(Handle)
end;
procedure TForm1.DefaultHandler(var M);
begin
if TMessage(M).Msg = WM_TASKBARCREATED then
AddModDelIcon(Handle,1,1,Application.Icon.Handle,"Add Icon 2");
inherited;
end;
initialization
WM_TASKBARCREATED := RegisterWindowMessage("TaskbarCreated");
end.
← →
DrPass © (2004-11-16 22:45) [6]Во многих форумах "как добавить иконку в трей" является оффтопиком. Потому что уже тошнит
← →
Piter © (2004-11-17 00:35) [7]и правильно. Нужно темы такие закрывать и посылать в FAQ (обращаюсь к модераторам)
Страницы: 1 вся ветка
Текущий архив: 2005.01.02;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.035 c