Advanced Optimizations.
Advanced Optimizations.
Нажатие этой кнопки выведет на экран диалоговую панель Advanced Optimizations, показанную справа. Не рекомендуется изменять какие-либо опции в этой панели, установленные по умолчанию - они только для больших знатоков VB.
Boolean
Boolean
Булев тип данных может хранить только два значения: True либо False. Его использование вместо целочисленных переменных является хорошим стилем программирования.
Byte
Byte
Байтовый тип является новым в Visual Basic 5 и предназначен для хранения целых чисел от 0 до 255. Его использование позволяет сильно экономить оперативную память и уменьшать размер массивов (см. главу 10) по сравнению с предыдущими версиями Visual Basic. Кроме того, он используется при работе с двоичными файлами.
Что необходимо для работы с Visual Basic?
Что необходимо для работы с Visual Basic?
Все версии Visual Basic занимают много места на жестком диске. Даже самая небольшая (и наименее мощная) бесплатная версия Control Creation edition требует около 10 Мбайт свободного места на диске, процессор 486 или Pentium, а также не менее 16 Мбайт оперативной памяти. Полная инсталляция самой мощной версии Visual Basic Enterprise edition требует более 100 Мбайт дискового пространства.
Примечание:
Примечание:
Коммерческие (не бесплатные) версии Visual Basic поступают с полной документацией, поставляемой обычно на бумаге, но кроме этого на компакт-диске присутствует электронная версия документации, называемая "Books Online". Ее можно установить на жесткий диск для увеличения скорости работы. Это потребует около 20 Мбайт дискового пространства.
Совет:
Совет:
Не устанавливая определенные компоненты, можно уменьшить размер необходимого для работы дискового пространства. Но нельзя уменьшить требования ни к скорости процессора, ни к количеству оперативной памяти. Если количество оперативной памяти не соответствует требованиям или используются недостаточно быстрые микропроцессоры, то запустить Visual Basic все равно можно, но это будет очень неприятный эксперимент.
ColorMode.
ColorMode.
Позволяет определить тип принтера - цветной он или монохромный. Возможны два значения данного свойства, они приведены в таблице ниже.
Compile to Native Code.
Compile to Native Code.
Позволяет скомпилировать проект, используя родной код с оптимизациями того, что выбирается посредством оставшихся кнопок. Они описаны в следующей таблице.
Copies
Copies
. Устанавливает количество печатающихся копии.
Currency
Currency
Данный тип отсутствовал в версиях GW-BASIC и QuickBASIC. Он создан для того, чтобы избежать ошибок при преобразовании десятичных чисел в двоичную форму и наоборот. (Невозможно 1/10 представить как сумму 1/2,1/4, 1/8, 1/16 и т.п.) Данный тип может иметь до 4 цифр после запятой, и до 14 - перед ней. Внутри данного диапазона вычисления будут точными. Идентификатор представляет собой символ "@". Поскольку все арифметические операции, кроме сложения и вычитания, выполняются так же медленно, как и в случае переменных с двойной точностью, данный тип является предпочтительным для проведения финансовых расчетов. (Для тех, кто интересуется: данный тип использует целые числа из 19 разрядов, которые затем делятся на 10000. Это позволяет организовать 15 знаков до запятой и 4 после нее.)
Date
Date
Этот тип данных позволяет хранить значения времени и даты в промежутке от полуночи 1 января 100 года до полуночи 31 декабря 9999 года. Такие значения в тексте программ обозначаются символами "#", например:
Millenium = #January 1, 2000#
Если вводится только значение даты, Visual Basic полагает, что время равняется 00:00.
Демонстрационная версия PControl
Рисунок 1-12.
Демонстрационная версия PControl.
Пользователю почти всегда придется писать собственный код для обработки событий. В этом и состоит фундаментальное отличие программирования на Visual Basic от обычного программирования.
Обычно программы выполняются от начала до конца. В более старых языках программирования выполнение приложений начиналось с первой строчки программы и протекало через различные ее части согласно алгоритму. Приложение на Visual Basic работает совершенно по-другому. Ядром такой программы является набор независимых частей кода, активизирующихся в ответ на события, происходящие вокруг. Это является принципиальным моментом. Теперь вместо создания программы, отражающей мысли программиста, получается приложение, управляемое пользователем.
Большинство всего кода программы, отвечающего за обработку таких событий, как щелчки мыши, размещается в процедурах обработки событий (event procedures). Они представляют собой не что иное, как программный код, сообщающий Visual Basic, как реагировать на текущее событие. По существу, весь исполняемый код в программах на Visual Basic представляет собой либо процедуру обработки событий, либо используется данной процедурой.
К сожалению, третий и четвертый шаги для построения приложения Visual Basic заключаются в поисках ошибок в программе и их исправлении (на жаргоне программистов это называется отладкой (debugging)).
Ниже приведен перечень шагов, необходимых для создания приложения Visual Basic:
1. Подготовить интерфейс окна, с которым будет работать пользователь.
2. Определить, какие события будут обрабатывать элементы управления внутри окна.
3. Написать процедуру обработки для этих событий (и вспомогательные процедуры, если это необходимо).
Далее рассмотрим, что происходит при запуске приложения:
1. Visual Basic отслеживает все окна и элементы управления для каждого окна на предмет определения всех событий, относящихся к ним (движения мыши, щелчки, комбинации клавиш и т.п.).
с закладками Microsoft Tabbed Dialog
Диалоговый элемент управления с закладками Microsoft Tabbed Dialog Control 5.0
Этот элемент управления дает возможность создавать диалоговые панели с закладками, наподобие диалоговой панели Tools/0ptions в системе Visual Basic. Этот элемент позволяет создавать группу диалоговых панелей, каждая из которых снабжена собственной закладкой.
Как можно было заметить, первым шагом при создании такого элемента является установка его размера, необходимого для вывода информации в каждой закладке.
Дополнительная информация
Дополнительная информация
Обычно пользователь выбирает кнопку, щелкая по ней мышью. Однако иногда может
понадобиться большая гибкость. Один из методов активизации кнопки является общим для всех
приложений Windows: переместить фокус на кнопку, нажимая TAB, а затем нажать SPACEBAR. Оба
этих метода генерируют событие Click. Другими словами, Visual Basic вызывает процедуру
обработки событий Click в любом из этих случаев. Событие Click можно сгенерировать, используя код. (Пользователю известно, что кнопка, получающая фокус, становится трехмерной. Это достигается рисованием тонкого пунктирного прямоугольника вокруг текста на кнопке, и тонкого прямоугольника вокруг самой кнопки.)
Иногда требуется организовать взаимодействие с пользователем по клавише ESC. Обычно
данная клавиша отменяет операцию либо просто выводит пользователя из запутанной ситуации.
При этом одна из командных кнопок на форме активизируется клавишей ESC. В руководстве по
Visual Basic она носит название cancel button.
Обычно привязка командной кнопки к клавише ESC осуществляется через окно Properties, однако
можно использовать и код. Если просмотреть список свойств для командной кнопки, обнаружится
свойство Cancel. Если его значение равняется True, то при нажатии ESC будет обработано событие
Click для cancel button, даже если на ней не установлен фокус. Установка значения True в свойстве
Cancel для одной кнопки означает автоматическую установку значения False для остальных кнопок
формы.
Другая возможность - часто затруднительная для новичков - установка командной кнопки по
умолчанию. При этом событие Click для такой кнопки генерируется, когда кто-нибудь нажимает
клавишу ENTER. Здесь могут возникнуть проблемы, так как пользователи склонны нажимать
данную клавишу в самые неожиданные моменты. (Это происходит, поскольку они считают, что,
если фокус установлен на каком-либо объекте, необходимо нажимать не SPACEBAR, а именно
ENTER.) В любом случае, если необходимо использовать данную возможность, следует установить
свойству Default значение True. Кроме того, на форме может быть несколько кнопок по умолчанию.
Совет:
Совет:
Можно скомбинировать кнопки default и cancel в default cancel button. Обычно это применяют, когда необходимо принять какое-то окончательное решение.
Доступ к справочной системе Windows
Доступ к справочной системе Windows
Для доступа к справочной системе можно использовать метод ShowHelp обычной диалоговой панели. Далее приведена последовательность действий, которые необходимо для этого выполнить:
Добавитъ ооычныч аналоговый управляющий элемент в то место формы, где надо использовать средство справочной системы Windows.
Установить соответствующие значения для свойств HelpFile u HelpCommand управляющего элемента CommonDialog.
Например, если надо использовать метод ShowHelp для получения контекстно-зависимой подсказки:
Назначить свойству HelpFile имя скомпилированного файла справки.
Установить для свойства HelpCommand -значение cdlHelpContext.
Установить соответствующее значение контекстного номера ID для свойства HelpContext.
И. наконец, можно вызвать справочную систему при номоиш метода ShowHeIn
Если необходимо вызвать справочную систему самой системы Windows (например, для получения доступа к экрану Windows "Help on Help"), необходимо вызвать API - функцию WinHelp. Для этого необходимо добавить в приложение соответствующий фрагмент кода. Для 32-битной версии справочной системы это может быть такой фрагмент:
Declare Function WinHeip Lib "user32" Alias "WinHelpA" (ByVal hHnd As Long, ByVal IpHclpFu
As String, ByVal wCommand As Long, ByVal dwData As Long) As Long
Параметр hWnd ("window's handle) является параметром свойства hWnd рабочей формы. Параметр IpHelpF указывает путь к файлу справки (этот файл находится в директории, отличном от директория .ехе-файлов). Мог понадобиться следующие константы, используемые параметром wCommand:
Global Const HELP CONTEXT = &H1 'Display topic by id number
Global Const HELP QUIT -- &H2 'Terminate help
Global Const HELP INDEX = &H3 'Display index
Global Const HELP HELPONHELP = &H4 'Display help on using help
Global Const HELP SETINDEX = &H5 'Set an alternate Index
Global Const HELP KEY = &H101 ' Display topic for keyword in Data
Global Const HELP MULTIKEY = &H201 'Look up keyword in alternate table
Например, для того, чтобы вызвать стандартную справочную систему "Help on Help", необходимо испольвать следующую процедуру:
Public Sub DisplayHelp On Help(X As Form)
Dim Foo As Long ' dummy variable
Foo = WinHeip(X.hWnd,"C:\WINDOWS\HELP\WINDOWS.HLP",
HELP HELPONHELP,CLng(O))
End Sub
После этого любая строка вида
DisplayHelp_On_Help_Me
будет вызывать стандартную справочную систему Windows.
Примечание:
Примечание:
После присвоения параметру hCommand значения HELP_CONTEXT следует установить для параметра dwData соответствующий номер ID контекстной строки.
Если для вызова справочной системы используется WinHeip API, то для того чтобы закрыть дополнительные окна справки, вам нужно снова вызвать функцию WinHeip API (т.к. справочная система Windows является отдельным приложением). Это можно сделать следующим образом (обычно для этого используется событие Form Unload). Переменные Foo и Bar должны иметь правильный тип, хотя реально они не несут никакой полезной нагрузки.
Sub Form_Unload(Cancel As Integer)
Dim Foo As Integer, Bar As String 'dummy variables
Foo = WinHeip(Me.hWnd, Bar, Help_Quit, CLng(O))
End Sub
Double Precision
Double Precision
Переменные такого типа позволяют хранить числа с точностью до 16 цифр и длиной до 300 символов. Идентификатором является "#". Вычисления с ними тоже являются приблизительными, а скорость их относительно небольшая. В основном переменные типа Double Precision используются для научных расчетов.
Другие полезные строковые константы
Другие полезные строковые константы
Кроме константы vbcrLf, существует еще ряд других, не менее полезных встроенных констант (см. таблицу далее). Все эти константы можно использовать в программах на Visual Basic вместо соответствующих значений функций Chr$ или Chr. Однако для Microsoft Windows применение найдут только коды для carriage return, line feed, tab и backspace.
EndDoc.
EndDoc.
Этот метод сообщает Windows об окончании работы с документом. Его синтаксис следующий:
Printer.EndDoc
Данная строка освобождает память от последних страниц текста и посылает их в Диспетчер Печати Windows на печать.
Формат ASCII/ANSI
Формат ASCII/ANSI
У компьютера нет отдельного участка памяти для хранения текста, а еще одного - для чисел. Все, что поступает в память компьютера, преобразуется в числовой формат (реально - в двоичное представление). В программе помечается только, что данный участок оперативной памяти содержит закодированный текст. Обычно формат для преобразования текстовой информации в цифровую называется ASCII (American Standard Code for Information Interchange). Данный формат присваивает каждому символу соответствующее число в диапазоне от 0 до 255, хотя Windows не может вывести на экран все 255 символов и использует более ограниченный их набор ANSI (American National Standards Institute). Управляющие символы, а также специальные типа табуляции или перевода строки -имеют номера до 32. Значением функции Chr(n) является символ, соответствующий числу п из формата ASCII. Оператор
Print Chr(n)
либо выводит на экран символ, соответствующий коду ASCII, текущим шрифтом, либо имеет место особый эффект в зависимости от типа управляющего символа. Например, оператор
Print Chr(227)
выводит греческую букву "пи" на экране, если перед этим значение FontType было установлено как MS LineDraw при помощи окна Propoties или через Code.
Следующий пример использует код символа кавычек ("), 34, для вывода на экран фразы, заключенной в кавычки с обеих сторон:
Print Chr (34) ;
Print "Quoth the raven, nevermore." ;
Print Chr (34)
Совет:
Совет:
Функция Chr возвращает строку, хранимую в типе variant. Аналогичная более старая функция ChrS возвращает непосредственно строковое значение.
На экране будет выведено
"Quoth the raven, nevermore."
Примечание:
Примечание:
Предыдущий результат можно получить с помощью оператора:
Print "'"'Quoth the raven, nevermore.""" ;
так как Visual Basic, в отличие от многих версий BASIC, воспринимает два символа кавычек как один и выводит его на экран в выражениях с оператором Print или при работе со строковыми значениями.
В Visual Basic существует функция Asc, параметром которой является строковое значение, а результат равняется коду ASCII для первого символа. Если строка пустая, функция выдаст ошибку во время выполнения (run time error).
Порядок ASCII/ANSI используется по умолчанию Visual Basic при сравнении различных строк с помощью операторов сравнения, таких как > и <. Наиболее важным местом для применения кодировки ASCII/ANSI является процедура обработки событий KeyPress.
Примечание:
Примечание:
Внутри Visual Basic используется Unicode - система, поддерживающая все возможные языки. В ней содержится порядка 65 тысяч различных символов. Более подробно об этом можно узнать из приложения к книге "Руководство программиста". За исключением нескольких особых ситуаций, включая двоичные файлы, переключение между ASCII и Unicode является вполне прозрачным для программиста.
Функция DoEvents.
Функция DoEvents.
Обычно программист ожидает, что Windows (и Visual Basic) постоянно отслеживает все события и реагирует на них. С другой стороны, много времени уходит на различного рода вычисления или сортировку данных. Однако при этом не всегда желательно запрещать приложению Visual Basic реагировать на события. Если создается процедура, в которой много времени будет занято различного рода вычислениями, необходим механизм отслеживания состояния операционной системы и реагирования на различного рода события.
Функция, выполняющая такого рода задачи, носит название DoEvents. В каком бы месте программы ни стоял данный оператор, он сигнализирует Visual Basic о том, что управление передано операционной системе для обработки всех событий. (Windows сохраняет последовательность наступления событий в очереди, а также нажатий клавиш в очереди SendKeys.) DoEvents нельзя использовать в процедуре обработки событий, которая вызывается несколько раз. Например, процедура обработки событий Click может быть вызвана еще раз щелчком мыши. Если забыть про это, можно легко организовать в программе бесконечный цикл.
Цикл, работающий только в случае отсутствия каких-либо событий, носит наименование цикла ожидания. Такие циклы создаются внутри специализированной процедуры Sub, носящей имя Main, и подключающейся к любому программному модулю. В каждом проекте существует только одна процедура Main. Ее формат следующий:
Sub Main()
Do While DoEvents()
'Код, работающий в процессе цикла ожидания
Loop
End Sub
Далее необходимо сделать так, чтобы модуль с Main загружался первым. Для этого нужно выбрать в меню пункт Project|Project Properties и затем страницу General. На этой странице выбрать и открыть список StartUp Object и выбрать Sub Main вместо формы. После того как процедура Main указана загрузочной. Visual Basic не будет автоматически загружать какую-нибудь форму. Для этого теперь необходимо писать программный код, используя, сервированные слова Load и Show.
Ниже приведен простой пример цикла ожидания. Необходимо создать новый проект и добавить к нему программный модуль. Далее в нем объявляется глобальная переменная Counter типа long integer:
Public Counter As Long
Теперь добавим несколько строк кода к процедуре Main:
Sub Main()
Fonnl. Show
Do While DoEventsf)
Counter = Counter + 1
loop
End Sub
В завершение установим Sub Main, как загрузочный модуль, и добавим процедуру Form_Click:
Sub Form_Click()
Print Counter
End Sub
После запуска такой программы счетчик будет увеличиваться каждый раз после щелчка внутри формы. Причина состоит в том, что в течение периода ожидания (когда пользователь не щелкает мышью) Visual Basic переходит к процедуре Main и добавляет 1 к счетчику. Поскольку Counter является глобальной переменной, ее значение сохраняется между вызовами процедуры.
Функция DoEvents на самом деле возвращает число форм, загруженных приложением в текущий момент. Цикл ожидания останавливается, когда выгружены все формы. (Или Visual Basic встречает оператор End.)
Другое общее использование функции DoEvents внутри функции состоит в запуске больших по времени вычислений. Установка цикла ожидания позволяет Visual Basic реагировать на события в момент вычислений. Небольшое дополнительное время при этом с лихвой окупается.
Height, Width.
Height, Width.
Возвращают горизонтальный и вертикальный размеры бумаги в принтере, установленном в Windows. Они измеряются в твипсах, если только не установлена другая единица измерения. Данные значения нельзя изменить в период работы программы; они предназначены только для чтения. Они используются, например, для проверки того, переключился ли пользователь на другой размер бумаги, если выводимая информация не умещается на стандартном листе 8,5х11 дюймов. (Для такой страницы Visual Basic выдает значение ширины 12 288 твипсов и высоты - 15 744 твипсов.)
Integer
Integer
Целочисленные переменные могут хранить только относительно небольшие целые числа (в диапазоне от -32768 до +32767). Арифметические операции над такими числами выполняются очень быстро. Для обозначения такого типа используется символ "%":
AnIntegerVariable% = 3
Использование Application Wizard
Использование Application Wizard
Следующее, на чем Мы хотели бы остановиться, — использование мощного VB Application Wizard ("Мастер приложений"), входящего во все редакции Visual Basic, за исключением Control Creation edition. Чтобы запустить его, необходимо выбрать в меню File|New Project и далее, как показано на Рисунок 1-2, выбрать VB Application Wizard. Если это будет проделаете, то после небольшой задержки на экране будет видна картинка, похожая на Рисунок 1-5.
Для продолжения работы с Application Wizard необходимо щелкнуть по кнопке Next. Следующий экран показан на Рисунок 1-6. Здесь программист может выбрать, как будет "выглядеть" новое приложение. Отметим, что возможные варианты на экране отображены как словами, так и в картинках.
Использование мастера
Использование мастера
Для наглядности предположим, что надо создать дистрибутивы двух различных приложении:
калькулятора, поставляемого с Visual Basic;
элемента управления числового поля ввода NumericTextBox.
Изменение значений по умолчанию для типов
Изменение значений по умолчанию для типов
Следующее выражение автоматически присваивает переменным I, J и К тип variant:
Dim I, J, К
Предположим, в новой программе почти все переменные должны быть целочисленными. В таком случае удобно организовать их объявление так, чтобы переменная, для которой не указан тип, больше не объявлялась как variant. Для этого используется оператор DefType. В следующей таблице приведено несколько примеров его использования:
Ярлычки ToolTips
Ярлычки ToolTips
ToolTips представляют собой небольшие ярлычки, использующиеся для краткого описания инструмента. Такой ярлычок появляется примерно через 1 секунду после того, как указатель мыши помещается на инструмент, и пропадает после сдвига указателя мыши. Для добавления такой возможности в панель инструментов необходимо:
Установить свойство ShowTips в True.
Назначить свойству ToolTipText тот текст, который будет выводиться в ярлычке.
Экран с итоговым отчетом для Application Wizard
Рисунок 1-11.
Экран с итоговым отчетом для Application Wizard.
Элемент управления фрагментами Microsoft Picture
Элемент управления фрагментами Microsoft Picture Clip Control 5.0
Элемент управления фрагментами Microsoft Picture Clip Control представляет собой еще один способ размещения растровых изображений (bitmaps) в элементе управления. Так же, как и в случае с "оживленными" кнопками, подобная технология позволяет сохранять ресурсы системы Windows, а также повышать скорость доступа к изображению. К примеру, такой элемент может использоваться для создания панели инструментов, что позволит пользователю настраивать инструментарий по собственному усмотрению. В этом случае вместо считывания каждого инструмента как отдельного растрового изображения, можно сделать это одним действием, воспользовавшись элементом управления фрагментами.
Совет:
Совет:
Одним из путей объединения нескольких растровых изображении в одно является одновременное использование двух копии программы Windows Paint. Надо просто вырезать одно изображение и вставить его в другое. Подобную операцию можно повторить необходимое число раз.
Из-за сложности в получении одного большого растрового изображения из нескольких файлов, необходимого при использовании элемента управления фрагментами, обычно используют элемент List Image.
В любом случае полезно посмотреть программу, использующую элемент управления фрагментами (например, программу
C:\VB\Samples\comptool\Picclip\Redtop.vbp).
Элемент управления средствами мультимедиа
Элемент управления средствами мультимедиа
Устройства мультимедиа, такие, как проигрыватель компакт-дисков, становятся неотъемлемой частью современного персонального компьютера. Идея совместного объединения текста, звука и изображения действительно является передовой для нашего времени.
Элементы управления средствами мультимедиа дают пользователю возможность воспользоваться командами интерфейса media control interface (MCI). Команды MCI позволяют управлять аудио- и видеоустройствами и не зависят от используемого оборудования. При помощи элемента управления средствами мультимедиа можно посылать такие команды, как старт, перемотка вперед, перемотка назад, пауза и т.д. Всего этот- элемент управления содержит около 60 свойств, поэтому вместо детального их описания здесь приводятся только основные принципы работы, исходя из которых можно самостоятельно настроить элемент управления, используя страницу Custom Properties.
Это просто набор кнопок с названиями: Prev, Next, Play, Pause, Bask, Step, Stop, Record и Eject.
Всякий раз, когда пользователь нажимает одну из кнопок, необходимо послать соответствующую команду MCI. Но прежде чем сделать это, необходимо решить, нужно ли:
чтобы пользователь управлял устройством мультимедиа посредством нажатия на кнопки:
самостоятельно управлять устройством без участия пользователя.
В первом случае следует установить значение True для свойств Visible и Enable (обычно это сделано по умолчанию в процедуре события Form_Load). Во втором случае необходимо использовать значение False для подавления вывода элемента на экран и для блокировки его использования.
В качестве простейшего примера использования элемента управления средствами мультимедиа приведем программу проигрывания .wav-файлов. Последовательность шагов при этом будет такая:
Создать текстовую панель для названия проигрываемого файла.
Создать командную кнопку на пустом поле рабочей формы.
Создать элемент управления средствами мультимедиа с установленными в False свойствами Visible и Enabled.
Для работы элемента в фоновом режиме надо воспользоваться следующей процедурой Form_Load:
Private Sub Form Load ()
'Set the properties needed by the MCI control to work
MMControll.Notify = False
MMControll.Wait = True
MMControli.Shareable = False
MMControll.DeviceType = "WaveAudio" \
End Sub
Теперь добавим следующие строки в процедуру Command! Click:
Command! Click ()
MMControll.FileName = Textl.Text
MMControll.Command = "Open" 'play the file named in the textbox
End Sub
Вот и все!
Элементы управления в версиях Professional и Enterprise
Элементы управления в версиях Professional и Enterprise
В этом разделе рассказывается о нескольких наиболее часто используемых управляющих элементах, поставляемых в версиях Professional и Enterprise системы Visual Basic. Все эти элементы доступны через диалоговую панель Project|Components.
Long Integer
Long Integer
Данный тип впервые появился в языке QuickBASIC. В таких переменных хранятся целые значения от -2 147483648 до +2 147483647. Обозначается символом "&". Арифметические операции над такими числами выполняются тоже очень быстро, и при работе с процессором 386DX или 486DX существует лишь небольшая разница в скорости вычислений между Long Integer и Integer.
ALongIntegerVariableS = 123456789 Single Precision
Идентификатором для данных чисел является символ "!". Данный тип переменной позволяет хранить дробные числа с точностью до семи цифр. Это означает, что если получается результат 12345678.97, то часть 8.97 не является точной. Результат может быть равен, к примеру, 12345670.01. Длина чисел может достигать 38 знаков. Вычисления с данными переменными тоже будут приблизительными. Более того, арифметические действия выполняются медленнее, чем с целочисленными переменными.
Мастер установки
Мастер установки
Мастер установки - это действительно отличный инструмент, который позволяет создавать дистрибутивы приложений и элементов управления практически без усилий. Это действительно автономная программа, которая называется Application Setup Wizard. Можно запустить ее, к примеру, посредством подменю Visual Basic 5 в меню Start. (Предположим, что используется стандартная установка, тогда программа мастера установки будет называться VB\setupkit\kitfil32\Setupwiz.exe).
Примечание:
Примечание:
Перед тем как использовать мастер установки, следует по крайней мере хотя бы раз откомпилировать код, а также сохранить проектный файл.
Когда запускается мастер установки, мы попадаем на начальный экран мастера установки, который выглядит, как Рисунок 23-4.
Разберемся с пунктами в основной панели. Прежде всего, здесь есть кнопка помощи Help, которая выведет файл справки для мастера. Кнопка выхода Exit в верхнем правом углу панели закрывает мастер установки. Кнопка движения вперед Next перемещает к следующему шагу мастера, а кнопка Back возвращает к предыдущему. Щелкнем на кнопке Next, чтобы перейти к первому реальному экрану мастера.
Далее приведены описания новых пунктов этого экрана.
Набор Printers
Набор Printers
По определению объект Printer представляет собой текущий принтер Windows. Набор Printers, с другой стороны, позволяет получить доступ ко всем установленным драйверам принтеров в системе (например, это может быть и драйвер факса). Число установленных принтеров можно получить так:
Printers.Count
Доступ к элементу набора осуществляется следующим образом:
Printers {индекс},
где индекс означает число от 0 до Printers.Count - 1.
Примечание:
Примечание:
Фактически принтер по умолчанию можно изменить, используя Visual Basic. Это делается при помощи команды Set.
Необходимость объявления переменных
Необходимость объявления переменных
Одной из наиболее общих ошибок в программах является использование необъявленных переменных. Проблема состоит в том, что Visual Basic позволяет создавать переменные "на лету", как только они первый раз встречаются в программе. Если перепутать имя переменной. Visual Basic создаст новую с похожим именем и присвоит ей значение по умолчанию, что тут же приведет к ошибкам. Эту ошибку трудно обнаружить, поскольку имена переменных очень похожи.
Простейший способ избежать подобных ошибок состоит в принудительном объявлении всех переменных. Тогда при ошибке в имени переменной будет выдано сообщение. Разработчики Visual Basic предусмотрели такую возможность работы, но по умолчанию она не используется.
Оператор, необходимый для этого, называется Option Explicit. Это первый из операторов, не используемый в процедурах обработки событий. Хороший способ запомнить для себя его принцип работы состоит в использовании Option Explicit для изменения значений по умолчанию.
Примечание:
Примечание:
Любая информация, которая должна быть доступна всем процедурам обработки событий, относящихся к форме, размещается в разделе (General) данной формы.
Для того чтобы поместить Option Explicit в раздел (General), необходимо:
Открыть окно Code.
Выбрать объект (General) из списка объектов, представленных в окне Object.
Выбрать (Declaration) из списка Ргос.
Ввести Option Explicit.
Примечание:
Примечание:
Часто использовать объявления на уровне формы в разделе (General) понадобится, когда читатель будет экспериментировать с примерами программ из справочной системы.
(Для копирования примера программы из справочной системы можно использовать кнопку Copy в окне Code для примера. Затем можно использовать пункт Paste из меню Edit для вставки примера в окно Code.). После того как Visual Basic встречает команду Option Explicit, он более не позволяет использовать необъявленные переменные. Если попробовать все же применить такую переменную, будет выдано сообщение об ошибке, как показано ниже.
Совет:
Совет:
Чтобы использовать обязательное объявление типа переменной, можно воспользоваться страницей Editor диалоговой панели Tools|0ptions. Автор (и, по его сведениям, все серьезные программисты) всегда устанавливает данный флажок. После этого оператор Option Explicit автоматически вставляется в те места кода, где это необходимо.
NewPage.
NewPage.
Данный метод завершает текущую страницу и посылает принтеру команду перехода на следующую страницу. Синтаксис:
Printer.NewPage
Объект Printer.
Объект Printer.
Visual Basic использует принтер, установленный по умолчанию в операционной системе. Он помогает легко установить его разрешение, свойства шрифтов и т.п.
Сперва рассмотрим команду PrintForm, выводящую на принтер графический образ окна формы. Если в приложении используется несколько форм, то необходимо указать требуемое имя в качестве параметра:
ИмяФормы.PrintForm
Поскольку данная команда выполняет побитовый перенос формы вместе с заголовком и рамкой на принтер, она не обладает достаточной гибкостью. Более того, большинство принтеров обладают большей разрешающей способностью, чем экран компьютера.
Большинство команд принтера в Visual Basic зависят от ориентации страницы. Это означает, что Visual Basic пересчитывает все выводимые символы (фактически точки) перед передачей информации на принтер. Это позволяет полностью управлять внешним видом печатающейся страницы.
Обычный способ для передачи информации на принтер состоит в использовании метода Print, связанного с объектом Printer. Например, поскольку метод Print учитывает ориентацию страницы, можно использовать свойства CurrentX и CurrentY для точного позиционирования текста и даже точек на странице.
Синтаксис команды для вывода текста на печать очень прост:
Printer.Print текст
В данном контексте можно использовать символы ";" и "," таким же образом, как в формах. Точка с запятой подавляет автоматический переход на следующую строку, а запятая осуществляет переход к новой печатной зоне (те же 14 колонок). Функции Tab и Spc работают аналогичным образом.
Управлять свойствами шрифта тоже можно обычным образом. Например:
Printer.Font.Name = "Script" 'Используется индексный шрифт размером 18 пунктов
Printer.Font.Size = 18
Как и в формах, изменения шрифта принтера не влияют на предыдущий текст. Все изменения отражаются только на вновь выводимом тексте.
Объявление переменных: оператор Dim для различных типов данных
Объявление переменных: оператор Dim для различных типов данных
Большинство людей предпочитают не пользоваться идентификаторами для обозначения типа переменной (тем более, что для таких типов, как дата/время, вообще не существует идентификаторов). Вместо этого они используют оператор Dim. Такая операция носит название объявления. Объявление типов переменных в процедурах обработки событий перед их использованием - и, естественно, с комментариями - является хорошим стилем в программировании. Это также помогает улучшить читабельность текстов программ.
Private Sub cmdCalculate Click
'Данная процедура вычисляет проценты по закладной
Dim Years As Integer
Dim Rate As Currency
Dim Amount As Currency
Dim I As Integer
Dim TextBox As String
Dim Interest As Currency End Sub
Объявления переменных можно комбинировать в одной строке, например:
Объявления переменных можно комбинировать в одной строке, например:
Dim Year As Integer, Rate As Currency, Name As String
Область видимости переменных
Область видимости переменных
Программисты применяют термин область видимости, когда хотят сказать о возможности использования переменной из одной части программы в другой ее части. В старых языках программирования все переменные были доступны во всех частях программы, поэтому сохранение целостности наименований представляло большую проблему. Например, если в приложении использовались две переменные Total, то их значения уничтожали друг друга.
Решение данной проблемы в современных языках высокого уровня, таких как Visual Basic, состоит в изолировании переменных внутри процедур. До тех пор пока это не задано специальным образом, значение переменной Total в одной процедуре никак не влияет на значение переменной с таким же именем в другой процедуре. В терминах программирования данный подход означает, что данные переменные являются локальными по отношению к процедурам, если не указано иначе. В частности, процедура обработки события обычно не имеет никакой связи с другой процедурой того же типа. Обычно не принято работать с переменными по умолчанию. Если необходимо быть уверенным, что данная переменная является локальной, нужно объявить ее внутри процедуры события при помощи оператора Dim.
Обработка ошибок.
Обработка ошибок.
Независимо от того, насколько тщательно разработана и отлажена программа, никогда нельзя полностью исключить возможность возникновения ошибок. Поэтому при написании устойчивых программ необходимо обрабатывать возникновение неисправимых ошибок. Команда, которая применяется для их перехвата в конкретной процедуре, выглядит следующим образом:
On Error GoTo...
где три точки означают метку (номер строки), определяющую начало фрагмента обработки ошибки. Данный фрагмент должен размещаться в рамках этой же процедуры. Невозможно при помощи команды On Error GoTo перейти к другой процедуре. С другой стороны, фрагменты для перехвата ошибок часто используются в других процедурах или функциях.
Метка для оператора перехвата ошибки представляет собой любой идентификатор с последним символом в виде двоеточия, удовлетворяющий соглашению об именованиях переменных. Метка обозначает начало фрагмента программы, как показано ниже:
ErrorTrap:
'программный код следует далее
Поскольку необходимо исключить возможность "вылета" из программы в процедуре обработки ошибок, неплохой идеей является использование оператора Exit в строке, непосредственно перед меткой фрагмента по перехвату ошибок.
Команда On Error GoTo может находиться в любом месте процедуры обработки события, функции или процедуры Sub. Обычно там же размещается и программный код для обработки ошибок. Единственным исключением является тот случаи, когда процедура вызывается в рамках другой процедуры. Тогда Visual Basic сначала проверяет наличие фрагмента по обработке ошибок сначала в текущей процедуре, а затем в "вышестоящей".
После того, как программист начинает пользоваться обработкой ошибок при помощи On Error GoTo, в его приложениях исчезают ошибки во время выполнения. (Но это не защищает от ошибок в операционной системе; в Windows 95 их немного меньше, чем в Windows 3-х.) В любом случае команда On Error GoTo должна передавать управление на участок кода, который идентифицирует проблему и, возможно, решает ее.
Если ошибку можно исправить, то оператор Resume используется для возврата к месту в программе, где она случилась. Однако невозможно исправить ошибку, не зная о вызвавшей ее причине. Это можно сделать, используя функцию Err и объект Err. Он представляет собой целое значение, которое можно присваивать переменной. Например, если написать
ErrorNumber = Err.Number
то значением переменной ErrorNumber будет номер ошибки.
Visual Basic может идентифицировать более 80 ошибок во время выполнения. (Информацию об этом необходимо искать в электронной документации в разделе "trappable errors"). Ниже приведено два примера.
Обратная сторона тематических разделов
Обратная сторона тематических разделов
Совет:
Совет:
Если найти файл Iconwrks.rtfB директории VBVHC, то он сможет стать отличным примером файла RTF. Этот файл содержит простейшую справочную систему для приложения Iconwrks. (Исполняемый файл этого приложения называется Iconwrks.ехе и находится в том же директории.) Далее, сравнивая содержимое RTF-файла с экраном помощи Iconwrks.ехе, можно увидеть, как управляющие символы формата RTF превращаются в дополнительные возможности справочной системы. Возможно, это даже поможет достаточно хорошо изучить значение управляющих символов. Однако более предпочтительным является использование программных инструментов независимых поставщиков.
Практически нет людей (за редким исключением), которые для создания справочной системы не использовали бы простые пакеты, основанные на макроопределениях, для расстановки управляющих символов RTF. Используя подобный пакет можно смело забыть о том, что обозначет тот или иной идентификатор формата RTF, щелкнув вместо этого несколько раз мышкой. В качестве примера можно привести внешний вид панели инструментов пакета RoboHelp, дающей доступ к некоторым из его возможностей.
В любом случае, как об этом уже говорилось ранее, необходим текстовый редактор, поддерживающий формат RTF (rich text format) для сохранения файла, который будет впоследствии перетранслирован компилятором в справочную систему. (Это связано с тем, что большинство доступных инструментов типа RoboHelp доступны в качестве дополнительных модулей к редактору Microsoft Word, который, без сомнения, полностью поддерживает спецификацию RTF-формата.)
Каждый тематический раздел справочной системы должен быть отделен от другого символом "разрыв страницы" (hard page break). (Этот символ надо вводить самостоятельно, в отличие от других символов разрыва, которые тестовый редактор проставляет автоматически. Символ "разрыв страницы" можно ввести путем нажатия комбинации клавиш CTRL+ENTER в семействе редакторов фирмы Microsoft.) Каждый тематический раздел должен содержать идентификатор контекстной строки, название, а также список доступных ключевых слов. Контекстная строка используется для перехода к разделу, следовательно, каждый раздел должен иметь уникальную строку. Ключевые слова используются для организации возможностей поиска в справочной системе. Естественно, несколько тематических разделов могу т иметь одинаковые ключевые слова.
Привязка по ключевым словам, использующая идентификаторы, является основой для построения справочной системы. Например, контекстная строка выделяется при помощи идентификатора привязки "#". Контекстная строка может использовать символы от А до Z, числа, точки и символы подчеркивания. Максимальная длина строки ограничена 255 символами.
Название тематического раздела выделяется при помощи идентификатора привязки "$" (знак доллара). Название может содержать до 127 символов из стандартного набора системы Windows. И, наконец, ключевые слова выделяются при помощи идентификатора привязки "К" (в верхнем регистре).
(Ключевые слова не являются обязательными, однако можно назначить тематическому разделу более чем одно ключевое слово, перечислив их в списке, разделенном знаками ";". Ключевые слова могут содержать произвольные символы из стандартного набора символов системы Windows. Максимальная длина ключевого слова не должна превышать 255 символов.)
Далее заметим, что можно организовать ссылку на файл с растровым изображением.bmp, указав его имя в фигурных скобках. При этом растровое изображение будет помещено в соответствующее место экрана помощи. Можно также поместить растровое изображение на страницу со списком тематических разделов. Если для создания справочной системы используется текстовый редактор Word for Windows, то того же результата можно достичь, воспользовавшись функцией Insert Picture. (Для вставки изображения большого размера следует воспользоваться методом вставки "By Reference".) Графическая часть справочной системы также может использоваться в качестве точек перехода к другим темам. Если не используется редактор Word for Windows, то следует создать ссылку на растровое изображение в файле тематических разделов.
Обратим внимание, что некоторые фрагменты текста (например, "Status Area") подчеркнуты двойной линией. Такие фрагменты используются в качестве точек перехода к другим разделам. Вслед за каждым таким фрагментом следует текст, указывающий место перехода (этот текст не выводится на экран в справочной системе). Общий синтаксис подобного механизма ссылок может быть записан как:
JumpString CONTEXT_SroWG
где контекстная строка, указывающая место ссылки, должна быть отформатирована как скрытый текст без пробелов. Точно так же можно разместить скрытую контекстную строку после фрагмента текста, подчеркнутого одинарной линией, для указания местоположения всплывающей справки.
Примечание:
Примечание:
Способ указания фрагмента текста как скрытого зависит от используемого текстового редактора.
S до Z, получают тип
DefInt A-Z | Все переменные получают тип integer. |
DefInt I-J | Все переменные, начинающиеся с букв I и J, получают тип integer. |
DefStr S-Z | Все переменные, начинающиеся с букв от S до Z, получают тип String |
В частности, можно установить соглашение, что все переменные, начинающиеся с I, будут целочисленными, с помощью Deflnt I. После этого оператор Dim I... будет объявлять переменные типа integer. Основные формы различных операторов DefType, необходимых в данной главе:
Deflnt диапазон букв (для integer)
DefLng диапазон букв (для long integer)
DefSng диапазон букв (для single precision)
DefDbl диапазон букв (для double precision)
DefCur диапазон букв (для currency)
DefStr диапазон букв (для string)
DefVar диапазон букв (для variant)
DefBooi диапазон букв (для boolean)
DefByte диапазон букв (для byte)
DefDate диапазон букв (для date)
Буквы не обязательно должны быть заглавными: DefStr s-Z и DefStr S-Z работают одинаково. Соглашения о типах можно всегда изменить, используя идентификатор или оператор Dim для конкретной переменной. Оператор DefType размещают в том же разделе (General), что и Option Explicit.
vbPRPQDraft | 1 | Черновая печать |
vbPRPQLow | 2 | Низкое разрешение |
vbPRPQMedium | 3 | Среднее разрешение |
vbPRPQHigh | 4 | Высокое разрешение |
Примечание:
Примечание:
Дополнительно можно устанавливать разрешение в точках на дюйм, если принтер (и его драйвер) поддерживают это.
CommEvent | Ключевое слово элементов управления коммуникациями. Различные значения этого свойства соответствуют как событиям, так и ошибкам коммуникационного порта. Например, если значение этого свойства равно константе comEOF (=7), то это говорит о наличии символа конца файла (ASCII 26) в буфере приема. |
CommPort | При записи устанавливает адрес коммуникационного порта, при чтении - возвращает адрес текущего порта. (1 - для порта Сош 1,2— для порта Corn 2 и т.д.) |
Settings | Устанавливает или возвращает следующие параметры: скорость обмена, наличие бита четности, число бит данных, число стоп-битов. Может устанавливаться как при создании элемента, так и во время работы приложения. |
PortOpen | Открывает и закрывает коммуникационный порт. |
Input | Возвращает символы, находящиеся в буфере приема. |
Output | Посылает строку символов в буфер отправки. |
Элемент управления коммуникациями реагирует только на событие OnComm. Это событие соответствует изменению значения свойства CommEvent. При возникновении события можно, проанализировав значение свойства CommEvent, вызвать соответствующий обработчик события.
Так же, как и остальные управляющие элементы, элемент управления коммуникациями дает возможность легкой настройки свойств через диалоговую панель. Для этого достаточно в окне Properties перейти к пользовательским настройкам (Custom). В появившейся диалоговой панели можно установить необходимые свойства элемента управления.
# | Требуется цифра. |
. | Десятичная точка. Внешний вид данного символа при выводе зависит от текущих настроек системы Windows. |
, | Разделитель множества. Как и в предыдущем случае, внешний вид выводимого символа зависит от настроек операционной системы. |
: | Разделитель для поля времени. |
/ | Разделитель для поля даты. |
? | Требуется буква. Например, а - z или А - Z. |
& (или С) | Требуется символ ASCII, код которого находится в промежутке 32-126 или 128 -255. |
> | Переводит все вводимые символы в верхний регистр. |
< | Переводит все вводимые символы в нижний регистр. |
А | Требуется буква или цифра. |
а | Позволяет ввести букву или цифру. |
9 | Позволяет ввести цифру. |
К примеру, маска "а9" позволяет, но не требует от пользователя введения двух символов. Первым символом может быть любая буква или цифра, вторым -только цифра.
Все остальные символы, которые не указаны в таблице, непосредственно выводятся на экран. (Если надо просто вывести один из специальных символов, не учитывая его значение, просто поставьте перед ним символ обратной косой черты \. Например, маска "\##" выводит на экран символ #, после которого следует поле для ввода цифры).
Для создания ноля ввода времени и даты можно использовать одну из предопределенных масок.
Пустая строка (" " в коде) | (Используется по умолчанию.) Означает отсутствие маски ввода. В этом случае панель редактирования с маской ввода ведет себя как обычная текстовая панель. |
## - ??? - ## | Маска для ввода даты (соответствует стандарту, принятому в США). |
## - ## - ## | То же самое. За исключением того, что название месяца заменяется его номером. |
##:## ?? | Маска для ввода времени (расширенный формат). |
##:## | Маска для ввода времени (сокращенный формат). |
Одним из наиболее редко используемых событий при работе с панелями редактирования с маской ввода является событие Validation Error. Оно имеет место при попытке пользователя ввести неверные данные. (Это событие может использоваться только для установления факта ввода символа, не соответствующего маске.)
IvwIconO | 0 | (Используется по умолчанию.) Каждый объект List Item состоит из полноформатной иконки и метки. |
IvwSmallIcon 0 | 1 | Каждый объект List Item представляется иконкой малого размера и меткой, расположенной справа от иконки. Все элементы выравниваются по горизонтали. |
IvwList | 2 | Как и в предыдущем случае, каждый объект .состоит из иконки малого размера и текстовой Сметки, расположенной справа от иконки. Но при .этом все объекты представляются в виде списка. |
IvwReport | 3 | Каждый объект элемента List Item представляется иконкой малого размера и меткой. Иконки и метки располагаются в колонках. Также для вывода пояснительного текста используются дополнительные колонки. |
Изображаемые элементы управляющего элемента List View называются List Item объектами. Каждый объект List Item имеет собственные свойства, описывающие его поведение. Наиболее важные из них представлены в таблице далее.
Также можно выбрать заголовок для выводимого столбца в управляющем элементе List View. Для этого необходимо установить значение True/False для свойства Hide Column Headers. Соответствующий заголовок хранится в объекте Column Header, а все заголовки колонок собраны в коллекцию Column Headers.
Icons | Возвращает или позволяет установить индекс или ключ для иконки, ассоциированной с объектом List Item. |
Selected | Сообщает о том, что объект List Item был выбран пользователем (или позволяет его выбрать самостоятельно). |
Smalllcons | Возвращает или позволяет установить индекс или ключ для иконки малого размера, ассоциированный с объектом. |
Subltems | Возвращает или позволяет установить поясняющую строку для подэлемента, ассоциированного со специальным объектом List Item. |
Text | Задает текст, который будет виден пользователем. |
Совет:
Совет:
Для сохранения системных ресурсов можно привязать элемент Image List к управляющему элементу List View. Для этого надо установить ссылки свойств Icons и Smalllcons элемента List View на управляющий элемент Image List. Также можно указать соответствующий элемент Image List во время проектирования, воспользовавшись свойством (Custom) диалоговой панели.
0 | (Используется по умолчанию.) Размер и положение элемента могут быть произвольными. |
1 | Линейка расположена наверху формы и имеет ширину, равную ширине формы. |
2 | То же самое, но линейка расположена снизу от формы. |
3 | Линейка выровнена по левому краю формы, а ее высота равна высоте формы. |
4 | То же самое, но линейка выровнена по правому краю формы. |
Точно так же, как и в случае с полосой прокрутки, можно, изменяя свойства Min и Мах, установить границы изображаемой линейки прогресса. Свойство Value определяет текущую позицию прогресса.
Совет:
Совет:
Для того чтобы изобразить большее количество блоков внутри линейки, можно уменьшить высоту или увеличить ширину управляющего элемента.
Рассмотрим пример: пусть необходимо изобразить количество времени, прошедшего с начала какого-нибудь процесса. Для этого создадим элемент управления таймером, метку и линейку прогресса.
Теперь установим для свойства Min значение 0, а для свойства Мах - значение 60. Свойство Interval для элемента управления таймером следует установить в 1000 (что соответствует 1 секунде). Тогда следующий фрагмент кода будет изображать при помощи линейки прогресса прошедшее время (в секундах).
Private Sub Timerl_Timer ()
Static Progress As Integer
Progress = (Progress + 1) Mod 60
Labell.Caption = Str$(Progress) & " seconds elapsed."
ProgressBarl.Value = Progress
End Sub
SbrText | (Используется по умолчанию.) Позволяет выводить произвольный текст или картинку. Выводимый текст определяется значением свойства text. Вывод картинки осуществляется при помощи метода Load Picture. |
SbrCaps | Если клавиша CAPS LOOK была нажата, то слово CAPS выводится отчетливыми символами, в противном случае - слово выводится приглушенным серым цветом. |
SbrNum | То же самое, но для клавиши NumLock. |
SbrIns | То же самое, но для клавиши Insert. |
SbrScrl | То же самое, но для клавиши ScrollLock. |
SbrTime | Служит для вывода текущего времени в текущем используемом системой формате. |
SbrDate | Служит для вывода текущей даты в текущем используемом системой формате. |
И наконец, необязательный параметр picture задает соответствующее растровое изображение. Например, следующий фрагмент кода:
Private Sub Form Load()
Dim MyPanel As Panel
StatusBar1.Panels(1).Text. = "Default panel exits already"
Set MyPanel = StatusBarl.Panels.Add(,,, sbrTime)
Set MyPanel = StatusBarl.Panels.Add(,,"Panel demo")
Set MyPanel = StatusBarl.Panels.Add(,,,, LoadPicture("C:\VB\ICONS\TRAFFIC\TRFFC01.ICO"))
End Sub
создает строку состояния.
Заметим, что приходиться использовать переменные объекта для создания панели с соответствующими свойствами. Однако можно заменить это двумя строками кода, первым шагом создав панель.
Например:
MyPanel = StatusBarl.Panels.Add
MyPanel == StatusBarl.Panels(2).Text = "Panel demo"
Еще одним свойством, связанным со строкой состояния, является свойство AutoSize. Оно может принимать следующие значения.
SbrNoAutoSize | (Используется по умолчанию.) Запрещает автоматическую установку размера. |
SbrSpring | При изменении размера родительской строки состояния автоматически высчитывается новый размер области. (Ширина области не может быть меньше, чем ширина, определяемая свойством MinWidth окна состояния). |
SbrContents | При наличии свободного места размер панели соответствует ширине, необходимой для помещения надписи. |
Примечание:
Примечание:
В некоторых приложениях бывает необходимо размещать только один элемент в строке состояния. (Например, многие программы используют строку состояния для вывода пояснений при выборе какого-либо пункта меню, но при закрытии меню выводят в эту строку информацию общего назначения.) В этом случае необходимо установить для свойства Style значение Simple (константа SbrSimple используется во время выполнения приложения). После этого надо назначить необходимый для вывода текст свойству SimpleText.
Tbr Default | (Используется по умолчанию.) Указывает на то, что кнопка является обычной нажимаемой кнопкой (push button). |
Tbr Check | Кнопка является кнопкой проверки (check button). |
Tbr Button Group | Кнопка принадлежит к группе. Это означает, что данная кнопка не может быть нажата до тех пор, пока нажата другая кнопка группы. В одно и то же время только одна кнопка из группы может находиться в нажатом состоянии. |
Tbr Separator | Кнопка представляет собой обычный разделитель, имеющий стандартную ширину в 8 пикселов. |
Tbr Placeholter | Кнопка представляет собой разделитель с переменной шириной |
И, наконец, параметр image задает ключ или индекс для ассоциации с изображением, предварительно сохраненным в элементе Image List.
Так же, как и в случае с объектом Panel, можно сначала добавить кнопки, а затем описать их свойства. Например, если надо на этапе проектирования добавить только одну кнопку с надписью "First button", следует воспользоваться следующим фрагментом кода:
Tooibarl.Buttons.Add
Toolbarl.Buttons(2).Caption = "Second button"
Tooibarl.Buttons.Add
Toolbarl.Buttons(3).Caption = "Third button"
Примечание:
Примечание:
Свойство AllowCustomize позволяет пользователю управлять такими настройками панели инструментов, как выравнивание колонок, скрытие и вывод панели и другими. Соответствующее меню вызывается при двойном щелчке мыши по панели инструментов. Можно запретить подобные действия путем установки значения свойства AllowCustomize в False. Для получения более подробной информации следует обратиться к справочной системе.
Optimize for Fast Code | Максимально увеличивает скорость выполнения. |
Optimize for small Size | Минимизирует размер. Вероятно, этим значительного преимущества перед простым использованием р-кода достигнуто не будет. |
No Optimize | Компилирует без оптимизации. |
Favor Pentium Pro | Оптимизирует код таким образом, что он лучше всего работает на процессоре Pentium Pro. Код, сгенерированный с этой опцией, будет работать и с более ранними процессорами, но на процессорах 486 и Pentium (даже если они используют MMX), будет работать медленнее, чем тот код, но сгенерированный без этой опции. |
Create symbolic Debug Info | Используется, когда надо запустить свой VB-код на отдельном отладчике, такой как один из отладчиков фирмы NuMega или тех, что поставляются с компонентами Microsoft DevStudio. |
Примечание:
Примечание:
Программа, которая выполняет большое количество циклов, такая, как, например, стандартные тесты, покажет поразительное ускорение - часто даже десятикратное по сравнению с программами на Visual Basic 4. На практике, однако, ускорение, вероятно, будет значительно меньше (часто менее 50 процентов, иногда даже около 20 процентов).
Creat a setup Programm | Сообщает о том, что требуется создать обычную программу установки на гибких дисках. Если также установить опции Generate Dependency File, то матер установки создаст отчет, содержащий информацию о файлах, которые использует приложение. |
Creat Internet Download Setup | Эта опция используется только для элементов управления ActiveX и создает все необходимые файлы таким образом, что кто-либо по сети Internet сможет использовать этот код. |
Generate Dependency File Only | Установка этой опции только создает отчет, содержащий информацию о файлах, которые использует приложение. |
Options.
Options.
Возможные опции описаны в следующей таблице.
Печать информации в RichTextBox
Печать информации в RichTextBox
Метод SelPrint позволяет печатать текущее отформатированное содержимое данного элемента управления на текущий принтер. Если при этом пользователь выделил текст внутри RichTextBox, то метод SelPrint посылает на принтер только выделенный фрагмент. Если текст не выделен, то на принтер посылается все содержимое RichTextBox. Чтобы перевести принтер в состояние готовности (Ready), необходимо послать сперва на него пустую строку. Далее необходимо использовать контекст устройства для текущего принтера. (Контекст устройства представляет собой целое число, которое Windows использует для идентификации объекта.)
Таким образом, пример программы будет выглядеть так:
Printer.Print. " "
RichTextBoxl.SelPrint(Printer.hDC)
(Свойство hDC объекта Printer определяет идентификатор контекста устройства. Он используется Windows для специальных целей и лучше не вникать в то, как он работает.)
Переход на новую строку
Переход на новую строку
В ранних версиях Visual Basic одним из основных способов использования функции Chr является формирование управляющих символов для перехода к новой строке в программах. Переход к новой строке используется при работе с многостроковыми полями ввода или при добавлении информации в информационной панели. Как и в старых печатных машинках, для перехода на новую строку необходимо проделать две операции: перевод каретки (carriage return) для возврата к первому символу строки, а затем перевод строки для перехода на следующую строку. При использовании функции Chr переход на новую строку выглядит так:
vbCrLf = Chr (13) + Chr (10)
Но теперь имеется возможность использовать встроенную константу vbCrLf.
Например, необходимо разорвать строку в информационной панели или в многостроковом поле ввода. Быстрее всего это реализовать с использованием vbCrLf:
TextString$ = "Visual Basic For Windows" + vbCrLf
TextString$ = TextString$ + "Osborne McGraw-Hill" + vbCrLf
TextString$ = TextString$ + "Berkeley, CA"
Textl.Text = TextString$
Совет:
Совет:
Если пренебречь установкой свойства MultiLine в значение True и попробовать применить переход на новую строку, то на экране можно будет увидеть две интересные вертикальные линейки прокрутки.
Кстати, может возникнуть вопрос: почему строковые значения сначала "накапливаются", а только затем выводятся на экран. Ответ прост: это один из основных способов ускорения работы программ на Visual Basic.
Совет:
Совет:
Гораздо быстрее сначала скомпоновать всю строку, а затем использовать свойство Text, чем изменять его постоянно.
Аналогичным образом можно ускорить формирование информационной панели, если в ней необходимо вывести несколько строк:
Message$ = "This will be on line 1."
Message = Message$ + vbCrLf + "This will be on line 2."
MsgBox Message$
Переменные.
Переменные.
В Visual Basic переменные хранят информацию (значения). При их использовании Visual Basic резервирует область в памяти компьютера для хранения данной информации. Имена переменных могут достигать 255 символов в длину, начинаются они с буквы, за которой могут следовать другие буквы, цифры или символы подчеркивания. Регистр символов и наименований переменной значения не имеет. Следующая таблица перечисляет некоторые возможные имена переменных и объясняет, подходят ли они по стандарту.
Почему Windows и почему Visual Basic?
Почему Windows и почему Visual Basic?
Графические интерфейсы пользователя, или GUIs, революционизировали микрокомпьютерную индустрию. Они продемонстрировали, что выражение "Лучше один раз увидеть, чем сто раз услышать не потеряло своего смысла для большинства пользователей компьютеров. Вместо загадочной командной строки. С:>, которую как долго наблюдали пользователи DOS, теперь они смотрят на "рабочий стол" (desktop), заполненный значками программ, управляя ими при помощи мыши или посредством меню.
Вероятно, при длительном использовании Windows то, как выглядят приложения, менее важно, чем-то, как они созданы. В Windows, как правило, программы имеют стандартный интерфейс пользователя. Это означает, что пользователи потратят больше времени на работу с приложением и меньше на изучение меню, диалоговых панелей и комбинации клавиш (Конечно, приложения Windows 95 и Windows NT 4.0 выглядят немного не так, как приложения Windows 3.1: стандарты сохраняются внутри версий Windows, а не между ними).
В то время как программисты испытывают смешанные чувства к GUIs, он нравится начинающим пользователям, поэтому от любых программ Windows ожидается соответствие модели GUI. Поэтому, если необходимо разработать программу для любой из версий Windows, программисту понадобится эффективное средство для разработки приложений с графическим интерфейсом пользователя.
За все это долгое время существовало лишь несколько таких средств разработки. До появления Visual Basic в 1991 году разработка приложений Windows была намного тяжелее процесса создания приложений для DOS. Программисты должны были позаботиться буквально обо всем, например, о работе с мышью, обработке событий меню, и даже отслеживать, щелкнул пользователь один либо два раза в конкретном месте экрана. Разработка приложений Windows требовала экспертных знаний по программированию на языке С и сотен строк кода для выполнения простейшие задач. Проблемы были даже у профессионалов. (Комплект Microsoft Windows Software Development Kit, необходимый в то время в дополнение к компилятору С, весил тогда около пяти килограммов).
Вот почему, когда появился Visual Basic 1. 0, Билл Гейтс, глава и владелец компании Microsoft, назвал ею "внушительным". Стив Гибсон из Infoworld описал данный язык как "новое великолепное чудо", которое сильно изменит взгляд людей на использование Microsoft Windows". Стюарт Олшоп, давая интервью газете "New York Times", назвал Visual Basic "идеальной средой разработки программ 90-х годов". Чарльз Петцольд, автор одной из классических книг по программированию на С для Windows, писал в "New York Times": "Для тех из нас, кто всю свою жизнь посвятил обучению сложностям программирования Windows, Visual Basic представляет реальную угрозу потерять средства к существованию". Последняя версия Visual Basic продолжает данную традицию: сложные приложения Windows 95 и Windows NT разрабатываются теперь за гораздо меньший период времени. Ошибки в программах (bugs) возникают не так часто, и их локализация происходит быстрее и легче. С Visual Basic программирование в Windows не становится более эффективным, но оно становится более простым (в большинстве случаев).
Примечание:
Примечание:
Последняя версия Visual Basic предназначена для Windows 95 и Windows NT; ее нельзя использовать при разработке приложений для Windows 3.1.
В частности. Visual Basic позволяет добавлять к окнам поля ввода (text boxes), меню, командные кнопки (command buttons), переключатели (option buttons), флажки (check boxes), списки (list boxes), линейки прокрутки (scroll bars), a также диалоговые окна для выбора файла или каталога. Программист может использовать сетку (grid) для обработки табличных данных, организовать взаимодействие с другими приложениями Windows и доступ к базам данных. (Кстати, в Visual Basic такие компоненты обычно называют элементами управления.)
На экране одновременно может находиться несколько окон. Они должны иметь полный доступ к буферу обмена (clipboard) и к информации большинства приложений Windows, работающих в то же время. Можно использовать Visual Basic для взаимодействия с другими приложениями, работающими под управлением Windows, используя наиболее современную версию технологии OLE фирмы Microsoft.
Однако все более ранние версии Visual Basic могли в той или иной степени выполнять вышеописанные задачи. Что же особенного добавлено к последней версии Visual Basic? В двух словах ответ состоит в том, что Visual Basic теперь поддерживает элементы ActiveX.
Примечание:
Примечание:
Если читатели еще не знакомы с этим последним писком моды, то вот его краткое описание -ActiveX представляет собой технологию Microsoft для активизации работы с Интернет и корпоративными интернет-сетями, причем данная технология может использоваться в обычных приложениях Windows для увеличения продуктивности работы пользователей. Идея состоит в том, что появляется возможность загрузить из Интернет небольшой компонент. Эта программа увеличивает функциональность вашего броузера или операционной системы. (Кстати, обычным термином для такого небольшого компонента является наименование "элемент управления ActiveX". Существуют специальные версии элементов управления, о которых мы только что говорили.)
Приведем пример того, как пользователь может загрузить компоненты ActiveX для добавления полезных функций к странице Web. Предположим, что на ней размещена движущаяся картинка и он хочет загрузить ее к себе на компьютер и просмотреть. У Microsoft есть компонент ActiveX Movie, загрузить его можно из ActiveX Gallery no адресу www.microsoft.com/activex/gallery, а затем использовать. Более того, добавив его один раз к своей системе, пользователю не придется загружать его еще раз. Каждый раз, когда страница Web будет содержать объект "active movie", броузер Internet Explorer (а вскоре и Netscape Navigator) сможет использовать один и тот же элемент Active Movie уже из операционной системы пользователя для просмотра видеоматериала.
Примечание:
Примечание:
Даже фирма Netscape объявила о поддержке ActiveX в следующих версиях Navigator. Дополнительный модуль (plug-in) к Netscape Navigator 3 для Windows 95, предназначенный для поддержки ActiveX, уже доступен от лаборатории NCompass (www.ncompasslabs.com).
Большинство наиболее интересных элементов управления в Visual Basic являются элементами ActiveX, поэтому их можно использовать без изменений в броузере с поддержкой ActiveX. Два примера - это сетка (grid control) и элемент управления, использующий одну из стандартных диалоговых панелей для обработки файлов. Даже элементы ActiveX, наиболее мощные из всех, занимают менее чем 200 килобайт каждый. Более специализированные (но тем не менее очень мощные) элементы ActiveX, укладываются в 20 килобайт. На одну дискету 3,5 легко можно уместить 50 наиболее мощных элементов ActiveX.
Примечание:
Примечание:
Некоторые из наиболее общих элементов управления, такие как поля ввода и командные кнопки Visual Basic, фактически не являются стандартными элементами ActiveX; их обычно называют внутренними элементами управления (intrinsic controls). Это происходит из-за того, что они автоматически становятся частью программы на Visual Basic и не могут находиться вне ее, в отличие от элементов ActiveX.
Смысл всего вышесказанного состоит в том, что если выбрать одну из многих новых возможностей Visual Basic 5 с целью объяснить, в чем ее сильное отличие от ранних версий, то можно сказать так: "Можно строить свои собственные элементы управления ActiveX полностью на базе Visual Basic". Впервые программисты на Visual Basic могут расширять данный язык, используя только его возможности. Теперь они могут создавать свои элементы ActiveX, тем самым используя полностью всю мощь и простоту Visual Basic, которые всегда являлись отличительными чертами данного языка.
На этом этапе может возникнуть вопрос о производительности: работают ли приложения Visual Basic 5 медленнее по сравнению с более ранними версиями языка? Ответом будет сенсационное "Нет!". Фактически профессиональные версии Visual Basic 5 впервые могут генерировать исполняемый код (т.е. создавать исполняемые ЕХЕ-модули). Предыдущие версии Visual Basic бьши интерпретаторами. Если не вдаваться в отличия между компилятором и интерпретатором VB, то результатом является исполнение программ Visual Basic 5 со скоростью в 10-20 раз быстрее, чем это было в предыдущих версиях.
Подробнее о переменных
Подробнее о переменных
В отличие от большинства версии BASIC, в одной программе Visual Basic нельзя использовать имена переменных, отличающиеся только типом (идентификатором), например, А% и А!. При попытке использовать двойное имя возникает ошибка "двойное определение" (duplicate difmition) при запуске программы.
При первом использовании переменной Visual Basic временно присваивает ей пустое значение и тип variant. Это значение исчезает в тот момент, когда переменной присваивают реальное. Каждый тип данных имеет свой образец "пустого" значения. Для строковых переменных это строка нулевой длины (" "). Для численных переменных это ноль. Полагаться можно только на значения по умолчанию, если они документированы (например, в комментариях). Иначе придется столкнуться с множеством трудно уловимых ошибок. Поэтому рекомендуется инициализировать значения переменных в первых строках процедур обработки событий.
Полезные свойства и методы для объекта Printer
Полезные свойства и методы для объекта Printer
Если изучить контекстную справку, то можно убедиться в наличии у объекта Printer 40 свойств и 12 методов. Большинство из них еще незнакомы читателю, например, DrawMode. Однако их знание является очень важным в плане работы не только с принтером, но и с формами. Ниже следует краткое описание некоторых наиболее часто используемых свойств и методов объекта Printer. (См. электронную документацию по тем свойствам и методам, которые не описаны здесь, а также документацию по символьным константам, обозначающим различные установки принтеров.)
Последний экран в Application Wizard
Рисунок 1-10.
Последний экран в Application Wizard.
Первым шагом при построении приложения Visual Basic является планирование того, что пользователь видит на экране, другими словами, разработка интерфейса. Какие меню понадобятся? Окно какого размера требуется для приложения? Сколько всего будет окон? Должен ли пользователь иметь возможность изменять размеры окон? Где разместить кнопки для управления приложением? Будут ли в приложении размещены поля для ввода текста? Какой тип элемента управления подойдет для решения данной задачи? Подходят ли элементы управления из данной версии Visual Basic или их необходимо приобретать или разрабатывать самим?
Количество элементов управления, находящихся в распоряжении программиста, зависит от редакции Visual Basic, а также от состояния его кошелька или количества времени, потраченного на их разработку. В стандартную редакцию входит более 20 элементов управления, в версии Professional и Enterprise - более 50. Более того, поскольку Visual Basic подталкивает независимых разработчиков к созданию большого количества элементов управления для особых задач, почти всегда можно найти готовый элемент для решения любой проблемы. (Microsoft оценивает количество только коммерческих элементов управления более чем в 2000 единиц, не считая буквально бесчисленного множества бесплатных и условно-бесплатных.) В заключение нельзя не отметить следующее: пользоваться новыми возможностями VB5 можно, применяя либо готовые элементы управления, либо разрабатывая их с самого начала (последнее, при всем уважении к читателю, не совсем подходящий способ).
Хотя мы еще многое не попробовали, но автор хочет повторить еще раз, что в конечном счете Visual Basic отличается от остальных средств программирования простотой разработки интерфейса пользователя и его связи с кодом программы. В действительности можно просто нарисовать этот интерфейс; такой подход очень напоминает графический редактор. После того как разработка интерфейса завершена, кнопки управления, поля и другие элементы, размещенные на пустой форме, автоматически будут распознавать действия пользователя, такие, например, как движение мыши или щелчок ее кнопки. Visual Basic включает в себя мощные средства разработки меню, что делает создание обычных и всплывающих меню простым делом.
Только после того как подготовлен интерфейс программы, начинается процесс, похожий на традиционное программирование. Это второй шаг при построении приложений Visual Basic: создание программного кода для активизации визуального интерфейса, подготовленного на первом этапе. Смысл состоит в том, что объекты Visual Basic распознают события типа щелчков мыши; то, как они их обрабатывают, зависит от программного кода, написанного программистом.
Общей ошибкой является использование следующего
Предупреждение:
Общей ошибкой является использование следующего выражения:
Dim X, Y, Z As Integer
в предположении, что все три переменные будут целого типа. Фактически в данном случае переменные Х и Y будут объявлены как variant, и только Z - как integer. Чтобы избежать этого, необходимо каждый раз использовать идентификатор типа.
Если переменная объявлена при помощи оператора Dim, в случае использования переменной с тем же именем и другим идентификатором типа произойдет ошибка "двойное определение" при запуске программы. Например, если следующее выражение Dim Count As Integer объявляет переменную Count, то нельзя использовать переменные CountS, Count!, Count# и Count@. Можно использовать только имя Count%, но это всего лишь другая форма для имени переменной Count.
И, наконец, чтобы присвоить переменной тип variant, используют оператор Dim без As:
Dim Foo 'объявляет Foo переменной типа variant
Можно написать и так:
Dim Foo As Variant ' проще для прочтения
Примечание:
Примечание:
Некоторые программисты используют соглашение о наименованиях, по которому перед именем переменной указывается префикс с ее типом строчными буквами, например, sngInterestRate или intCount.
использование элемента управления ярлыками
Пример: использование элемента управления ярлыками
При создании этого управляющего элемента нужно:
определить необходимое количество закладок;
определить для каждой закладки необходимый элемент управления.
Число закладок задается значением свойства Tabs (по умолчанию это значение равно 3). Если необходимо создать несколько рядов с закладками, надо воспользоваться свойством Tabs Per Row. При этом Visual Basic автоматически поместит необходимое количество закладок в рабочую форму. При помощи свойства Caption можно изменить надпись на закладке. (Если надо добавить горячую клавишу, то перед соответствующим символом необходимо поставить знак амперсанда &.) Свойство Picture позволяет поместить изображение на закладку. Свойства Tab Height и Tab Width задают геометрические размеры закладки.
Следующим шагом является назначение каждой закладке соответствующего элемента управления. Для этого надо выбрать нужную закладку, щелкнув по ней указателем мыши. В качестве элемента управления, соответствующего закладке, можно использовать любой обычный элемент, используя технологию работы с контейнерными элементами. (Не следует забывать о недопустимости использования метода двойного щелчка.)
Примечание:
Примечание:
После запуска проекта диалоговый элемент управления с закладками работает обычным образом. Пользователь может перемещаться по закладкам при помощи комбинаций клавиш CTRL+TAB, CTRL+SHIFT+TAB или посредством горячих клавиш, описанных в свойстве Caption.
Как и в случае с обычными диалоговыми панелями, можно использовать в элементе управления закладками кнопки ОК и Cancel.
Совет:
Совет:
При помощи свойства Border Style можно сделать из диалогового управляющего элемента с закладками обычную диалоговую панель. Можно также расположить кнопки ОК и Cancel за пределами элемента управления.