- •Лабораторна робота №8-10. Тема: Розробка інтерфейсу користувача
- •Приклад mdi-інтерфейсу
- •Інтерфейс типу провідника
- •Редактор меню Menu Editor
- •Властивості меню для mdi-інтерфейсу
- •Властивості, що визначають стан пункту меню
- •Контекстне меню
- •Приклад створення меню
- •Рядок стану
- •Приклад створення рядка стану
- •Панель інструментів
- •Властивості панелі інструментів
- •Приклад створення панелі інструментів
- •Діалогові вікна
- •Вікно повідомлення
- •Icon - відображуваний поруч з текстом значок. Може приймати одне з значень (див. Таблицю нижче) перерахування MessageBoxIcon;
- •Діалогове вікно відкриття файлу
- •Діалогове вікно збереження файлу
- •Діалогове вікно налаштування шрифтів тексту
- •Діалогове вікно налаштування колірної палітри
- •Робота з картинками
- •Зображення, як властивість Image елемента управління
- •Малюємо картинки
- •Спосіб 2.
- •Метод DrawImage і його варіанти
- •Метод Save об'єкта Bitmap
- •Малюємо в пам'яті
- •Перемальовування картинок, фігур і тексту
- •Завдання
Перемальовування картинок, фігур і тексту
Ви, напевно, давно вже звернули увагу на такий факт. Якщо форма з намальованими фігурами (не в події Paint), картинками або написаним текстом ховається з поля зору, закрита іншими вікнами, то коли ми знов її отримуємо з-під інших вікон, то бачимо, що намальовані картинки, фігури і текст стерлися. Якщо ми частину форми затягнули за край екрану, то стирається все, що було намальоване і написане на цій частині, що сховалася за край екрану. Загалом, стирається все те, що пропадає з поля зору.
Але якщо картинка знаходиться на елементі управління як його властивість Image, то вона не стирається. Стирається лише те, що намальоване.
Подія Paint. У якому випадку ми можемо відмітити, що на формі щось стерте? Напевно, тоді і тільки тоді, коли в полі нашого зору на екрані з'являється ділянка форми (нехай навіть найменша), яка була до цього з тієї або іншої причини прихована (і тому з неї все було стерто).
Завдання VB – створити у нас ілюзію, що нічого не стирається. Для цього шлях один – як тільки така ділянка із стертою інформацією виникає в полі зору, одразу її знову замальовувати «як було», щоб людина не встигала нічого помітити. Проте, сам VB замальовувати нічого не збирається, він надає можливість зробити це програмістові. Для чого в допомогу йому VB надає подію Paint. Ця подія наступає якраз тоді, коли в полі зору на екрані з'являється ділянка форми (нехай найменша), яка була до цього прихована. Якщо ви, наприклад, поволі витягуєте форму із-за краю екрану або поволі збільшуєте її висоту або ширину, то кожну найменшу частку секунди в полі зору з'являються «стерті» ділянки, а значить, наступає подія Paint. Виходить, що в даному випадку подія Paint наступає багато раз в секунду.
Раз є подія, означає є і процедура-обробник цієї події. Все, що повинен зробити програміст, це отримати у вікні коду звичайним способом заготівку цієї процедури і записати в неї оператори малювання всіх фігур і всього тексту на формі, які він хоче зберегти від стирання. За принципом: якщо огорожа в одному місці забруднилася – перефарбовуй всю огорожу.
Створіть проект з кнопкою. Введіть у вікно коду такий текст:
Dim Гр As Graphics = Me.CreateGraphics
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Гр.DrawEllipse(Pens.Black, 20, 20, 80, 100)
End Sub
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Гр.DrawRectangle(Pens.Black, 10, 10, 200, 100)
End Sub
Запустіть проект. Ви бачите, що квадрат вже на формі, не дивлячись на те, що ніяких кнопок ви не натискали. Відбулося це тому, що подія Paint вже встигла спрацювати при появі форми на екрані. Клацніть по кнопці Button1. З'явився ще і кружок. Тепер засуньте форму частково за лівий край екрану і знову висуньте. Ви побачите, що частина круга стерта, а квадрат неначе і не стирався (див. малюнок нижче).
Насправді він чудово стерся, але при висуненні форми із-за краю екрану багато раз в секунду наступала подія Paint і він кожного разу малювався знову. Причому малювався настільки швидко, що людське око не встигало цього відмітити.
Отже, ми бачимо, що влада над тим, яким фігурам стиратися, а яким ні, знаходиться повністю в руках програміста. Тому, якщо ви хочете, щоб фігури не стиралися, розташовуйте оператори для їх малювання в обробник події Paint.
Подія Paint є не тільки у форми, але і у елементів управління. Можете перевірити його, наприклад, на мітці.
Ми можемо штучно викликати подію Paint і, отже, перемальовування поверхні форми або елементу управління, застосовуючи їх метод Refresh. Наприклад, так:
Me.Refresh()
Image не стирається. Очевидний такий спосіб боротьби із стиранням. Ми малюємо все, що нам потрібне, в пам'яті на об'єкті Bitmap, а потім присвоюємо отриманий Bitmap властивості Image елемента управління.
Приклад: При натисканні кнопки ми малюємо лінію на об’єкті Bitmap (його розміри дорівнюють розмірам елемента PictureBox), а потім властивості Image надаємо значення – об’єкт Bitmap, який вже містить намальовану нами лінію.
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim t As New Bitmap(PictureBox1.Width, PictureBox1.Height)
Dim d As Graphics = Graphics.FromImage(t)
d.DrawLine(Pens.Red, 0, 0, 50, 50)
PictureBox1.Image = t
End Sub