Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование на Visual Basic и Active Server Pages #19


Служба Рассылок Subscribe.Ru проекта Citycat.Ru
VBS Newswire

VBS Newswire

#19

http://vbstreets.ru
>>> В этом выпуске:

1) Новости сайта
2) Результаты всенародного голосования
3) 100 новых тем на http://forum.vbstreets.ru
4) Статья: Поддержка компонент в приложениях

>>> Новости сайта

  • 21.04.2001
    Итак, начнем по порядку. Мною (в смысле модератором ;) написана статья о том, как можно писать программы, основанные на компонентах. Рекомендую для прочтения всем без исключения. Лежит тут. Реализация настоящих потоков на VB, равно как и ворох функций API вместе с VB'шной версией FileComparer (сравниватель файлов) плюс пример искуственного интеллекте лежат в разделе «Исходники программ». В разделе «ActiveX | Прочее» - меню с иконками, а также компонент для построения диаграмм и любимый мною splitter. В разделе «Игры» также пополнение - игра Nim.
  • 14.04.2001
    В разделе «ActiveX | Прочее» два добавления -- набор из 5 контролов PK Controls (в основном графических), любезно предоставленных Pawel Kazakow, а также неплохая реализация индикатора уровня звукового сигнала (a-la Winamp) -- правда, требует небольшой доработки. В разделе «Игры» появилась одна из наилучших реализаций тетриса на Visual Basic (имхо). Ну и напоследок 2 обновления в разделе «Исходники программ» - EasyRegistry (изменение скрытых настроек Windows) и пример docking'а. Обновлен раздел «Ссылки». Два новых проекта в разделе «Жители - Наши проекты». Открыт новый форум, опять же по просьбам трудящихся - «VBA».

>>> Результаты всенародного голосования

Какой технологией доступа к данным Вы пользуетесь?

а) DAO - 54 (31%)
б) ADO - 86 (50%)
в) RDO - 2 (1%)
г) Другой - 6 (3%)
д) Не работаю с базами данных - 24 (14%)

Всего приняло участие: 172 человек(а)

Оставь и свой голос! http://vbstreets.ru

>>> 100 новых тем на http://forum.vbstreets.ru

Список всех форумов | Visual Basic | Active Server Pages | Базы данных | ActiveX | Мультимедия | Visual Basic для новичков | Работа | Досужие дискуссии

21.04 15:41 Бэн, это Данила! Ай нид ХЕЛП!!!
21.04 14:37 Касательно HDC...
21.04 13:07 Выполню любой сложности работы на VBA for Excel
21.04 11:08 Документация
21.04 06:13 IE
21.04 06:13 IE
21.04 05:23 Уважаемые Гуру VB помогите пожалуйста с ActiveX Controlom
21.04 04:48 Уважаемые Гуру VB, помогите пожалуйста с ActiveX Controlom
20.04 21:24 Dos & Vb
20.04 20:33 Опять про вывод на экран. Никто не знает что ли? =(
20.04 18:11 Открытие dos-текстовиков!
20.04 18:11 Открытие dos-текстовиков!
20.04 17:18 Как присвоить программе ...
20.04 16:55 Ошибка При Компиляции OCX
20.04 15:24 где найти vbaledit.ocx ???
20.04 15:08 ASP-Вопрос! СРОЧНО!!!! :-((
20.04 02:44 Play *.mod in VB???
19.04 22:09 Макрос для вставки пробелов
19.04 21:16 Picture
19.04 20:31 Где AURAN JET????
19.04 20:16 До-сих-пор не знаю как...
19.04 20:12 сообщение "wait. loading..."
19.04 17:33 Picture in the menu
19.04 17:18 global.asp
19.04 16:52 DHTML
19.04 16:42 Как выделенные данные из MSFlexGrid скопироватьв буфер обмена??
19.04 16:12 VB || VC
19.04 15:30 Анализ HTML-тегов посредством VB
19.04 10:51 Progect > Components недоступно :(
19.04 10:22 Setup
19.04 06:36 Справочник VB(RU)
18.04 23:20 два в одном
18.04 22:08 Как сохранять данные в файл в форматированном виде!
18.04 20:18 информация по DirectX
18.04 18:31 конвертирование пути из windows в DoS !!!
18.04 18:31 конвертирование пути из windows в DoS !!!
18.04 18:31 куплю диплом на vb
18.04 18:01 SMTP
18.04 16:47 Loading...
18.04 16:27 Вывод изображения поверх игры
18.04 16:26 MultiPage
18.04 15:17 Кто скажет как изменить фон на странице написания кода?
18.04 13:00 fps или ... кадры в секунду ...
18.04 11:25 Кодировка txt в TDC !!!
18.04 06:38 Вопрос по DAO и ADO
18.04 05:01 Отдых в Египте по эксклюзивным ценам.
18.04 00:17 Заставить ASP выводить на экран
17.04 20:35 Заставка для игры
17.04 20:01 Об Dark Basic
17.04 19:59 Об .3ds & .x
17.04 19:49 @@IDENTITY возвращает NULL
17.04 19:48 @@IDENTITY возвращает NULL
17.04 19:48 @@IDENTITY возвращает NULL
17.04 17:43 Как определить группу NT зная логин пользователя
17.04 17:09 ADMINU
17.04 16:19 object("Word.Application")
17.04 15:02 Объект для отображения структурных формул
17.04 14:20 Касательно HDC...
17.04 14:08 VB & Crystal 8
17.04 12:55 Nuzhen ActiveX dlia raboty s audio/video failami
17.04 01:24 Помогите распечатать Html в WebBrowser
16.04 20:34 Скачивание курса доллара из интернета
16.04 19:32 Sleep in VBS
16.04 17:32 Скачивание курса доллара из интернета
16.04 14:25 хочу простое белое окошко
16.04 13:59 Русские буквы в DOS-овской базе
16.04 12:02 Как спрятать таскбар?
16.04 12:02 Как спрятать таскбар?
16.04 11:21 VB: Инсталляция программы на комп...
16.04 04:32 Классы
16.04 00:34 БД Access (ну очень надо!!!)
16.04 00:15 Question?
15.04 23:05 RichTextBox and Animation
15.04 20:56 Как програмно создать ярлык
15.04 19:25 для Alexander Anikin (Popupmenu)
15.04 19:24 для Alexander Anikin
15.04 19:19 Кто знает как управлять передачей данными по модему через MsComm Control 6.0???
15.04 15:19 Нужна помощь по VBScript. Помогите?
15.04 10:10 блокировка клавиатуры
14.04 21:08 Popupmenu
14.04 20:27 Я на счет меню как в офисе 2002
14.04 18:39 Помогите пжлста....
14.04 12:46 Кто-нибудь помогите, с места сдвинуться не могу
14.04 11:38 Итак, вопрос! Shortcutkey for a macro
14.04 11:13 Добро пожаловать в ...
14.04 10:21 Для Виталия Иванова
14.04 04:52 Как узнать, нажаты ли одновременно 2 шифта, через API?
14.04 04:52 Классы
14.04 04:48 Цвет
14.04 04:47 Memory
14.04 04:44 Desktop
14.04 03:16 Народ а как просто убить процесс? Чтоб он даже и пикнуть не успел...
14.04 00:03 Icons
13.04 22:40 Могу работать за совсем не большую плату.
13.04 20:16 WinSock32 and ASP
13.04 18:26 dbf конвертация
13.04 16:03 помогите начинающему,
13.04 15:59 Как задизаблить ЭдитБоксы?
13.04 15:29 Шрифты
13.04 15:21 Предлагаю участвовать в проекте


>>> Статья: Поддержка компонент в приложениях

Введение. Вот опасный, но к сожалению наиболее частый сценарий действий для программистов, использующих Visual Basic (ну или любой другой язык). Вы сделали отличную программу. В ней есть все, что вы хотели видеть. Программа упакована и стоит на полках магазинов (мечты, мечты... ;). Но через несколько дней после ее триумфального взлета, один пользователь звонит в вашу службу технической поддержки. Упс! Пользователь нашел фатальную ошибку в программе! Вы ее исправляете и даете пользователю обновленную версию. Однако телефоны службы тех. поддержки разрываются от звонков - найдена еще куча ошибок. Однако это уже проблемы с различными версиями вашей программы. После этого вы осознаете, что вы выпустили сотню различных версий программы, и с каждой нужно что-то делать. Страшно, не правда ли? :)

И что мне даст эта статья? Эта статья не гарантирует, что вы не столкнетесь с вышеописанным сценарием, однако она поможет вам избежать ее, ну или хотя бы уменьшить ее опасность. Чтобы это осуществить, эта статья научит, как можно ввести поддержку компонент в ваше приложение - это сделает ваши программы проще в обслуживании. В качестве примера я буду использовать программу для редактирования текста (a.k.a. "Блокнот" ;).

Что означает поддержка компонент? Поддержка компонент в вашей программе означает разделение ее на несколько компонент и главную часть, которая будет управлять этими компонентами. Компоненты - не что иное, как классы, находящиеся в файлах DLL, EXE и OCX. А главная программа использует эти классы для работы. Одним из наиболее распространенных компонент является ActiveX. Компонент ActiveX - класс, который имеет графическое отображение. Если разработчик компонента ActiveX решит обновить его, то он изменяет код компонента и распространяет компонент в виде файла OCX, обычно с тем же самым именем, которое имел старый компонент. Когда пользователь устанавливает этот компонент, все программы, использующие этот ActiveX, используют последнюю версию этого компонента. Неплохо, не правда ли?

Прстой пример программы - она использует компоненты ActiveX (например, текстовое поле или еще какие-нибудь украшательства), или программа, которая использует класс, находящийся в DLL для расчета математических функций. Сложный пример - программа ничего не содержит, кроме кода доступа к классу. Этот класс продоставляет всю логику и фукциональность программы. Однако, это не всегда необходимо.

Для упрощенного примера давайте будем использовать почтовую программу. Она использует 2 класса: один для функций e-mail, другой - для отображения результатов. Вот что находится в каждом классе:

CEMailFunctions
          
FUNCTION GetMessage

CDisplayFunctions
          
SUB DisplayText

Эти классы компилированы в DLL с именем StandartClasses.

Написание кода? Вот инициализационный код для главной программы:

Sub Main()

Dim EMailObject as Object
Dim Display Object as Object

Set EMailObject = CreateObject("StandardClasses.CEMailFunctions")
Set DisplayObject = _
CreateObject("StandardClasses.CDisplayFunctions")

EMailObject.GetMessage
DisplayObject.DisplayText

End Sub

(Это всего лишь пример. Не используйте этот код в настоящей программе. Также желательно объявлять объекты "as public", чтобы не нужно было их объявлять для каждой подпрограммы.)

Сначала мы объявляем переменные. Потом инциализируем каждый объект. В конце мы эти объекты используем. Но это еще не все - нам нужен код в классах.

'Для CEMailFunctions
Public Function GetMessage() as String
'Код для получения писем
End Function

'Для CDisplayFunctions
Public Sub DisplayText()
'Код для отображения текста
End Sub

Трудная часть завершена. Код работает. Пока DLL зарегестрирована в системе, код будет работать без проблем. Заметьте, что количество DLL не ограничено. Я мог бы использовать две DLL, но я использовал одну для простоты. Если вы будете использовать две DLL, вы будете должны изменить аргумент внутри оператора CreateObject на другой.  

Обновлене компонентов. Вот здесь мы и увидим всю мощность нашего подхода. Скажем, вам позвонили из одной большой компании, которая является вашим клиентом, и они хотят опцию печать сообщения.

Если бы приложение не основывалось на компонентах, вам нужно было бы изменить код внутри DisplayText, перекомпилировать EXE, и отослать новый EXE компании. Если в будущем вы опять измените код, вам снова нужно будет компилировать одну версию "для всех", и еще одну для компании, чтобы она могла идти в ногу со временем.

Но наше приложение основано на компонентах. Вам нужно будет изменить код функции DisplayText и перекомпилировать DLL. После этого вы отсылаете DLL компании и они заменяют старую DLL новой версией. Вот и все. Для будущих обновлений, вы изменяете нужные DLL (или EXE) и отсылаете обновленные файлы. Немодифицированные файлы остаются на компьютерах пользователей. Именно это и делают программы и пометкой "Upgrade" - они устанавливают модифицированные DLL или EXE файлы; старые файлы остаются на компьютере пользователя.

Поэтому давайте изменим функцию DisplayText:

Public Sub DisplayText()
...
'Код для печати
...
End Sub

После этого компилируем DLL, оправляем его клиенту, он заменяет старый DLL новым и это все! Просто, не так ли?

Заключение. Я надеюсь, что эта статья помогла вам понять основы использования компонентов в ваших приложениях. Имеется еще куча всевозможных ньюансов, однако это уже выходит за рамки этой статьи. Если хотите, все это доступно в книгах по объектно-ориентированному программированию, которые доступны в нашем магазине. Удачи и успешного кодинга вам!

Написать автору: Антон Дубина  -   anton@vbstreets.ru  или moderator@vbstreets.ru

>>> Наши друзья:

http://www.Kalashnikoff.ru Ассемблер? Это просто! Учимся программировать. Ведущий: Калашников Олег.
http://www.LeaderSoft.ru Лидер Access - профессиональная разработка баз данных c использованием Microsoft Access.

Ведущий проекта "VBS"
Сергей Никифоров

 



http://subscribe.ru/
E-mail: ask@subscribe.ru

В избранное