Переход на VB
Вот я поставил у себя VB (поскольку уж нельзя стало писать под однойтолькоDOS), и, в простоте душевной, думал, что и в нем сразу: раз! - и напишучтонибудь, - не тут то было! Я долгое время даже не мог понять, с какогоместаначинается выполнение при запуске.
Начал шарить по всем сайтам о VB для начинающих, и не нашел почтиничеготолкового - везде описания элементарных команд, типа "что такое процедура"и чемот нее отличается функция, как употреблять операторы IF и SELECT, и (даже!)чтоGO TO озачает по-русски "иди к ...".
Здесь ниже я излагаю самые начальные сведения об отличиях стиляпрограммирования в VB от QB. Я вылавливал эту (до смешного элементарную!)информацию по крупицам из книг времен Win 3.1, и желаю вам всем, чтобы вамнепришлось бы повторять подобное.
Итак, приступим.
Объектное программирование на VB сильно отличается от "классического"Бейсика.
Я бы сказал, что VB - это совершенно другой язык, который можно назватьБейсикомтолько за то, что используются те же самые команды, не более! Всяидеологиясовершенно другая.
Структура программы на алгоритмическом языке типа QB, как Вы,(полагаю)хорошо знаете, проста: она представляет собой линейную последовательностькоманд, которые поочередно выполняются, начиная с первой. (Ну, визвестныхслучаях, очередность изменяется, ветвится, и т. п., но, в целом этонесущественно.)
В объектном программировании все иначе. Тут все опирается на понятиеобъекта. "Объект " - это общее наименование кнопки, окна, формы и томуподобных.
(Не останавливаюсь здесь на понятии "форма", так как ее несложно простоувидетьна экране.)
А у каждого объекта есть "свойства" и "методы".
"Свойства" - это нечто вроде управляющих переменных, связанных собъектом.
Какое значение Вы в них запишете, так и станет выглядеть объект. И этоможнопроизводить прямо в программе. Свойством является цвет объекта, такжееговысота, ширина, местоположение (координаты). Текст в текстовом поле - тожеодноиз "свойств" этого поля (и задается, напр., простым присваиванием изстроковойпеременной). Свойства (т.е. их содержимое) можно оперативно изменять походупрограммы, и, таким образом, управлять объектами.
"Методы" - это обыкновенные команды, в применении к данному объекту.Например, метод Line имеется у графического поля, но отсутствует утекстового.
Тело программы в Visual Basic состоит целиком из процедур (подпрограмм)ифункций, как в Си. С каждым объектом сязано не менее одной процедуры. Когда по объекту происходит щелчок мыши, выполнение автоматическипередаетсясоответствующей связанной с объектом подпрограмме. (Это называется"событием". )
В теле подпрограммы могут содержаться команды изменения свойств не толькоэтого,но и других объектов, и вызовы подпрограмм, относящихся к другим объектам.
Такимобразом объекты влияют друг на друга, а процесс работы в целомуправляетсявоздействиями оператора через мышь или другие устройства.
В этой системе общая структура программы приобретает вид сетивзаимосвязанныхпроцедур.
Выполнение такой программы начинается с указанной формы. (Выбирается вменю:
Проект/Свойства Проекта/Главное/Объект Запуска). В этом случае, пристартепрограммы на экране появится выбранная форма и будет автоматическивызванапроцедура Form_Load() , связанная с ней. Если эта процедура пуста, т.е.состоит только из заголовка подпрограммы и конца, без команд между ними,тобольше ничего происходить не будет, пока щелчком мыши или другим "событием"небудет активизирована какая-нибудь из остальных процедур, имеющихся впрограмме.
ПРАВИЛА ЗАПИСИ ИМЕН.
В QB и ему подобных, не возникает никакого вопроса, поскольку имеетсяфиксированное (и небольшое) число устройств ввода-вывода и отображения:клавиатура, экран (в текстовом и графическом режимах). Адресатввода-выводазадается самой командой: если это Circle , ясно, что имеем дело с экраном,еслиinkey$ - с клавиатурой.
Но в Windows, напр. окон для вывода, может быть одновременно несколько, изначитследует явно указать, к какому из них относится команда (называемая вэтомслучае "методом").
Поэтому имена в VB являются составными, части разделяются точками вследующемпорядке:
ИмяФормы.ИмяОбъекта.Свойство
- Так обращаются к свойству объекта. Подобная конструкция может входить ввыражение справа или слева от знака равенства, подобно любой переменной.
ИмяФормы.ИмяОбъекта.Метод
- Вслед за этим обращением могут иметься параметры, если метод (т.е.команда)их требует.
ПОДПРОГРАММЫ И СОБЫТИЯ.
Заготовки подпрограмм (процедур) выполняемых при щелчке мыши по объектуобразуются автоматически, когда Вы создаете новые объекты на форме.
Эту заготовку можно вызвать на редактирование, дважды щелкнув по объектувовремя Вашей работы в среде VB (не во время выполнения создаваемойпрограммы!).
Первоначально она состоит только из заголовка и конца, и не содержитникакихкоманд. Желаемые команды Вы должны вписать сами. Если не требуется реакцийнащелчки, так и оставьте эту заготовку пустой, но совсем ее удалять неследует.
Кроме события "щелчок" (Click) существует еще DblClick - двойной щелчек. Какие еще существуют события у объекта? Это можно посмотреть, открывсписоксправа вверху окна кода. (При этом имя объекта надо выбрать из левогосписка.)
Связь между событием и его процедурой очень простая: имя процедурысоставляется из имени объекта и имени события за ним, разделенныхсимволомподчерка _ . В скобках могут находиться параметры, если событие способноихпередавать в процедуру.
Можно автоматически создать заготовку соответствующей процедуры, выбравимясобытия из помянутого правого списка в окне кодов.
РАЗМЕЩЕНИЕ ФРАГМЕНТОВ ПРОГРАММЫ.
При описанной структуре программы, расклад получается следующим. Поскольку щелчки мышью на объектах являются, фактически, заданиемисходныхусловий, то в их подпрограммах оказываются коды, связанные с обработкойисходныхданных.
Действия (инициализации), которые должны быть совершены предварительноиавтоматически при запуске, следует помещать в процедуру Form_Load(),вызывающуюся при старте формы.
Когда все исходные заданы, остается нажать кнопку "OK". Вот в ее-топроцедуруи попадает основное тело всех вычислений, которые надо совершить, икомандывывода результатов.
В модуле объявляются глобальные переменные или константы, если таковыедолжныбыть в программе.
КАК ... ?
Как вызвать желаемую форму на экран?- командой:
ИмяФормы.Show
Если добавить параметр vbModal то при таком вызове формы, обращение костальнымв это время блокируется, а если ,Me -то она будет все время поверхдругих.
Как закрыть форму?
Unload ИмяФормы
Если закрываем текущую форму (напр. кнопкой "Close"), можно использовать:
Unload Me
Как изменять размеры объектов синхронно с изменением размеров формы,содержащейих?
Пишем процедуру:
Private Sub Form_Resize()
" определение новых размеров объекта, например:
H = Me.Height - ybrdr : W = Me.Width - xbrdr
" изменение размера объекта:
If H > 0 Then ИмяОбъекта.Height = H
If W > 0 Then ИмяОбъекта.Width = W
End Sub
Эта процедура станет вызываться при каждом изменении размеров формы.
Me.Heigh и Me.Width - являются текущими высотой и шириной формы,содержащей процедуру. Из них вычисляем текущие высоту H и ширину W дляобъекта.
(ybrdr и xbrdr - это величины отступов края объекта от края формы. Выможетенаписать свои собственные вычисления.)
If защищают от ошибки. Если сужение формы не черезмерно,то в них размерам объекта присваиваются новые вычисленные значения.
ТЕХНИЧЕСКИЕ ПОДРОБНОСТИ.
Разрабатываемая программа в целом, - называется "проектом". На винтеонахранится вразбивку в нескольких файлах. Каждая форма и каждый модульсохраняются собственным файлом, причем имена этих файлов присвоенные поумолчанию, не изменяются автоматически вместе с переименованиемсоответствующейформы или модуля. Не забывайте переименовывать их вручную, если несколькопроектов Вы держите в одном каталоге, иначе можно неожиданно потерятьстарыеверсии файлов, имевших то же самое имя по умолчанию.
НЕКОТОРЫЕ "ОСОБЕННОСТИ" И ГЛЮКИ.
Билл не был бы Гейтсом, если бы сделал все по-человечески.
1. При работе с объектом "Календарь" замечено следующее: свойство Day идругие,дают правильный результат при смене выбранной даты только если ихзначениясчитываются в пределах процедуры, вызываемой кликом по календарю. Еслиобратиться к объекту "Календарь" из какого-либо другого места и проверитьегосвойства, значения получались неправильные. Пришлось вводить нужноеколичествоглобальных переменных и присваивать им значение внутри процедурыобработкисобытия, чтобы затем считывать в других местах. Не исключено, что идругиеобъекты могут вести себя подобным образом.
2. Если Вы объявляете несколько переменных одинакового типа, перечисляя ихчереззапятую, то название типа Вы должны подписать к каждой из переменныхперсонально:Dim A As Integer, B As Integer, C As Integer, ...
3. Глобальные (по всей программе) переменные и константы можно объявитьтолько вобъекте типа "модуль". Отчего такое ограничение - непонятно.
4. DATA - RESTORE в Визуал не поддерживаются.
5. Print допускается, но как-то так криво, для форм, что почти никогда недействует. Если не вдаваться в дебри отладчика, для контроля вместо Print[переменная] , пользуйтесь MsgBox [переменная].