Мир программирования на Visual BASIC и HTML
Информация
  SnoozeX Design
  VB Проекты
  Архив рассылки
  Рассылка

Спонсоры
  Городской кот
  Subscribe.Ru
  Russian Surf

Ссылки
  VB Streets
  Visual BASIC
  VB: Step by Step
  SnoozeX Design
  СообЧа

VB Форумы
WEB:
  VBS Форум
  Ru.Visual.Basic
Mail:
  VBStreets
  СообЧа: VB
  подписка - пустое   письмо в VB группу

Доска почета
  Sergey VIMBERG
  Олег
  Oleg Palayda
  BSP
  Евгений

Вопросы
  Автору
  По VB
  По HTML

Кнопки

Рассылка 'Мир программирования на Visual BASIC и HTML.'

мы в режиме:

SUPERTOP

SnoozeX Design
Несколько слов от автора: Здравствуйте. Ловите очередной выпуск.
Ваши пожелания:


E-Mail для ответа:   

ПРИМЕЧАНИЕ: Выпуски данной рассылки начиная с первого вы сможете прочитать на http://subscribe.ru/archive/comp.design.snoozex/    @LEXis

2.03.2001 Выпуск N19 Обзор ведет @LEXis

 Сегодня в выпуске:

# Приемы с Windows на VB
:
Балуемся с кнопкой "ПУСК"
# Практикум на примерах:
Классы в Visual BASIC (Часть 2 - Создание класса)
# В разделе "вопросы/ответы":
Ответы на вопросы читателей
# Рубрика "Объявления"


 Приемы с Windows на VB
Балуемся с кнопкой "ПУСК"

Вот привожу еще один примерчик.

4 Кнопки с именами по умолчанию

И добавте следующий код:

'----
Option Explicit
Dim hwndChild As Long
Const SW_HIDE = 0
Const SW_SHOW = 5
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
    (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, _
     ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function EnableWindow Lib "user32" Alias "EnableWindow" _
    (ByVal hWnd As Long, ByVal fEnable As Boolean) As Long
Private Declare Function ShowWindow Lib "user32" Alias "ShowWindow" _
    (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Sub Form_Load()
    Me.Caption = "Start button"
    Command1.Caption = "Hide"
    Command2.Caption = "Show"
    Command3.Caption = "Enabled"
    Command4.Caption = "Disabled"

    hwndChild = FindWindowEx(FindWindow("Shell_traywnd", ""), 0, "Button", "")
End Sub
Private Sub Command1_Click()
    ShowWindow hwndChild, SW_HIDE
End Sub
Private Sub Command2_Click()
    ShowWindow hwndChild, SW_SHOW
End Sub
Private Sub Command3_Click()
    EnableWindow hwndChild, True
End Sub
Private Sub Command4_Click()
    EnableWindow hwndChild, False
End Sub
'----

 Практикум на примерах
Классы в Visual BASIC (Часть 2 - Создание класса)

Евгений Февраль 2001

Привет всем!

Итак, приступим к созданию нового класса. Для удобства и быстроты понимания буду приводить в пример Сообчайлер (что это такое смотри в следующем номере).

Для начала определимся, зачем Сообчайлеру вообще нужен какой либо класс. Выше я говорил, что класс - это компонент многократного использования, шаблон. Что у нас в Сообчайлере будет многократно использоваться и иметь при этом свои свойства? Я думаю, это будут почтовые ящики - Box. Их будет много, пользователь будет постоянно добавлять новые, при этом у каждого почтового ящика будут свои свойства. Например Имя почтового ящика, Адрес POP3-сервера, Адрес SMTP-сервера, Пароль на сессию и пр.

Можно было бы сделать это все через массивы. Например, организовать массив имен ящиков, массив адреса POP3, адреса SMTP, массив паролей. Для первого ящика это выглядело бы так:

Name=BoxName(1)

SMTP=SMTPServer(1)

POP3=POP3Server(1)

Pass=Password(1)

И дальше в программе просто использовать эти массивы. Но это жутко неудобно. Во-первых, мы не знаем количество ящиков, которое захочет создать пользователь. Придется каждый раз менять границы массива. Вдобавок придется вводить переменные для хранения максимального числа элементов массива, чтобы мы могли объявлять циклы For I=1 To MaxNumberBoxs. Это лишний расход памяти. А как быть с удалением? Допустим, создал пользователь два ящика и захотел удалить последний. Окей, мы исключаем последний элемент из всех массивов и меняем размер массива с помощью оператора ReDim. А как быть, если он захочет удалить первый ящик? Придется создавать еще по временному массиву на каждый из уже созданных, для их перезаписи без к.л. среднего элемента. Т.е. мы будем создавать временный массив, в который перепишем все элементы, кроме удаляемого, а затем из временного массива переписывать все это дело обратно. Это уже чревато двумя наиболее критичными проблемами: перерас! ход памяти (свойств-то много!) и увеличение времени быстродействия. Кому наша программа будет нужна, если при работе с десятью ящиками на удалении одного из них она будет тратить порядка минуты и при этом еще и занимать в памяти 20 Мб?

И, пожалуй, самое главное: А ЕСЛИ МЫ ЗАХОТИМ ДОБАВИТЬ НОВОЕ СВОЙСТВО? Для этого необходимо перелопатить весь набранный код. При этом обязательно мы где-то забудем это сделать. Как результат - баги. Время на их исправление. Морока с массивами. Короче я сомневаюсь, что мы вообще сможем в таком случае дописать программу до конца. Просто не хватит терпения. А ведь есть еще и папки (Folder), которые тоже имеют свои свойства… А еще сообщения… Мрачная картина вырисовывается…

НО! Мы можем создать класс (шаблон) clsBox. И по этому шаблону создавать почтовый ящик. Создадим свой первый класс - класс почтового ящика. Можно вручную добавить модуль класса через меню Project/Add Class Module выбрав в появившемся меню Class Module или сделать это с помощью построителя классов, выбрав VB Class Builder в том же меню. Выберем второе, чтобы не удаляться далеко в дебри создания классов.

Вылезет меню построителя классов. Создадим новый класс при помощи меню File\New\Class или просто щелкнув на левой крайней иконке на панели инструментов. Зададим ему имя clsBox. Жмем ОК. Вот и добавили новый класс.

Теперь создадим несколько свойств. Для создания нового свойства щелкните по третьей кнопке на панели инструментов. Назовем это свойство BoxName - в нем будет храниться имя ящика. Выберем в Data Type значение String, т.к. имя ящика это символы. Оставим переключатель на Public Property - в следующих выпусках мы рассмотрим все подробнее. Жмем ОК. Все. Первое свойство готово. Добавим еще несколько свойств: POP3Server, SMTPServer и Password. Тип данных для всех будет String.

Все. Закрываем окно построителя классов. Выскочит окошко с предложением произвести изменения в проекте. Жмем ОК. Все. Класс готов к употреблению.

Для употребления необходимо объявить его в своей программе

Dim Box As New clsBox

Что в переводе означает: объявить Box как новый экземпляр класса clsBox. При этом данный экземпляр класса clsBox будет иметь все только что созданные свойства. Наберите Box и нажмите точку. ВИДИТЕ??? Появился список с перечислением свойств, совсем как для текстового поля!!!! Теперь вы можете оперировать с этими свойствами. Например, так

Box.BoxName = "Verter"

Debug.Print Box.BoxName

Таким образом, вы можете создать экземпляр для второго ящика:

Dim Box2 As New clsBox

И использовать:

Box2.POP3Server = "compnet.dgrad.ru"

Debug.Print Box2.POP3Server

Для третьего - Dim Box3 As New clsBox и т.д.

Для уничтожения ящика просто применить Box2 = Nothing

Попробуйте добавить это:

Box2 = Nothing

Debug.Print Box2.POP3Server

У вас произойдет ошибка, ибо мы сперва уничтожили объект под именем Box2.

Но опять же немного неудобно создавать и удалять объекты. Надо самим задавать номер ящика. Необходимо создавать дополнительные переменные, для хранения числа ящиков. Разные имена у объектов… Неудобно.

Чтобы создавать много почтовых ящиков по этому классу с одним именем, необходимо создать коллекцию почтовых ящиков. Это как коллекция марок. Коллекция позволяет создавать множество экземпляров класса с одним именем, каждый из которых будет иметь свои значения свойств. Это наподобие массивов элементов управления, если кто знает. Или те же марки. Их много, но у каждой своя картинка. Так и у нас - почтовых ящиков много, но свойства у всех свои.

Воспользуемся построителем классов. Для создания коллекции нажмем вторую слева кнопку на панели инструменты. Зададим ей имя colBoxes. Выберем справа в окошечке наш класс clsBox, для как базовый для нашей коллекции. Жмем ОК. Все, коллекция готова. Закрываем построитель и соглашаемся с изменениями.

Теперь мы можем создать коллекцию одного экземпляра класса clsBox и работать уже с ней.

Коллекции классов имеют стандартные методы:

Add - для добавления в коллекцию

Remove - для удаления

Item - номер элемента в коллекции

На остальных мы остановимся позже.

Объявим класс и коллекцию:

Dim classBox As New clsBox

Dim Box As New colBoxes

Чтобы добавить новый ящик в коллекцию просто наберите Box, нажмите точку и выберете метод Add из списка. Ну, а дальше выйдет контекстное меню, где будет перечислен порядок ввода свойств.

Box.Add "Verter", "compnet.dgrad.ru", "compnet.dgrad.ru", "password"

Добавим второй ящик

Box.Add "Allin", "mail.ru", "mail.ru", "password"

Третий…

Box.Add "Evgeniy", "chat.ru", "chat.ru", "password"

Теперь посмотрим POP3-сервер для второго ящика. Используем свойство Item.

Debug.Print Box.Item(2).POP3Server

Выведет mail.ru

Удалим второй ящик:

Box.Remove 2

Автоматически коллекция сдвинется на одну позицию. Теперь третий ящик станет вторым и

Debug.Print Box.Item(2).POP3Server

нам выдаст

chat.ru

Теперь у нас два ящика и

Debug.Print Box.Item(3).POP3Server

приведет к ошибке.

Все просто донельзя! И не надо мучаться с массивами!

Ну, пожалуй, на первый раз достаточно. Пишите в группу, если что-нибудь непонятно - будем вместе разбираться. Все дополнения/найденные ошибки/пожелания присылайте мне.


 Вопросы / Ответы
Вопрос от @LEXis`a
Здравствуйте,
Как снять изображение с экрана и сразу сохранить его в графический файл? Оченнннь надо. Плиз хелп.


 Объявления
Требуются люди
Хочу напомнить, что еще пусты многие вакансии рассылки:
- Рубрика "Рецензия книг"
- Рубрика "Практикум на примерах"
Также можно просто присылать коды.

Код моей кнопки: Код моей кнопки:

<!-- SnoozeX Design "PLAY" -->
<a href="http://snoozex.boom.ru" TARGET="_blank"><BR><IMG SRC="http://snoozex.boom.ru/new.gif" WIDTH=88 HEIGHT=31 BORDER=1 ALT="SnoozeX Design"></a>
<!-- SnoozeX Design "END" -->

Выпуск подготовили:                    
Евгений
@LEXis
@LEXis ICQ uin : 14912636
Подписаться на рассылку Кувалина Алексея
Мир программирования на Visual BASIC и HTML
© 2000 - 2001 @LEXis & Design by SnoozeX Design
Рассылка является составной частью проекта "СообЧа - СООБщество ЧАйников"
Сайт СообЧа: http://www.soobcha.ru/
Сайт группы по VB: www.soobcha-vb.narod.ru/
Подписаться на сообщество
© 2000 - 2001 СообЧа (СООБщество ЧАйников)
Спасибо за внимание. Ваш @LEXis

 

Home ] Up ] О группе ] Статьи ] Исходники ] Орфография ] Приёмы ] Проекты ]

Хостинг от uCoz