Анимация Значка панели задач

Вы можете определить словарь, ключ как прописные буквы и значение как всевозможную комбинацию этого символа.

rand_dict = {
    "A": ["@", "a", "A"],
    "B": ["b", "3", "B"],
    "C": ["c", "(", "C"],
    "D": ["D", "d", "6"],
    "E": ["E", "e"],
    "F": ["F", "f"],
    "G": ["6", "G", "g", "9"],
    "H": ["h", "H"],
    "I": ["I", "i", "!"],
    "J": ["J", "j"],
    "K": ["k", "K"],
    "L": ["l", "L", "1"],
    "M": ["m", "M"],
    "N": ["n", "N"],
    "O": ["O", "o", "0"],
    "P": ["p", "P"],
    "Q": ["Q", "q"],
    "R": ["R", "r"],
    "S": ["s", "S", "$"],
    "T": ["T", "t"],
    "U": ["U", "u"],
    "V": ["v", "V", "<"],
    "W": ["w", "W"],
    "X": ["x", "X"],
    "Y": ["Y", "y"],
    "Z": ["z", "Z"],
}

перетасовывают все возможные списки, циклически выводя строку

foo = "MyExGirlFriendIsAnInsult"

bar = []
for i in list(foo.upper()):
    random.shuffle(rand_dict[i], random.random)
    bar.append(rand_dict[i][0])

print("".join(bar))

как:

Myex9Ir1fR!EnD!s@NInsulT
myEXGiRLfRIeNdI$AnIN$uLT
MYEX6Irlfrien6!$aNInsUlt
MYEXG!R1fr!ENdISAn!nSu1t
myExg!rLFrIEn6is@NiN$u1T
16
задан p.campbell 1 September 2014 в 04:52
поделиться

2 ответа

сообщение в блоге Abhinaba Basu Анимация и текст в Системном лотке с помощью C# объясняют.

Это сводится:

  • создание массива значков, каждый из которых представляют кадр анимации.
  • переключение значков в лотке на событиях таймера
  • создают растровую полосу. Каждый кадр составляет 16x16 пикселей
  • использование , SysTray.cs

, например,

enter image description here

private void button1_Click(object sender, System.EventArgs e)
{
    m_sysTray.StopAnimation();
    Bitmap bmp = new Bitmap("tick.bmp");
    // the color from the left bottom pixel will be made transparent
    bmp.MakeTransparent();
    m_sysTray.SetAnimationClip(bmp);
    m_sysTray.StartAnimation(150, 5);
}

SetAnimationClip использует следующий код для создания кадра анимации

public void SetAnimationClip (Bitmap bitmapStrip)
{
    m_animationIcons = new Icon[bitmapStrip.Width / 16];
    for (int i = 0; i < m_animationIcons.Length; i++)
    {
        Rectangle rect = new Rectangle(i*16, 0, 16, 16);
        Bitmap bmp = bitmapStrip.Clone(rect, bitmapStrip.PixelFormat);
        m_animationIcons[i] = Icon.FromHandle(bmp.GetHicon());
    }
}

Для анимации кадра StartAnimation, запускает таймер, и в таймере значки изменяются для анимации целой последовательности.

public void StartAnimation(int interval, int loopCount)
{
    if(m_animationIcons == null)
        throw new ApplicationException("Animation clip not set with    
                                        SetAnimationClip");

    m_loopCount = loopCount;
    m_timer.Interval = interval;
    m_timer.Start();
}

private void m_timer_Tick(object sender, EventArgs e)
{
    if(m_currIndex < m_animationIcons.Length)
    {
        m_notifyIcon.Icon = m_animationIcons[m_currIndex];
        m_currIndex++;
    }
    ....
}

Используя SysTray

Создают и обеспечивают электричеством Ваше меню

ContextMenu m_menu = new ContextMenu();                                   
m_menu.MenuItems.Add(0, new MenuItem("Show",new
                     System.EventHandler(Show_Click)));

, Получают значок, который Вы хотите показать статически в лотке.

Создают объект SysTray со всей запрошенной информацией

m_sysTray = new SysTray("Right click for context menu",
            new Icon(GetType(),"TrayIcon.ico"), m_menu);

, Создают полосы изображения с кадрами анимации. Для 6 полос кадра изображение будет иметь ширину 6*16 и высота, поскольку 16 пикселей

Bitmap bmp = new Bitmap("tick.bmp");
// the color from the left bottom pixel will be made transparent
bmp.MakeTransparent();
m_sysTray.SetAnimationClip(bmp);

Запускают анимацию, указывающую, сколько раз необходимо циклично выполнить анимацию и задержку кадра

m_sysTray.StartAnimation(150, 5);

Для остановки вызова анимации

m_sysTray.StopAnimation();
23
ответ дан 30 November 2019 в 21:29
поделиться

Я думаю лучший способ сделать, это должно иметь несколько маленьких значков, которые можно продолжить изменять объект systray на новое изображение на основе скорости и время.

3
ответ дан 30 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: