Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Створення класу 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, ви зможете користуватися " інтелектуальними формами" у своїх застосуваннях.

    А тепер я розповім про один інструмент, який спрощує процес візуального проектування і створення класів.






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.