Вы можете определить словарь, ключ как прописные буквы и значение как всевозможную комбинацию этого символа.
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
сообщение в блоге Abhinaba Basu Анимация и текст в Системном лотке с помощью C# объясняют.
Это сводится:
, например,
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();
Я думаю лучший способ сделать, это должно иметь несколько маленьких значков, которые можно продолжить изменять объект systray на новое изображение на основе скорости и время.