Форум: "WinAPI";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
ВнизКак изменять значок программы в трэи по необходимости?! Найти похожие ветки
← →
Volf_555 © (2006-04-16 04:24) [0]Пробывал следующим способом - меняет только значки главной формы и на панели задач, а в трэи - нет...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ShellApi, ExtCtrls;
const UWM_TRAYICON = WM_USER+1;
const ID_TRAYICON = 1;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
PopupMenu1: TPopupMenu;
N11: TMenuItem;
N21: TMenuItem;
N31: TMenuItem;
Timer1: TTimer;
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N21Click(Sender: TObject);
procedure N31Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
procedure TrayDefaultHandler (var Message:TMessage);
public
{ Public declarations }
Data:TNotifyIconData;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var
H:THandle;
S:Integer;
begin
H:=AllocateHWnd (Self.TrayDefaultHandler);
FillChar (S,SizeOf (S),#0);
data.cbSize:=SizeOf (S);
data.Wnd:=H;
data.uCallbackMessage:=UWM_TRAYICON;
data.uFlags:=NIF_ICON or NIF_TIP or NIF_MESSAGE;
data.hIcon:=Application.Icon.Handle;
StrPCopy (data.szTip,Application.Title);
Shell_NotifyIcon (NIM_ADD,@data);
form1.Hide;
end;
procedure TForm1.TrayDefaultHandler (var Message:TMessage);
begin
if Message.Msg=uWM_TRAYICON then
if Message.LParam=WM_RBUTTONDOWN then
begin
PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon (NIM_DELETE,@data);
end;
procedure TForm1.N11Click(Sender: TObject);
begin
Close
end;
procedure TForm1.N21Click(Sender: TObject);
begin
Form1.Show
end;
procedure TForm1.N31Click(Sender: TObject);
begin
Form1.Hide
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
H:THandle;
S:Integer;
begin
Shell_NotifyIcon (NIM_Delete,@data);
form1.Tag:=Form1.Tag+1;
case form1.Tag of
1: begin
Application.Icon.LoadFromFile("1.ico");
Shell_NotifyIcon (NIM_Add,@data);
end;
2: begin
Application.Icon.LoadFromFile("2.ico");
Shell_NotifyIcon (NIM_Add,@data);
end;
3: begin
Application.Icon.LoadFromFile("3.ico");
Shell_NotifyIcon (NIM_Add,@data);
form1.Tag:=0;
end;
end;
end;
end.
← →
TUser © (2006-04-16 05:46) [1]ShellNotifyIcon
← →
Volf_555 © (2006-04-16 12:54) [2]
> TUser © (16.04.06 05:46) [1]
> ShellNotifyIcon
Я ж ведь так и делал!
Вот кусок кода:
procedure TForm1.Timer1Timer(Sender: TObject);
var
H:THandle;
S:Integer;
begin
Shell_NotifyIcon (NIM_Delete,@data);
form1.Tag:=Form1.Tag+1;
case form1.Tag of
1: begin
Application.Icon.LoadFromFile("1.ico");
Shell_NotifyIcon (NIM_Add,@data);
end;
2: begin
Application.Icon.LoadFromFile("2.ico");
Shell_NotifyIcon (NIM_Add,@data);
end;
3: begin
Application.Icon.LoadFromFile("3.ico");
Shell_NotifyIcon (NIM_Add,@data);
form1.Tag:=0;
end;
end;
end;
По таймеру идёт загрузка иконки, а потом с помощью Shell_NotifyIcon(NIM_Delete,@data) - должна удалиться иконка, а с помощьюShell_NotifyIcon (NIM_Add,@data)
- добавиться новая иконка.
Но это не работает по неизвестной причине...
Какие ещё будут варианты?
← →
Leonid Troyanovsky © (2006-04-16 13:34) [3]
> Volf_555 © (16.04.06 12:54) [2]
> Application.Icon.LoadFromFile("1.ico");
> Shell_NotifyIcon (NIM_Add,@data);
Ну, у приложения ты поменял иконку, а где изменения data?
Сравни с http://rsdn.ru/Forum/?mid=897503
--
Regards, LVT.
← →
Volf_555 © (2006-04-16 13:46) [4]Всё - догнал и переделал :)
Всем большое спасибо!!!!
← →
Юрий Зотов © (2006-04-16 21:10) [5]И не надо сначала удалять, а потом добавлять иконку - используйте NIM_MODIFY.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c