Анімована стрічка

Створити проект в якому реалізувати можливість роботи з текстом, а саме примусити текст мітки з’являтись посимвольно при натисненні кнопки СТАРТ та зупиняти анімацію при натисненні кнопки СТОП. Крім того передбачити можливість вибору напрямку анімації тексту.

Для початку завантажимо Visual Studio 2010 та обиремо пункт меню Файл – Создать проект (File | New | Project). У наступному вікні New Project обираємо пункт Visual Basic, а потім в області шаблонів (середня колонка) обираємо шаблон (Templates) Windows Forms Application. В якості назви проекту введемо імя Анімація тексту і натискаємо кнопку ОК.

Для реалізації поставленої задачі нам необхідно помістити на форму дві кнопки Button, текстову мітку Label, два перемикачі RadioButton та таймер Timer. З панелі елементів керування Toolbox перемістимо на форму всі вказані елементи керування. В результаті ви маєте отримати, форму такого вигляду як вказано на рис.1:

Тепер напишемо програмний код для реалізації поставленої мети:

 Public Class Form1

     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                            Handles MyBase.Load

        'Задаємо початкові властивості елементам керування:

        Me.Text = "Анімація тексту"

        Label1.Text = "Програмування - це цікаво!"

        Label1.Font = New Font("Courier New", 12.0F, FontStyle.Italic)

        Label1.ForeColor = Color.BlueViolet

        Button1.Text = "Старт"

        Button2.Text = "Стоп"

        RadioButton1.Text = "Зліва направо"

        RadioButton2.Text = "Зправа наліво"

        'Задаємо інтервал спрацювання таймера:

        Timer1.Interval = 200

        'Зробимо доступною лише кнопку Старт:

        Button1.Enabled = True

        Button2.Enabled = False

    End Sub

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                        Handles Button1.Click

        'Запускаємо таймер

        Timer1.Enabled = True

        'Змінюємо видимість кнопок

        Button1.Enabled = False

        Button2.Enabled = True      

    End Sub

 

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                                Handles Button2.Click

        'Зупиняємо таймер

        Timer1.Enabled = False

        'Змінюємо видимість кнопок

        Button1.Enabled = True

        Button2.Enabled = False       

    End Sub

 

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                            Handles Timer1.Tick

        'Оголосимо змінну в якій зберігатимемо текст мітки:

        Dim title As String = "Програмування - це цікаво!"

        'Оголосимо змінну для визначення кінця стрічки

        Static kinPos As Integer = title.Length()

        'Оголосимо змінну для визначення початку стрічки

        Static pochPoz As Integer = 0

        'Перевіряємо який напрям анімації задано

        If RadioButton1.Checked = True Then

            'Виводимо змінну title в мітку, до певної позиції pochPoz

            Label1.Text = title.Substring(0, pochPoz)

            pochPoz += 1 'Змінюємо значення початкової позиції на 1

            'Якщо вся стрічка надрукована, починаємо все з початку:

            If pochPoz = title.Length() + 1 Then pochPoz = 0

        ElseIf RadioButton2.Checked = True Then

            'Аналогічно до першого випадку реалізуємо анімацію тексту в зворотному порядку

            Label1.Text = title.Substring(0, kinPos)

            kinPos -= 1

            If kinPos = -1 Then kinPos = title.Length()

        End If

    End Sub

End Class 

 Як видно з лістингу, кнопка з написом СТАРТ запускає таймер та стає недоступною, разом з тим відображається кнопка СТОП, яка діятиме навпаки.  Вся робота по створенню анімаційного ефекту відбувається в події таймера Tick. Тут спочатку створимо змінну title, в якій зберігатимемо текст мітки, потім оголосимо змінну pochPoz, яку використовуватимемо для нарощування тексту мітки (відмітимо, що ця змінна оголошується як Static). Далі за допомогою методу Substring класу String ми нарощуємо стрічку, починаючи з першого символу і закінчуючи останнім.  Після чого обнуляємо лічильник та починаємо все з початку. В будь який момент часу ми можемо зупинити виконання анімації, та повторно запустити її з того самого місця.

Для реалізації зворотної анімації нам необхідно оголосити ще один лічильник kinPoz, але на цей раз його початкове значення не рівне нулю, а дорівнює довжині стрічки тексту, яку знаходимо застосовуючи метод Length() до змінної title. Причому, тепер лічильник потрібно не збільшувати, а навпаки – зменшувати. Коли лічильник стає рівним нулю, йому знову потрібно присвоїти значення довжини стрічки та почати все з початку.

Вибір напряму анімації здійснюється з використанням двох перемикачів RadioButton шляхом перевірки умови їх ввімкнення.

Дану задачу можна розвязати використавши лише одну кнопку Button. Для цього використаємо наступний фрагмент для обробки події кліку на кнопці:

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                        Handles Button1.Click

        If Button1.Text = "Старт" Then

            Timer1.Enabled = True

            Button1.Text = "Стоп"

        ElseIf Button1.Text = "Стоп" Then

            Timer1.Enabled = False

            Button1.Text = "Старт"

        End If

End Sub

 В результаті ми отримали проект, який має вигляд: