Visual2000 · Архив статей А.Колесова & О.Павловой

Советы тем, кто программирует на Visual Basic и MS Office/VBA

Андрей Колесов, Ольга Павлова

© 1996, Андрей Колесов, Ольга Павлова
Авторский вариант. Статья была опубликована c незначительной литературной правкой в журнале "КомпьютерПресс" N 6/96, с. 58-62.


В настоящее время (весна 1996 года) программисты используют две версии VB — 3.0 и 4.0. Соответственно все программные конструкции, которые предлагаются вниманию читателей, можно разделить на три категории: работающие только в VB 3.0 (таких очень немного), только в VB 4.0 (здесь еще есть такие, которые работают только в Windows 95) и в обеих версиях. Хотя в будущем в основном будут рассматриваться советы, связанные со спецификой VB 4.0, пока договоримся придерживаться такого правила: по умолчанию примем, что совет относится к обеим версиям, в противном случае в заголовке совета появится соответствующее указание.

Следующий выпуск будет ориентирован в основном на VB 4.0. Там мы, в частности, предполагаем рассмотреть некоторые вопросы создания объектов и OLE-серверов.

Совет 14. Выделение нескольких имен файлов в диалоговом окне Open File

Если вы хотите, чтобы в диалоговом окне выводилось несколько имен файлов, установите флажки OFN_ALLOWMULTISELECT. В результате этого строка FileName будет состоять из имени диска и имени каталога, за которыми последует список файлов, выбранных в данном каталоге и разделенных между собой пробелами. Например, если Вы выберете файлы X.TXT и Y.TXT, находящиеся в каталоге c:\a\b, то получите имя файла c:\a\b\ x.txt y.txt, а НЕ c:\a\b\x.txt c:\a\b\y.txt.

В начало статьи

Совет 15. Закрывайте другую программу из своего приложения

Для закрытия другой программы используйте следующий программный код в тексте своего приложения:

Title = "Программа А" 
ihWnd = FindWindow(0&, Title) 
ihTask = GetWindowTask(ihWnd) 
iRet = PostAppMessage(ihTask, WM_QUIT, 0, 0&) 
MsgBox "Внимание! Программа А закрывается"

В начало статьи

Совет 16. Удаляйте код после удаления соответствующего элемента управления

При удалении какого-либо элемента управления из формы код, соответствующий этому элементу управления, не удаляется. (Об этой проблеме мы уже говорили раньше в связи с переименованием элементов управления.) Он по-прежнему хранится в программном коде в Общей области (General area), и хотя он никому не мешает, из-за него увеличивается размер исполняемого модуля. Кроме того, если вы создадите новый элемент управления с таким же именем, сохранившийся код будет принадлежать этому новому компоненту, так как событие имеет то же самое имя. Поэтому программист, который не хочет сохранять данный код (а кто хотел бы?), должен удалять его вручную каждый раз при удалении элемента управления. Непонятно только одно: почему Microsoft не предлагает автоматическое удаление подобного мусора?

В начало статьи

Совет 17. Производите очистку данных при выгрузке форм

Для выгрузки формы можно использовать следующий фрагмент кода, закрепленный за кнопкой Close:

Unload 

А этот код следует также поместить в обработчик события Form_Unload():

Set  = Nothing

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

В начало статьи

Совет 18. Реагируйте на появление ошибок GPF правильно

Появление сообщений об ошибке GPF (General Protection Fault) — вещь неприятная. К счастью, в VB они появляются существенно реже, чем в компилирующих системах программирования. По теории они могут появляться в VB только при неправильных обращениях к внешним динамическим библиотекам и функциям API.

Сообщения об ошибках могут иметь следующий вид:

Это может произойти, если выполняется любое из следующих условий:

Если вы получаете сообщения об ошибках GPF при обращении к DLL и не можете сразу установить причину, тогда напишите программу-заглушку в виде BAS-файла, которая имитирует DLL-библиотеку. Это поможет хотя бы решить, кто виноват — библиотека или ваша VB- программа. Если ошибка все-таки остается, причиной ее является не DLL-библиотека.

В начало статьи

Совет 19. Изменить последовательность прохождения элементов управления совсем не трудно

При разработке программы последовательность прохождения элементов управления может нарушиться, особенно если в форму добавляется какой-либо элемент управления после того, как все остальные уже находятся на своих местах. В этом случае вам потребуется установить новую последовательность TabOrder. Для этого при помощи мыши выделите по очереди все элементы управления, двигаясь в обратном порядке, и для каждого из них установите значение свойства TabOrder равным нулю. В результате последовательность элементов управления станет обратной той, в которой вы их проходили: теперь они будут следовать в необходимом порядке.

В начало статьи

Совет 20. Избегайте длинных имен элементов управления и форм

Помните, что имена элементов управления и форм хранятся в исполняемом файле, зато на именах переменных можете не экономить: они не хранятся в EXE-файлах.

В начало статьи

Совет 21. Используйте Esc для выхода из программы-справки

При создании файлов справки для VB-программ полезно предусмотреть возможность того, чтобы пользователь мог легко выйти из окна справки и вернуться обратно в VB-приложение. Один из способов реализации такой возможности — при помощи клавиши Esc завершить выполнение программы-справки. Для этого добавьте следующий код в секцию [CONFIG] в файле проекта справки (help project file). Данный код создает клавишу-акселератор (Esc), чтобы активизировать в справочной системе макрокоманду EXIT, которая завершает выполнение программы-справки.

[CONFIG] 
; выход из программы-справки по клавише Esc 
AddAccelerator(0x1B,0,"Exit()")

Хорошо было бы прочитать этот совет самим разработчикам среды VB.

В начало статьи

Совет 22. Иногда полезно редактировать MAK-файл вручную

VB не предоставляет пользователю простого способа редактировать содержимое MAK-файлов. Но это может понадобиться, если вы хотите добавить новый VBX в середину разрабатываемого проекта или быстро убрать ненужные модули из проекта. Особенно это бывает полезно, когда вы пользуетесь компьютером, на котором VBX'ы, необходимые для работы вашего приложения, установлены в других каталогах. В данном случае используйте любой текстовый редактор для ручной настройки MAK-файла.

В начало статьи

Совет 23. Разбивайте большие приложения на части

Если вы создали большое приложение, подумайте о том, как разбить его на более мелкие. Используйте только одну главную исполняемую программу, которая вызывает другие программы, а также DDE-технологию для осуществления связей. Когда вы открываете неглавное приложение, откройте DDE-связь с главным приложением. Вы можете написать сценарий, который позволит приложениям взаимодействовать друг с другом для передачи данных или начала выполнения процессов. Такой метод имеет несколько преимуществ, включая более низкие требования к размеру памяти и меньшее потребление ресурсов. И еще одно БОЛЬШОЕ преимущество: поскольку ваше приложение состоит из нескольких исполняемых модулей, Windows выделяет для выполнения каждого из них свой собственный интервал времени, за счет чего это приложение выполняется быстрее.

В начало статьи

Совет 24. Используйте префикс в именах переменных

В Совете 10 мы уже говорили, что раньше для обозначения типа переменных и функций в Basic можно было использовать суффикс. Это было очень удобно: по имени сразу было видно, с какой переменной имеешь дело. Но с расширением числа типов в VB специальных символов (%, #, $, и пр.) для суффиксов просто не стало хватать, и поэтому такой способ обозначения переменных в последнее время не используется.

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

В качестве рекомендуемых префиксов предлагаются такие сокращения:

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

intTimes, strFileName, varSum

Там, где есть однозначность, вполне допускается использование первой буквы префикса (только для переменных, чтобы не было путаницы с объектами баз данных): iTimes, vSum.

В этом случае можно использовать для автоматического обозначения типов оператор DefXXX. Тогда вместо длинного описания:

Dim Times As Integer, Sum As Integer, Counter As Integer

можно будет написать:

DefInt I Dim iTimes, iSum, iCounter

Мы думаем, что те, кто привык к суффиксам, вполне может использовать и их — текст программы получается достаточно понятным:

Sum = 0: Times% = 10: FileName$ = "program.bas"

В начало статьи