Существенное изменение - переход от WinHelp к HTMLHelp, хотя трудно сказать, хорошо ли это. Качество справочной системы VB начало ухудшаться в версии VB4 из-за сокращения числа примеров. В VB5 эта тенденция продолжалась: появились ссылки на многочисленные справочные файлы. В обеих версиях число разорванных гиперсвязей возрастало. Все эти проблемы характерны и для VB6.
Для программиста средней квалификации тенденция к снижению числа примеров весьма болезненна. Первоначально VB отличался наличием примеров, иллюстрирующих почти любое применение его средств. Из них новички, а также пользователи, овладевающие новыми возможностями VB, черпали ценную информацию. И хотя многие сложные функции VB трудно проиллюстрировать краткими примерами, для более простых функций примеры были бы весьма кстати, однако и они все чаще отсутствуют.
На первый взгляд установление связей между несколькими справочными файлами - неплохая идея, но практическое ее воплощение ужасно. Проблема заключается в потере контекста. Например, если на одном компьютере установлены VB5 и Microsoft Office, перемещение по файлам справочной системы VB5 может привести в справочную систему MS Access. Единственный положительный момент состоит лишь в том, что при использовании WinHelp можно явно определить, какой справочный файл выводится на экран. В новой справочной системе HTMLHelp это не предусмотрено. При работе с VB6 просмотр осуществляется по всему набору справочных файлов пакета Visual Studio - более 800 Мбайт информации. Здесь нельзя отличить одну справочную страницу от другой, поэтому, активизируя расположенную в теме по VB ссылку, ведущую, как вы предполагаете, к дополнительной информации по VB, можно попасть на тему с похожим названием, которая не имеет ничего общего с VB.
Наш любимый пример такого рода - поиск справки о получении программным путем информации о номере версии Visual Basic. В действительности, в VB нет никаких синтаксических конструкций для этого. Однако последовательные ссылки могут привести к примеру, который называется Version Property Example (Пример использования свойства «версия»). Здесь можно найти оператор Debug.Print Application.VBE.Version. Звучит неплохо, но на деле оказывается, что эта синтаксическая конструкция специфична для языка Visual Basic for Applications (VBA) и применяется для определения версии управляющего модуля VBA (например, MS Word). В то же время нет даже намека на то, что данная тема не имеет отношения к VB6.
Наличие полной справочной системы по пакету Visual Studio на самом деле полезно лишь для тех, кто хочет углубленно изучить VB. Специалисты Microsoft пытаются справиться с данной проблемой, формируя подмножества справочной информации. Любое подмножество легко может быть выбрано из комбинированного окна. Одно из таких подмножеств называется Visual Basic Documentation (Документация по Visual Basic). При его выборе изменяется вид указателя, так что элементы, не имеющие отношения VB, оказываются заблокированными (окрашенными в серый цвет). Тем самым выделяется информация, относящаяся к VB. Лучше было бы просто скрывать элементы, не относящиеся к VB, поскольку указатель со ссылками для всего пакета Visual Studio имеет гигантский объем. Экран заполняется серым цветом, разбавленным редкими темами VB. У подмножеств есть и другие, свойственные только им, проблемы. В данном случае справочная система выдает сообщение о том, что выводимая на экран тема по VB отсутствует в оглавлении подмножества VB, несмотря на то что можно видеть и то, и другое.
Проблема разорванных связей от версии к версии растет с числом файлов справочной системы. Теперь, когда все размещается на одном диске со справочной системой Visual Studio, ситуация стала еще хуже. При неработающих ссылках неизвестно, как найти информацию другими способами. Можно искать ее часами, но никогда не найти ту страницу, к которой, предположительно, должна была привести разрушенная связь.
Если вы думаете, что мы излишне придирчивы к справочной системе, учтите, что в комплекте VB больше нет печатных руководств. Они приобретаются отдельно и стоят весьма дорого. Microsoft подразумевает, что основным источником информации будет прилагаемая электронная документация. В этом нет ничего плохого, пока качество, полнота и подбор этой документации остаются на должном уровне.
Одна полезная функция, впервые появившаяся в VB5, - контекстно-чувствительная подсказка, доступная из инспектора объектов (object browser). Большинство пользователей VB знают, что ее можно вызвать, щелкнув правой клавишей мыши на имени в исходном тексте программы и выбрав пункт Definition (Определение). Для переменных и функций, определяемых пользователем, при этом выводится описание переменной или функции. Для ключевых слов и встроенных элементов VB5 и VB6 запускают VB Object Browser, который выводит сообщение о том, к какому классу принадлежит этот элемент, и каков его синтаксис. Щелчок правой клавишей мыши в данный момент приводит к появлению еще одного меню, в котором есть ссылка на справочный файл. Многие не знают, что для вызова справочной системы достаточно еще одного щелчка мышью.
Переход от VB5 к VB6
При каждом переходе к новой версии VB были некоторые изменения, которые вынуждали разработчиков переделывать свой проект под новую версию. В прошлом предусматривалось такое преобразование текста программ, как изменение элементов управления, синтаксиса VB и определенных методов. Приятно, что мы не обнаружили таких ловушек при переходе от VB5 к VB6. Фактически, как только нам удалось преодолеть одну большую проблему, связанную с переходом к VB6, мы смогли преобразовать, скомпилировать и запустить десяток небольших апплет и две крупные промышленные системы, не внося никаких изменений в тексты программ. На нашей памяти это произошло впервые - большое достижение Microsoft.
Серьезная проблема возникала при переходе от VB4 к VB5, поэтому мы были весьма разочарованы, снова столкнувшись с ней. Если в своей программе на VB5 вы применяете какие-либо типовые элементы управления Windows, например инструментальные панели (ToolBars), списки изображений (ImageLists) или строки состояния (StatusBars), при переходе к новой версии надо быть внимательным.
В VB5 эти и другие элементы управления содержатся в DLL-файлах COMCTL32.OCX и COMCT232.OCX. В случае VB6 они находятся в файлах COMCTL.OCX, COMCTL2.OCX и COMCT332.OCX. Любому регистрируемому в Windows элементу присваивается некий глобальный уникальный идентификатор - GUID (Globally Unique Identifier). Если посмотреть на файл проекта VB с помощью текстового редактора, можно увидеть, что в ссылках на OCX-файлы применяются не имена, а идентификаторы GUID - длинные последовательности шестнадцатеричных цифр, разделенных несколькими дефисами. Проблема возникает оттого, что идентификаторы GUID для типовых элементов управления Windows в версиях VB5 и VB6 различаются.
До тех пор пока при переносе проекта в VB6 применяются элементы управления VB5, можно не беспокоиться. Проблемы возникают при попытке конвертировать проект. При преобразовании проекта VB4 из среды VB5 выдается запрос: хотите ли вы обновить версию проекта. При ответе «да» все типовые элементы управления Windows превращались в графические изображения (Picture Boxes), поскольку в VB нет механизма сопоставления идентификаторов GUID старых элементов управления с их новыми версиями. При работе с бета-версией VB6 эта ситуация воспроизводилась полностью, но Microsoft утверждает, что в коммерческой версии продукта этот недочет будет устранен. Для этого Microsoft предоставит небольшую программу, которая просматривает проект VB5 и изменяет нужным образом GUID. Этот конвертор надо запускать до первой загрузки проекта в VB6. Мы испытали бета-версию конвертора, который пока не имеет названия. Она работала превосходно. Microsoft предполагала поместить этот конвертор на Web-узел VB ко времени начала поставок VB6.
Несмотря на то что данная проблема существовала еще при переходе от VB4 к VB5, Microsoft не устранила ее даже к моменту завершения процесса бета-тестирования VB6. Будем надеяться, что когда-нибудь такое преобразование будет выполняться автоматически при загрузке проекта VB6 в рабочую среду VB7 или, если нам действительно повезет, конвертор будет включен в состав пакета исправлений Service Pack.
Производительность
С каждой новой версией производительность Visual Basic возрастает. Microsoft указывает несколько сфер применения VB6, в которых повысилась производительность.
Как утверждает фирма, ускорен доступ к данным благодаря «использованию усовершенствованных драйверов БД и компонентов доступа к данным». Мы испытали две рабочие программы на основе технологии Jet (DAO) и не заметили сколько-нибудь заметных улучшений. Однако, учитывая явную заинтересованность Microsoft в обеспечении взаимодействия с такими СУБД, как Oracle и собственная система SQL Server, мы предполагаем, что большая часть усовершенствований коснулась именно этой области. Но во время подготовки данной статьи мы не проводили испытаний при подключении к таким СУБД.
Кроме того, Microsoft утверждает, что был усовершенствован процесс обработки форм, в частности их загрузка. Существенные улучшения были заметны в VB5, и это стало одной из самых серьезных причин для перехода на новую версию продукта. Улучшений в VB6 мы не заметили. Большие сложные формы по-прежнему могут быть медлительными.
Мы сравнили время, которое было необходимо для загрузки на одной и той же машине версии VB6 и проекта, а также VB5 и такого же проекта. Нам показалось, что VB6 был чуть медленнее, хотя такое снижение производительности будет совершенно незаметным благодаря росту быстродействия современных процессоров.
Одна область, в которой пакет VB6 заметно улучшен, - обработка строк, давно бывшая камнем преткновения для программистов VB. В VB6 имеется довольно много новых функций для обработки строковых переменных, предназначенных для ускорения выполнения типовых операций со строками. Некоторые из них, по-видимому, основаны на собственных приемах программирования Microsoft, а не на повседневной практике широкого круга программистов, применяющих VB. Примером служит функция Split, которая делит строку на слова, фразы или подстроки, основываясь на положении заданного разделителя. Эта функция полезна для разработчиков компиляторов или системных программистов, а для тех, кто выпускает коммерческие прикладные программы, она менее интересна. К той же категории относятся функции Filter, Join и StrReverse. Мы приветствуем появление функции InstrRev, с помощью которой осуществляется поиск вхождения подстроки с конца строки, поскольку она полезна при выполнении такой типовой задачи, как синтаксический разбор маршрутов доступа к файлам. Хороша и долгожданная функция Round, хотя ее присутствие в списке строковых функций небесспорно. (Round воспринимает строковый аргумент, если его можно интерпретировать как число.)