Зустрічний рух тексту

Створити проект в якому на формі розмістити дві стрічки тексту. При запуску програми вони рухатимуться назустріч одна одній. Зі зменшенням відстані – швидкість їх руху також зменшуватиметься, і навпаки. Процес має повторюватись до вимкнення форми.

Для реалізації цього проекту нам потрібно лише форма та таймер. Отже запустимо середовище програмування Visual Studio 2010, створимо новий проект, який назвемо Текст назустріч. В дизайнері форм перенесемо на форму один елемент керування Timer. Всі властивості елементам керування ми надаватимемо, за звичаєм, програмним методом. Тому натиснувши клавішу <F7>, переходимо  в редактор коду. Для початку нам потрібно оголосити декілька глобальних змінних. Зокрема: 

  • змінні для визначення горизонтальної координати обох рядків тексту, 
  • змінну для визначення відстані між ними
  • змінну для встановлення швидкості руху рядків тексту,
  • змінні для створення стилю шрифтів та виведення графічних об’єктів на форму,
  • а також константу для визначення швидкості руху.

Проект працюватиме поки працює таймер. Причому нам потрібно створити два порожніх обробника подій: завантаження форми (Form1_Load) та виконання таймера (Timer1_Tick), отримати їх можна двічі клікнувши лівою кнопкою миші на потрібному елементі.

Повний код проекту наведено нижче:

 Public Class Form1

    'Проект виводить на екран два рядки тексту, які рухаються назустріч один одному,

    'коли відстань між ними зменшується, зменшується і швидкість їх руху

 

    'Оголосимо змінні для задання горизонтальних координат кожного рядкка:

    Dim x1 As Single

    Dim x2 As Single

    'Створюємо графічну змінну та змінну для формату тексту

    Dim g As Graphics

    Dim f As Font

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

    Dim dist As Single

    'Константа для зміни швидкості

    Private Const Speed As Single = 0.1

    'Змінна для визначення швидкості руху рядків тексту

    Dim movement As Single

 

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

                            Handles MyBase.Load

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

        Me.Text = "Зустріч тексту"

        Timer1.Interval = 40

        Me.Width = 600

        Me.Height = 100

        'Створимо поле для виведення тексту

        g = Me.CreateGraphics()

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

        x1 = Me.Width

        x2 = -100

        'Створюємо новий формат для тексту

        f = New Font("Times New Roman", 14, FontStyle.Bold, GraphicsUnit.Point)

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

        Timer1.Start()

    End Sub

 

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

                            Handles Timer1.Tick

        'Очищуємо поле форми

        g.Clear(BackColor)

        'Виводимо два текстових написи, використовуючи координати х1 та х2 відповідно

        g.DrawString("Цікаве ", f, Brushes.Blue, x1, 10)

        g.DrawString("програмування", f, Brushes.BlueViolet, x2, 35)

        'Визначаємо відстань між текстовими стрічками:

        dist = Math.Abs(x1 - x2)

        'Задаємо швидкість руху тексту

        movement = Speed * dist

        'Щоб текст не зупинився, визначаємо мінімальну швидкість

        If movement < 1 Then movement = 1

        'Змінюємо координати тексту відповідно до визначеної швидкості руху

        x2 = x2 + movement

        x1 = x1 - movement

        'Коли текст виходить за межі форми, задаємо деяке початкове значення координат

        If x2 > Me.Width Or x1 < -1000 Then

            x2 = -270

            x1 = 725

        End If

    End Sub

End Class

 

 Код проекту, на мою думку, є достатньо зрозумілим. Для початку знаходимо відстань між текстовими стрічками шляхом віднімання їх координат (обов’язково використовуємо модуль різниці). Потім отримане значення перемножимо на деяку обрану константу (speed), відповідно чим більша відстань між рядками – тим більшим буде наш добуток (швидкість movement). Щоб рядки не зупинились повністю (змінна dist = 0), вводимо деяке обмеження для мінімальної швидкості. Тобто, завжди коли швидкість стає меншою 1, ми їй примусово надаємо значення 1. Даний проект є досить простим для реалізації, а отриманий ефект має цікавий та привабливий вигляд на екрані: