Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-1148975873
Kley
2006-05-30 11:57
2006.08.06
выгрузка записей из одной табл в другую


2-1153289489
LexXL
2006-07-19 10:11
2006.08.06
компоненты


15-1152537068
syte_ser78
2006-07-10 17:11
2006.08.06
маленький цифровик


3-1148979455
Still Swamp
2006-05-30 12:57
2006.08.06
Поделитесь заголовочным файлом для FireBird Embeded


2-1153325727
!_SM_!
2006-07-19 20:15
2006.08.06
Типы в Dll





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