
- •5.05150104 "Дизайн друкованої продукції"
- •Робота з модулями і класами
- •Модулі і класи
- •Створення програмної бібліотеки
- •Створення модулів
- •Мал. 4.1. Діалогове вікно Add Procedure.
- •Прискорений спосіб додавання процедур
- •Процедури
- •Функції
- •Мал. 4.2. Вікно програми з функцією для обчислення кубічного кореня.
- •Мал. 4.3. Код виклику функції CubeRoot.
- •Мал. 4.4. Функція повертає кубічний корінь 3.
- •Мал. 4.5. Змінене вікно програми і форма.
- •Мал. 4.6. Новий варіант додатка. Тестування у вікні відпадки
- •Оновлення програмної бібліотеки
- •Передача параметрів
- •Мал. 4.7. Вікно додатка-прикладу.
- •Мал. 4.8. Зміна властивості Caption в програмі.
- •Ключове слово Optional
- •Ключове слово ByRef
- •Ключове слово ByVal
- •Ключове слово ParamArray
- •Ключові слова Public і Private
- •Закриті процедури (Private)
- •Мал. 4.9. Сім форм у вікні проекту.
- •Відкриті процедури (Public)
- •Робота з модулями класів
- •Властивості
- •Створення класу SmartForm
- •Використання Class Builder
- •Мал. 4.10. Утиліта Class Builder.
- •Мал. 4.12. Діалогове вікно Property Builder.
- •Мал. 4.13. Діалогове вікно Event Builder.
- •Мал. 4.14. Клас Person з властивостями, подіями і методами.
- •Що нового ми дізналися?
- •5. Створення і використання меню і панелей інструментів
- •Для чого потрібні меню і панелі інструментів
- •Мал. 5.1. Меню і панелі інструментів Visual Basic.
- •Об'єкт меню
- •Мал. 5.2. Редактор меню.
- •Властивості меню
- •Методи меню
- •Створення меню в редакторові меню
- •Мал. 5.3 Створення меню в редакторові меню.
- •Мал. 5.4. Працююче меню.
- •Проектування меню
- •Створення панелей інструментів
- •Мал. 5.5. Завдання властивості Style. Створення кнопок на панелі інструментів
- •Мал. 5.6. Форма із панеллю інструментів. Створення малюнків на кнопках
- •Мал. 5.7. Вставка растрових зображень в список зображень.
- •Мал. 5.8. Зв'язування панелі інструментів із списком зображень.
- •Мал. 5.9. Панель інструментів зі значками.
- •Використання вдосконаленої панелі
- •Мал. 5.11. Вкладка General в сторінках властивостей вдосконаленої панелі.
- •5.12. Вкладка Bands в сторінках властивостей вдосконаленої панелі.
- •Мал. 5.14. Вдосконалена панель у дії.
- •Що нового ми дізналися?
- •Урок 6. Логіка і послідовність виконання програми
- •Як "думає" комп'ютер?
- •Логічні оператори
- •Логічний оператор and
- •Логічний оператор eqv
- •Логічний оператор or
- •Логічний оператор xor
- •Логічний оператор not
- •Порівняння
- •Перевірка умови "рівно"
- •Мал. 6.1. Гра із вгадуванням числа
- •Перевірка умови "більше"
- •Мал. 6.2. Назване число більше за загадане.
- •Перевірка умови "менше"
- •Мал. 6.3. Назване число менше за загадане. Перевірка умови "не рівно"
- •Перевірка умови "більше або рівно"
- •Мал. 6.5. Перевищення граничної швидкості. Перевірка умови "менше або рівно"
- •Ухвалення рішень в програмі
- •Оператор If..Then..Else
- •Функція iIf
- •Оператор Select Case..End Select
- •Виконання дій, що повторюються
- •Цикл For..Next
- •Цикл Do..Loop
- •Цикл While..Wend
- •Перебір колекцій
- •Приклад використання циклів
- •Мал. 6.7. Створення команди меню.
- •Мал. 6.8. Створення масиву елементів.
- •Мал. 6.9. Форма з масивом текстових полів.
- •Мал. 6.10. Приклад роботи з циклами. Що нового ми дізналися?
- •Урок 7. Змінні
- •Перше знайомство із змінними
- •Що таке пам'ять?
- •Типи змінних
- •Байтові змінні
- •Строкові змінні
- •Puc. 7.3. Діалогове вікно Options.
- •Мал. 7.4. Вікно програми для прикладу.
- •Мал. 7.5. Вікно додатка-прикладу.
- •Універсальні змінні
- •Зона видимості змінних
- •Мал. 7.6. Зона видимості змінних.
- •Мал. 7.7. Форма для реєстрації користувачів.
- •Ключове слово Static
- •Мал. 7.8. Використання циклу For..Next.
- •Динамічні масиви
- •Константи
- •Мал. 7.10. Результат обчислення площі круга.
- •Що нового ми дізналися?
Створення класу SmartForm
Наступний приклад допоможе вам краще зрозуміти, як проектуються класи. Я використовую клас SmartForm для зберігання і отримання інформації про положення і розмір форм на екрані. Такі форми "запам'ятовують" своє положення і стан між запусками додатка. Коли усе буде готове, ви можете включити цей клас у свою програмну бібліотеку і використовувати його в майбутніх проектах!
1. Створіть новий проект командою File > New Project або поєднанням клавіш Ctrl+N.
2. У діалоговому вікні New Project, що відкрилося, виберіть значок Standard EXE.
3. Включите в проект новий модуль класу - для цього клацніть правою кнопкою миші у вікні проекту і виберіть команду Add > Class Module з контекстного меню.
4. У діалоговому вікні Add Class Module виберіть значок Class Module і натисніть кнопку Open.
5. У вікні властивостей задайте властивості Name створеного класу значення Smart Form.
6. Двічі клацніть на формі Smart Form у вікні проекту, щоб відкрити для неї вікно програми.
7. Вставте наступний фрагмент в секцію(Declarations) модуля класу:
Option Explicit
'Закриті змінні
Private mForm As Object
Private mLeft As Long
Private mTop As Long
Private mWidth As Long
Private mHeight As Long
Private mWS As Integer
Public Event ErrorMessage(Message As String)
Ці закриті змінні відносяться тільки до цього класу і недоступні за його межами. Працювати з ними можна тільки через інтерфейс класу. Подія
ErrorMessage оголошене відкритим (Public).
8. Додайте в клас нову властивість командою Tools > Add Procedure.
9. Коли на екрані з'явиться діалогове вікно Add Procedure, введіть в поле Name рядок Form.
10. Встановіть перемикач Property і залиште перемикач Scope в положенні Public.
11. Завершіть створення властивості кнопкою ОК. У програмний модуль будуть додана дві процедури подій: Public Property Get Form() і Public Property Let Form(ByVal vNewValue As Variant).
12. У рядку
Property Let Form(ByVal vNewValue As Variant)
замініть ключове слово Let на Set. Рядок набере наступного вигляду:
Property Set Form(ByVal vNewValue As Variant)
13. Вставте наступний рядок в процедуру Property Get Form():
Form = mForm
14. Вставте наступний рядок в процедуру Property Set Form..:
Set mForm = vNewValue
Оскільки в наших процедурах параметри мають тип Variant, ми скористаємося засобами пошуку і заміни IDE і замінимо його типом Object.
15. Натисніть Ctrl+H, щоб викликати діалогове вікно пошуку і заміни тексту.
16. Введіть в поле Find What слово Variant.
17. Введіть в поле Replace With слово Object.
18. Якби пошук і заміну вимагалося виконати в усьому застосуванні, ми б встановили перемикач Current Project. Оскільки нас цікавить тільки поточний модуль класу, Встановіть перемикач Current Module.
19. Натисніть кнопку Replace All, щоб замінити в цьому модулі усі типи Variant типами Object. В результаті будуть здійснена дві заміни.
20. Закрийте діалогове вікно кнопкою Cancel.
21. Додайте наступний метод в секцію(Declarations):
Private Sub SaveSettings()
Dim mAppName As String
' Присвоїти змінній ім'я ЕХЕ-файлу
mAppName = App.EXEName
'Інформацію можна зберегти лише при відомому
' імені додатка і імені форми..
With mForm
If .Name <> "" Then
SaveSetting mAppName, .Name, _
""WindowState", Str$(.WindowState)
If .WindowState = vbNormal Then
SaveSetting mAppName, .Name, _
""Left", Str$(.Left)
SaveSetting mAppName, .Name, _
""Top", Str$(.Top)
SaveSetting mAppName, .Name, _
""Width", Str$(.Width)
SaveSetting mAppName, .Name, _
""Height", Str$(.Height)
End If
Else
' Ініціювати подію ErrorMessage
RaiseEvent ErrorMessage("Необхідно задати " _
""об'єкт форми"!)
End If
End With
End Sub
Основна частина роботи виконується за допомогою команди SaveSetting. Ця вбудована команда Visual Basic дозволяє зберегти значення в системному реєстрі, не звертаючись до Windows API.
22. Додайте наступний метод в секцію(Declarations) класу:
Private Sub GetSettings()
Dim mAppName As String
'Присвоїти змінній ім'я ЕХЕ-файлу
mAppName = App.EXEName
With mForm
If .Name <> "" Then
mLeft = Val(GetSetting(mAppName, _
..Name, "Left", .Left))
mTop = Val(GetSetting(mAppName, _
..Name, "Top", .Left))
mWidth = Val(GetSetting(mAppName, _
..Name, "Width", .Left))
mHeight = Val(GetSetting(mAppName, _
..Name, "Height", .Left))
'Змінити розмір форми
..WindowState = mWS
..Move mLeft, mTop, mWidth, mHeight
Else
'Ініціювати подію ErrorMessage
RaiseEvent ErrorMessage("Необхідно задати "
""об'єкт форми"!)
End If
End With
End Sub
Щоб наш клас дозволяв змінювати розміри форм, в секцію(Declarations) модуля класу слід включити метод Resize:
Public Sub ResizeO
' Усе, що від нас потрібно -
' зберегти координати форми
SaveSettings
End Sub
23. Вставте наступний фрагменті секцію(Form [Property Set]):
Public Property Set Form(ByVal vNewValue As Object)
'Створити посилання на реальний об'єкт форми
Set mForm = vNewValue
'Отримати збережені координати
GetSettings
'Виконати першу зміну розміру
Resize
End Property
24. Залишається лише навчити клас зберігати значення параметрів і знищувати посилання при вивантаженні об'єкту форми. Для цього в процедуру події Class_ Terminate() вставляється наступний фрагмент:
Private Sub Class_Terminate()
'Зберегти параметри форми
SaveSettings
'Знищити локальне посилання на об'єкт
Set mForm = Nothing
End Sub
25. Ми ввели досить великий об'єм коду - настав час зберегти файл. Натисніть Ctrl+S, і коли на екрані з'явиться діалогове вікно Save As, вкажіть в полі Save In ім'я каталогу своєї програмної бібліотеки (якщо ви створили її).
26. Натисніть кнопку Save, щоб зберегти клас.
Поздоровляю! Ви тільки що створили універсальний модуль класу. Цей модуль можна використовувати в будь-яких проектах, що містять форми, а його підключення до форм вимагає мінімального об'єму коду. Давайте подивимося, як це робиться:
1. Двічі клацніть на формі Form! у вікні проекту, щоб відкрити вікно програми для форми.
2. Вставте наступний рядок в секцію(Declarations) форми:
Option Explicit
Private WithEvents sf As SmartForm
Як говорилося раніше, ключове слово WithEvents повідомляє Visual Basic про необхідність виведення подій класу у вікні програми. В результаті ви зможете вибрати sf із списку Object, що розкривається, в лівому верхньому кутку вікна програми.
3. Перейдіть до процедури події ЕггоrMessage і вставте в неї наступний рядок:
Private Sub sf_ErrorMessage(Message As String)
MsgBox Message
End Sub
По команді MsgBox Visual Basic створює діалогове вікно повідомлення для виведення інформації. Змінна Message передається цій функції як параметр.
4. Щоб скористатися об'єктом класу SmartForm (sf), необхідно його створити. Інакше кажучи, об'єкт має бути створений на базі шаблону, описаного в модулі класу. Для цього в процедуру події Form_Load() форми Form1 додається наступний фрагмент:
Private Sub Form_Load()
Set sf = New SmartForm
Set sf.Form = Me
End Sub
5. При зміні розмірів форми треба наказати об'єкту SmartForm запам'ятати розмір і положення форми. Вставте наступний фрагмент в процедуру події Form_Resize:
Private Sub Form_Resize()
sf.Resize
End Sub
6. Нарешті, при закритті форми слід знищити об'єкт sf. Вставте наступний рядок в процедуру Form_Unload():
Private Sub Form_Unload(Cancel As Integer)
Set sf = Nothing
End Sub
7. Клацніть на рядку Projectl у вікні проекту і задайте властивості Name значення Перевірка.
Збережете і Запустіть проект. На перший погляд, наше застосування не справляє особливого враження. Спробуйте змінити розміри форми і змістити її в кут екрану, після чого натисніть кнопку [х] і поверніться в IDE. Запустіть додаток наново. Якщо усе було зроблено вірно, форма знаходитиметься в тому ж місці і матиме ті ж розміри, які вона мала на момент закриття. Повторюючи кроки 1-5, ви зможете користуватися "інтелектуальними формами" у своїх застосуваннях.
А тепер я розповім про один інструмент, який спрощує процес візуального проектування і створення класів.