Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
1

Сделать анимированную иконку в трее?

20.10.2014, 05:33. Показов 1801. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Предварительная подготовка нескольких картинок не нравится.
Моя идея такова:
Сделал иконку 16х16 пикселей - это будет шаблон, получился файл размером 1405 байт.
В этом файле область с 1086 по 1341 байт содержит как раз 16х16 пикселей изображения.
Каждый пиксель содержит 1 байт информации о цвете — самое простое разрешение и глубина цвета, но меня устраивает.
Теперь задача — заполнить эту область памяти моей картинкой — для упрощения задачи, сделать иконку напополам, снизу красной, сверху синей, и запилить полученное в TrayIcon.
Примерно так:
C++
1
2
3
String file1="16x16.ico";
TFileStream  *IconStream = new TFileStream(file1,fmOpenRead);
TrayIcon1->Visible=true;
и потом по таймеру, высчитываем новое изображение, записываем в стрим и
C++
1
TrayIcon1->Icon->LoadFromStream(IconStream);
Вот тут у меня загвоздка — как записать в стрим размером 1405 байт кусок памяти с 1086 по 1341?
К примеру, массив int Buffer[16][16]. Простите, рассказал неуклюже, но суть, вроде бы, ясна.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2014, 05:33
Ответы с готовыми решениями:

Как сделать анимированную картинку?
Нужна небольшая анимированная картинка, показывающая, что выполняется некий процесс. Например...

Как сделать иконку на qt для программы в трее для ubuntu?
Как сделать иконку на qt для программы в трее для ubuntu?

Нажатие на иконку в трее
господа вывожу иконку в трей таким образом- #include <windows.h> /* Declare Windows procedure ...

Как изменить иконку в трее
Как изменить иконку в треи после? делаю так ложу иконки в папку ресурсов пытаюсь изменить...

7
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
20.10.2014, 05:55  [ТС] 2
Вот сине-красный файл 16x16.ico в архиве
Вложения
Тип файла: rar 16x16.rar (190 байт, 9 просмотров)
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
20.10.2014, 09:54 3
Создай memorystream и скомбинируй туда содержимое файла и свои данные. Грузишь с файла первые 1085 байт, потом 256 со своего массива, потом остаток с файла, начиная с 1342 байта.
Забавный подход, хотя и не самый рациональный. Но хозяин-барин.
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
20.10.2014, 13:25 4
Ну вот рабочий пример закраски половины иконки вашим методом. С использованием промежуточного буфера (по другому я не знаю как)__
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    char bufic[2000];
    TMemoryStream *ms = new TMemoryStream;
    ms->LoadFromFile(".\\Icon1.ico");
    int dli = ms->Size;
    ms->ReadBuffer( bufic,dli);   ms->Position = 0;
    for (int i=1086;i<1086+128;i++) bufic[i]=0xE7;
    ms->WriteBuffer( bufic,dli);  ms->Position = 0;
    Application->Icon->LoadFromStream(ms);
    delete ms; 
}
1
68 / 65 / 21
Регистрация: 01.05.2014
Сообщений: 247
20.10.2014, 15:24 5
Вы ерундой занимаетесь.
Делается так: берётся желаемое изображение ( кадра три, два ), преобразуется в значки и
выводиться с задержкой таймера или, что-то подобное.
Число кадров анимации, которую желаете изобразить, зависит от вас и переключателя типа SWITCH.
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
20.10.2014, 16:20  [ТС] 6
Почему-то не меняется отображение иконки, остается в первоначальном виде.
Что еще дописать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
byte Dat[16][16];
TMemoryStream *MemoryStream = new TMemoryStream  ;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
String file1="16x16.ico";
MemoryStream->LoadFromFile(file1);
TrayIcon1->Icon->LoadFromStream(MemoryStream);
TrayIcon1->Visible=true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MemoryStream->Position = 1086;
for (int i = 0; i < 8; i++)
    for (int j = 0; j < 16; j++)
        Dat[i][j] = StrToInt(Edit1->Text);
MemoryStream->WriteBuffer(Dat, 128);
//MemoryStream->SaveToFile("new.ico");
MemoryStream->Position = 0;
TrayIcon1->Icon->LoadFromStream(MemoryStream);
}
//---------------------------------------------------------------------------
Добавлено через 1 минуту
oxyfat, я хочу подобие графика в трей. Две-три картинки меня не устраивает. Только хардкор.
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
20.10.2014, 18:11 7
Цитата Сообщение от +1 Посмотреть сообщение
Почему-то не меняется отображение иконки
У меня (ваш пример) меняется; только я меняю не трэй-иконку, а иконку приложения (BCB 5__Win 7ult).

Добавлено через 1 минуту
Может быть для трэй-иконки использовать Repaint при нажатии кнопки.
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
20.10.2014, 18:42  [ТС] 8
Цитата Сообщение от nick42 Посмотреть сообщение
использовать Repaint
что-то я не нашел, где это?
0
20.10.2014, 18:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2014, 18:42
Помогаю со студенческими работами здесь

Как убить иконку в трее?
Доброго дня всем! Долго мучился над проблемой как убить запущенную прогу, убил. Но возникла новая...

Менять иконку в трее в зависимости от условия
Доброго времени суток. Прошу помочь в следующей задаче. В таскбаре (рядом с часами) надо вывести...

Как заменить одну иконку другой в трее?
Вот собссно и весб вопрос... просто я не могу врубиться КАК? Разбирался с примером: Procedure...

Не отображать интерфейс приложения, а показать только иконку в трее
Я хочу сделать прогу таким образом: 1. При её запуске появляется ТОЛЬКО иконка в трее, NotifyIcon....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru