Студопедия

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

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

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






Создание класса 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. Вставьте следующий фрагмент в секцию (General) (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.

 

ПОДСКАЗКА Средства поиска и замены Visual Basic IDE играют чрезвычайно важную роль (впрочем, как и в любом текстовом редакторе), поэтому вам следует освоить их. Эти средства оказываются особенно полезными при изменении имен элементов в большом проекте.

 

21. Добавьте следующий метод в секцию (General)(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. Добавьте следующий метод в секцию (General)(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

 

Чтобы наш класс позволял изменять размеры форм, в секцию (General) (Declarations) модуля класса следует включить метод Resize:

 

Public Sub ResizeO

' Все, что от нас требуется -

' сохранить координаты формы

SaveSettings

End Sub

 

23. Вставьте следующий фрагменте секцию (General) (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. Вставьте следующую строку в секцию (General)(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 значение Проверка.

 

ВНИМАНИЕ Каждый проект, в котором используется класс SmartForm, должен обладать уникальным именем. Дело в том, что формы идентифицируются по имени проекта. Если в нескольких одноименных проектах появятся одноименные формы, результат будет непредсказуемым.

 

Сохраните и запустите проект. На первый взгляд, наше приложение не производит особого впечатления. Попробуйте изменить размеры формы и сместить ее в угол экрана, после чего нажмите кнопку [х] и вернитесь в IDE. Запустите приложение заново. Если все было сделано верно, форма будет находиться в том же месте и иметь те же размеры, которые она имела на момент закрытия. Повторяя шаги 1—5, вы сможете пользоваться «интеллектуальными формами» в своих приложениях.

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

 






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