Текущий архив: 2008.07.06;
Скачать: CL | DM;
Вниз
Сменить вид иконки в трее Найти похожие ветки
← →
Vyacheslav (2008-06-09 15:04) [0]Есть приложение с скрытой формой и иконкой в трее. RX библиотеки нет возможности подключить, да как и впрочем любые другие. Каким образом можно сменить или саму иконку (использую икону приложения) на другую, каким либо способом или сделать текущую иконку в оттенках серого (вроде как неактивной)?
Вот код, которым пользуюсь для отображения иконки в трее:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellApi;
const
WM_NOTIFYTRAYICON = WM_USER + 1;
type
TForm1 = class(TForm)
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure WMTRAYICONNOTIFY(var Msg: TMessage);
message WM_NOTIFYTRAYICON;
public
{ Public declarations }
end;
var
Form1: TForm1;
tray: TNotifyIconData;
TrayIcon: TIcon;
implementation
{$R *.dfm}
procedure TForm1.WMTRAYICONNOTIFY(var Msg: TMessage);
begin
{обрабатываем события на иконке в трее}
case Msg.LParam of
WM_LBUTTONDOWN: Form1.Visible:=true;
WM_LBUTTONDBLCLK: {код обработки события двойного нажатия на левую кнопку мыши}
WM_LBUTTONUP: {код обработки события отпускания левой кнопки мыши}
WM_RBUTTONDOWN: {код}
WM_RBUTTONDBLCLK: {код}
WM_RBUTTONUP: {код}
WM_MOUSEMOVE: {код}
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
try
with tray do begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Form1.Handle;
uID := 1;
end;
Shell_NotifyIcon(NIM_DELETE, Addr(tray));
finally
Application.Terminate;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TrayIcon := Application.Icon;
with tray do begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Form1.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;
hIcon := TrayIcon.Handle;
szTip := ("Это мое приложение в трее");
end;
Shell_NotifyIcon(NIM_ADD, Addr(tray));
end;
procedure TForm1.GoToTrayButtonClick(Sender: TObject);
begin
//сворачиваемся в Трей
Form1.Visible:=false;
end;
end.
← →
SergeyIT © (2008-06-09 15:34) [1]Вот по таймеру переношу данные на сервер и меняю иконку
procedure TMainCopy.TimerTimer(Sender: TObject);
var
i: Integer;
begin
inTimer := TRUE;
i := CopyNext;
if i <> iState then
begin
ModifyTrayIcon(i);
end;
inTimer := FALSE;
end;
procedure TMainCopy.ModifyTrayIcon(ind: Integer);
var
nidata : TNotifyIconData;
s: String;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle; //HWND вашего окна (окна принимающего обратные сообщения)
uID := 1; // номер значка
uCallBackMessage := WM_COPYICONNOTIFY;
hIcon := Icons[ind].Handle; // то откуда сдергивается значек
// это может быть и ImageList и т.д.
case ind of
0: s := "Nothing to copy";
1: s := "Running";
else s := LastError;
end;
StrPCopy(szTip, s); // всплывающая строка,
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; //обрабатываемые флаги
Shell_NotifyIcon(NIM_MODIFY, @nidata); // добавление значка
iState := ind;
end;
end;
где
Icons: Array[0..2] of TIcon;
iState: Integer;
← →
Юрий Зотов © (2008-06-09 16:29) [2]> Vyacheslav (09.06.08 15:04)
NIM_MODIFY - обновление иконки.
Страницы: 1 вся ветка
Текущий архив: 2008.07.06;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.032 c