шутка.
Если вы желаете, чтобы во время работы программы играла фоновая музыка, просто расположите "Windows Media Player" за пределами видимой части формы (соответственно задав ему значения отступа сверху или слева — Тор или Left). Только помните, что воспроизводимый файл не сохраняется вместе с шаблоном или документом, содержащим программу, поэтому позаботьтесь о том, чтобы при инсталляции он оказался в известном программе месте (например, в папке автозагружаемых файлов Word или системном каталоге Windows), и чтобы путь к этому файлу в свойстве FileName соответствовал действительности.
Подключение элемента управления требуется только на этапе создания программы, — для того, чтобы он отображался на "Панели управления". Для работы программы, содержащей какой-нибудь дополнительный элемент управления, его подключение не требуется. Однако в том случае, если файл с этим элементом отсутствует на том компьютере, где запускается программа, то будет выдано сообщение об ошибке. Поэтому весьма желательно по возможности ограничиваться традиционными элементами управления или использовать лишь те из них, которые наверняка окажутся у пользователя программы. Впрочем, нужные библиотеки или файлы с элементами управления можно и установить вместе с программой современные программы — производители инсталляторов позволяют автоматически делать подобные установщики.
События форм. Необходимо помнить, что создание элемента — только начало работы над формой. Подавляющее большинство элементов сами по себе элемент никаких действий не выполняют, за исключением тех, которые их определяют. Кнопка — нажимается под мышкой или Enter'ом, список показывает значения, бегунок на полосе прокрутки двигается, во флажке можно поставить и убрать галку, но не более того! (Разве что "Windows Media Player" играет сам по себе.)
Для того, чтобы элемент выполнял какое-нибудь действие при действии с ним, нужно написать для него программу реакции на события.
Событий, могущих произойти с элементом, много. Это и двойной щелчок мыши на нем, это и проводка мыши над ним, это и ввод текста в поле ввода, это и нажатие на вкладке, это и переход к другому элементу, и многое другое.
Для того, чтобы написать программу обработки реакции на событие, нужно два раза щелкнуть на элементе. Откроется окно написания программ реакций на события, и автоматически написанная заготовка будет иметь вид:
Private Sub CommandButtonl_Click()
End Sub
Теперь в текст этой процедуры можно вводить команды, которые выполнятся, если событие в заголовке — Click мыши — произойдет. Это событие считается стандартным для кнопок, флажков, рисунков, рамок, переключателей и окон отображения текста. Для остальных стандартных элементов — полей ввода текста, полос прокрутки, счетчиков и др. — стандартным считается событие Change, то есть их изменение, а для дополнительных элементов управления — те события, которые заданы таковыми их создателями.
Список возможных событий для элемента можно получить, поставив курсор внутрь процедуры обработки стандартного события и выбрав нужное из выпадающего меню справа вверху окна написания программы (рис. 4.23). В выпадающем меню слева вверху этого окна указаны все процедуры и функции программы реакции формы на события.
Рис. 4.24. Выпадающий список событий.
В программе реакции формы на события могут быть и другие процедуры и функции, не связанные с элементами формы.
У некоторых событий есть параметры, с которыми информация об его происшествии передается программе. Так, процедура обработки события KeyDown (то есть нажатия какой-либо клавиши тогда, когда активен данный элемент) имеет вид
Private Sub CommandButtonl_KeyDown(ByVal KeyCode As MSForms.Returnlnteger, ByVal Shift As Integer)
End Sub
Переменная KeyCode будет после срабатывания данной процедуры будет иметь значение, равное коду нажатой клавиши, а переменная Shift — 1, если соответствующая клавиша была нажата, и 0, если нет. Эти переменные можно использовать в процедуре обработки события.
Подавляющее большинство свойств (для стандартных элементов управления — все), задаваемых в Окне свойств, можно изменять и из программы. Например, команда TextBox1.Enabled=True даст возможность пользователю ввести текст в поле ввода TextBox1, а команда CheckBox1.Value=False уберет галку из флажка с именем CheckBox1. Эта возможность делает формы Visual Basic for Applications динамическими — то есть содержимое форм может меняться немедленно в ответ на действия пользователя без выгрузки и повторной загрузки формы. Форма может работать как обычное диалоговое окно программы для Windows — например, выбор пользователем значения из списка может каждый раз выводить в форму какой-либо текст, разный для разных значений.
Наиболее часто возможность создания динамических форм используется для инактивации элементов, не могущих быть использованными при каких-либо условиях. К примеру, в форме, состоящей из поля ввода текста и кнопки, вызывающей процедуру вычисления квадратного корня, кнопка может становиться неактивной и не реагирующей на нажатия, если число, введенное в поле ввода, отрицательное.
Для просмотра формы в режиме выполнения (то есть так, как она будет выглядеть в готовой программе) надо нажать клавишу F5 — ту же, что и для запуска на выполнение обычной программы. Все средства отладки, описанные выше, работают и при отладке форм.
Для вызова формы из программы следует поместить в ее текст команду ИмяФормы. Show.
Стоит иметь в виду, что после выгрузки формы из памяти (командой Unload Me в одном из обработчиков событий формы) все переменные, описанные в программе реакции формы на события, обнуляются. Поэтому после выгрузки формы получить от нее какие-либо данные уже нельзя. Если в результате работы формы в основную программу должны передаваться какие-либо данные, то нужно в основной программе объявить несколько переменных с помощью инструкции Public, а затем в программе реакции формы на события записать в них всю необходимую информацию, полученную от пользователя, и использовать значения этих переменных в основной программе.
Форму можно убрать с экрана и методом Hide (командой ИмяФормы. Hide или Me.Hide в одном из обработчиков событий формы). При этом значения всех переменных формы сохраняются, и к ним можно обращаться из программы согласно правилам объектно-ориентированного языка. Например, для получения значения окна ввода текста скрытой формы используется примерно такая команда: "a=UserForml.TextBox1.Value".
В соответствии с правилами объектно-ориентированного языка можно обращаться и к элементам формы для задания их параметров или, наоборот, их считывания, до загрузки формы в память. При задании таким образом параметров формы при ее отображении будут использоваться именно они, а не те, которые заданы при создании формы в Окне Свойств. Однако после окончания работы программы эти изменения параметров будут потеряны, и в следующий раз форма и ее элементы будут иметь те же параметры, что и заданные в Окне Свойств изначально при их разработке, — то есть программно изменить значения параметров элементов формы, заданные в Окне Свойств при ее создании вручную, нельзя.
Программа