Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Анимация иконки в System Tray, вечно недосказанная тема! 
:(
    Опции темы
h2o
Дата 1.9.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: нет
Всего: 1



Прочитал тему http://forum.vingrad.ru/index.php?showtopic=53183
Как всегда - вопрос не разрешился! Там просто дали ссылку на компонент, который не ставится!

И всё же, как сделать чтобы иконка была анимированной?

Я так полагаю, что нужно несколько рисунков иконок менять с задержой.

Пробовал вот что, теперь уже понимаю что глупость:

Код

Shell_NotifyIcon( NIM_ADD, @nid ); //тут картинка 1
while form1.active do
begin
 hIcon := Application.Icon.Handle_версия2; // тут меняем картинку на 2ю
 Shell_NotifyIcon( NIM_NIM_MODIFY , @nid );
 sleep(2); //ждём 2 секунды
 hIcon := Application.Icon.Handle; //тут опять на первую
 sleep(2); //ждём 2 секунды


но глупость какая-то получается! как hIcon с Application.Icon.Handle на другую заменить?

какой вообще есть вариант анимации, может кто скажет?
Добавлено @ 16:55
код Делфи! Делаю на Делфи 6!
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Poseidon
Дата 1.9.2005, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Посмотри для начала вот тут. Если что не понятно - спрашивай
Добавлено @ 17:10
В твоем коде ошибка в том, что иконка меняется не 4 и 7 строчкой, а 5. Поэтому ничего не меняется. И вообще код какой-то странный


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Poseidon
Дата 1.9.2005, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Вот набрасал на скорую руку. С комментами. Ты должен разобратся.

На форме: Button1, OpenDialog1

Код
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses ShellApi;

procedure TForm1.FormCreate(Sender: TObject);
var nid : TNotifyIconData;
begin
  //Добавляем иконку в трей при старте программы:
  with nid do  //Указываем параметры иконки, для чего используем структуру
               //TNotifyIconData.
  begin
    cbSize := SizeOf( TNotifyIconData ); //Размер все структуры
    Wnd := Form1.Handle; //Здесь мы указывает Handle нашей главной формы
                         //которая будет получать сообщения от иконки.
    uID := 1;            //Идентификатор иконки
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; //Обозначаем то, что в
                                                  //параметры входят:
                                                  //Иконка, сообщение и текст
                                                  //подсказки (хинта).
    uCallbackMessage := WM_USER + 100;            //Здесь мы указываем, какое
                                                  //сообщение должна  высылать
                                                  //иконочка нашей главной форме,
                                                  //в тот момент, когда на ней
                                                  //(иконке)  происходят
                                                  //какие-либо события
    hIcon := Application.Icon.Handle;             //Указываем на Handle
                                                  //иконки (изображения)
                                                  //(в данной случае берем
                                                  //иконку основной формы
                                                  //приложения. Ниже Вы увидите
                                                  //как можно ее изменить)
    StrPCopy(szTip, Form1.Caption);                //Указываем текст всплывающей
                                                  //посдказки, который берем из
                                                  //Form1.Caption,
  end;
  Shell_NotifyIcon( NIM_ADD, @nid );  //Собственно добавляем иконку в трей:)
                                      //Обратите внимание, что здесь мы исползуем константу
                                      //NIM_ADD (добавление иконки).
end;




procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var nid : TNotifyIconData;
begin
  with nid do
  begin
    cbSize := SizeOf( TNotifyIconData );
    Wnd := Form1.Handle;
    uID := 1;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := WM_USER + 100;
    hIcon := Application.Icon.Handle;
    StrPCopy(szTip, Form1.Caption);
  end;
  Shell_NotifyIcon( NIM_DELETE, @nid );
  //Удаляем иконку из трея. Параметры мы вводим для того,
  //чтобы функция точно знала, какую именно иконку надо удалять.
  //Обратите внимание, что здесь мы исползуем константу
  //NIM_DELETE (удаление иконки).
end;


procedure TForm1.Button1Click(Sender: TObject);
var I   : TIcon;
    nid : TNotifyIconData;
begin
  //Здесь мы меням иконку приложения, для чего используем диалоговое окно
  //(для выбора файла, который содержит изображение иконки)
  if OpenDialog1.Execute then //Запуск диаголового окна
  begin
    I:=TIcon.Create; //Создаем объект I типа TIcon
    I.LoadFromFile(OpenDialog1.Filename); //Теперь загружаем в него изображение
                                          //из того файла, который был выбран в
                                          //окне диалогового окна
    //Далее делаем все тоже самое, что и раньше, создаем структуру типа
    //TNotifyIconData куда заносим все параметры иконки:)
    with nid do
    begin
      cbSize := SizeOf( TNotifyIconData );
      Wnd := Form1.Handle;
      uID := 1;
      uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
      uCallbackMessage := WM_USER + 100;
      hIcon := I.Handle;
      StrPCopy(szTip, Form1.Caption);
    end;
    Shell_NotifyIcon( NIM_MODIFY , @nid );
    //А вот здесь мы заносим изменения в иконку, которая находится в системном
    //трее обратите внимание, что здесь мы исползуем константу NIM_MODIFY
    //(изменение иконки).
    I.Free;
  end;
end;

end.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
h2o
Дата 2.9.2005, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: нет
Всего: 1



да я всё это прочитал!
дак я всё равно не понимаю как анимацию зделать!!!
нужно: добавить иконку в трэй а потом менять рисунки например подряд 3 штуки через интервал времени 1 секунда.

Shell_NotifyIcon( NIM_ADD, @nid );


Цикл, пока работает программа
меняем рисункок как-то на рисунок1
Shell_NotifyIcon( NIM_MODIFY , @nid );
ждём;
меняем рисункок как-то на рисунок2
Shell_NotifyIcon( NIM_MODIFY , @nid );
ждём;
меняем рисункок как-то на рисунок3
Shell_NotifyIcon( NIM_MODIFY , @nid );
ждём;

Дак или как мне в прогу загрузить 3 иконки и менять их в трэе, чтобы анимация получилась???

ну кто-то должен знать?

я в компонентах смотрел, но там так всё задвинуто что я просто не разобрался...
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
_hunter
Дата 2.9.2005, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



nid.hIcon = icon2
и меняй себе...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Poseidon
Дата 2.9.2005, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Цитата(h2o @ 2.9.2005, 15:47)
Дак или как мне в прогу загрузить 3 иконки и менять их в трэе, чтобы анимация получилась???
Используй компонент TImageList



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
dvamaster
Дата 2.9.2005, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: 2
Всего: 10



Пример из исходника моего ScreenShotSaver.

Код

...

var
  IconFrames: array [0..7] of HICON;
  Frame: Integer;
  NID: NOTIFYICONDATA;

...

procedure ChangeNotifyIcon(Wnd: HWND; uMsg: UINT; idEvent: UINT; dwTime: DWord); stdcall;
begin
  if not ExecuteScan then Exit;
  Frame := (Frame + 1) and 7;
  SendMessage(Wnd, WM_SETICON, ICON_SMALL, IconFrames[Frame]);
  NID.hIcon := IconFrames[Frame];
  Shell_NotifyIcon(NIM_MODIFY, @NID);
end;

procedure InitNotifyIcon(Wnd: HWND);
begin
  Frame := 0;
  IconFrames[0] := LoadIcon(HInstance, PChar(101));
  IconFrames[1] := LoadIcon(HInstance, PChar(102));
  IconFrames[2] := LoadIcon(HInstance, PChar(103));
  IconFrames[3] := LoadIcon(HInstance, PChar(104));
  IconFrames[4] := LoadIcon(HInstance, PChar(105));
  IconFrames[5] := LoadIcon(HInstance, PChar(106));
  IconFrames[6] := LoadIcon(HInstance, PChar(107));
  IconFrames[7] := LoadIcon(HInstance, PChar(108));
  NID.cbSize := SizeOf(NOTIFYICONDATA);
  NID.Wnd := Wnd;
  NID.uID := 1000;
  NID.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
  NID.uCallbackMessage := WM_ICON;
  NID.hIcon := IconFrames[0];
  NID.szTip := 'ScreenShotSaver';
  Shell_NotifyIcon(NIM_ADD, @NID);
  SetTimer(Wnd, 1, 125, @ChangeNotifyIcon);
...
end;

procedure DoneNotifyIcon(Wnd: HWND);
begin

...

  KillTimer(Wnd, 1);
  Shell_NotifyIcon(NIM_DELETE, @NID);
  DestroyIcon(IconFrames[7]);
  DestroyIcon(IconFrames[6]);
  DestroyIcon(IconFrames[5]);
  DestroyIcon(IconFrames[4]);
  DestroyIcon(IconFrames[3]);
  DestroyIcon(IconFrames[2]);
  DestroyIcon(IconFrames[1]);
  DestroyIcon(IconFrames[0]);
end;

...



--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
h2o
Дата 5.9.2005, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: нет
Всего: 1



а куда тут картинки вставлять? в "IconFrames[0] := LoadIcon(HInstance, PChar(101));"?
а как вставлять??? Хотя метод анимации вроде бы мне понятен. сегодня попробую!

Цитата

Используй компонент TImageList

а как? Я уже пробовал, но классы не соответсвуют. к примеру я загрухил на форму 3 рисунка и что дальше???
hicon не = Ticon, а = Ticon.handle
и как не крути Ticon не = Timage (а в нём мои 3 рисунка на форме). Тоже самое и с TimageList.
Как тут быть?
Добавлено @ 13:17
smile
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
h2o
Дата 6.9.2005, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: нет
Всего: 1



вообщем пофиг! я компонент установил! всё работает теперь!

можно больше не отвечать! спасибо всем!
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
dvamaster
Дата 6.9.2005, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: 2
Всего: 10



Навсякий случай отвечу

Код

IconFrames[0] := LoadIcon(HInstance, PChar(101));


это загрузка кадра из ресурса


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.