Урок 11 1. Метки и их свойства Вы уже сделали несколько проектов с использованием такого элемента управления, как метка, и уже знаете, что метка (label) - это поле, заполняемое программистом текстовой информацией и недоступное пользователю для редактирования. Содержимое метки определяется значением ее свойства Caption. Прямой вывод текста или рисование на метке не допускается. Объекты типа “метка” обычно служат для отображения небольших блоков текста. Метки обладают как стандартными свойствами, такими как Font Bold, Font Italic, Font Name, Font Size, Font Underline, Height, Left, Name, Top, Visible, Width, так и некоторыми другими, описанными ниже. Alignment (выравнивание). Это свойство определяет, каким образом размещается название метки. По умолчанию свойство Alignment равно нулю, т.е. Left Justify, что выравнивает метку по левой границе. Прочие значения: 1 - Right Justify - выравнивание по правой границе и 2 - Center - выравнивание по центру. Auto Size (автоподстройка размера). Если это свойство имеет значение True, размер поля метки автоматически подгоняется под размер текста, заданный свойством Caption. Если же свойство Auto Size соответствует False, метка сохраняет размер, установленный при проектировании, лишние символы длинного текста отсекаются. Border Style (тип границ). Это свойство способно принимать всего два значения: 0 контур поля метки отсутствует (устанавливается по умолчанию) и 1 - метка очерчивается одинарными линиями. Enabled (доступ). Обычно равно True, а если присвоить False, текст метки поблекнет (станет серым) и обработка событий, связанных с действиями мышью, будет запрещена. Объекты типа “метка” воспринимают события Click и DblClick так же, как и окна рисунков, изображений и формы. 1.1 Проект с prjFaces Сделаем следующий проект. На форме с именем frmFaces поместим метку с именем lblStatement, элемент Image с именем imgFace и командную кнопку cmdExit для выхода из программы. Нарисуйте две картинки с изображением грустной и веселой рожицы в графическом редакторе и запишите эти два файла на диск. На метке сотрите текст по умолчанию, чтобы перед запуском проекта она была пуста. После запуска проекта на метке должна распечатываться информация приблизительно такого содержания: 1 Когда пользователь нажмет мышкой один раз на метке, то текст сообщения на ней изменится, и на элементе imgFace появится грустная физиономия. Это может выглядеть примерно вот так: После двойного щелчка пользователем мышкой на метке картинка на элементе image должна смениться на другую. Для того чтобы сделать такой проект, нужно обработать несколько событий. При загрузке формы нужно менять значение Caption метки. Составьте код для этого события: Private Sub Form_Load( ) End Sub В коде для события Click на метке lblStatement должно меняться значение свойства Caption метки lblStatement и с использованием функции Load Picture загружаться соответствующая картинка на объекте imgFace. Составте этот код. Private Sub lblStatement_Click( ) End Sub В коде для события DblClick на метке lblStatement должна с использованием функции Load Picture меняться картинка. Составьте этот код. Private Sub lblStatement_DblClick( ) End Sub Используя все подходящие значения свойств метки, описанных в настоящем уроке, сделайте проект на компьютере, отладьте его. 2 2 Линейки прокрутки Горизонтальные и вертикальные линейки прокрутки (scroll bar) действуют совершенно одинаково. Эти объекты позволяют узнавать о позиции движка (scroll box), кроме того контролировать диапазон действия линейки прокрутки и дискретность перемещения движка. Например, если вы с помощью линейки прокрутки программируете регулятор громкости, можно задать диапазон от 0 до 10 с шагом единица. Если вы с помощью линейки прокрутки, например, моделируете педаль газа в автомобиле, имеет смысл задать диапазон от 0 до 100 с ценой деления 5 единиц. В панели элементов линейки прокрутки представлены следующими пиктограммами: 2.1 Свойства линеек прокрутки Стандартные свойства, поддерживаемые объектами типа «линеек прокрутки» включают: Enabled, Height, Left, Name, Top, Visible, Width. К их специфическим свойствам относятся LargeChange, Max, Min, SmallChange и Value. Value (текущая позиция). Это свойство содержит число, которое отражает текущую позицию движка на линейке прокрутки. При изменении этого свойства программным путем Visual Basic перемещает движок в соответствующую позицию. Если значение свойства выходит за пределы, установленные свойствами Min и Max, сообщается об ошибке. Max (максимум). Значение этого свойства может находиться в интервале от –32 768 до 32 767. Когда движок попадает в крайнюю правую или нижнюю позицию, это число присваивается свойству Value. Min (минимум). Значение этого свойства может находиться в интервале от –32 768 до 32 767. Когда движок попадает в крайнюю левую или верхнюю позицию, это число присваивается свойству Value. LargeChange (постраничное изменение). Это свойство определяет величину, которая добавляется или вычитается из значения свойства Value при щелчке внутри линейки прокрутки. SmallChange (построчное изменение). Это свойство определяет величину, добавляемую или вычитаемую из значения свойства Value при щелчке на одной из стрелок, указывающих направление прокрутки и расположенных на концах линейки. 3 2.2 События, связанные с линейками прокрутки К наиболее важным событиям, связанным с линейками прокрутки, относятся Scroll (прокрутка) и Change (изменение). Событие Scroll непрерывно генерируется при перемещении мышью движка по линейке. Событие Change возникает после изменения позиции движка. Таким образом, событие Scroll позволяет динамически отслеживать позицию движка на линейке прокрутки, а Change - определять его конечное положение. Все ранее рассмотренные нами процедуры и методы не применимы к объектам типа “линейка прокрутки” 2.3 Проект, в котором мы понаблюдаем за работой линеек прокрутки На пустую форму поместим поле метки и горизонтальную линейку прокрутки. В нашем проекте на метке должны отображаться значения, соответствующие свойству Value линейки прокрутки. При перемещении движка мы сможем увидеть изменения, происходящие с значением этого свойства. Воспользуемся именами, которые дал Visual Basic форме, линейке прокрутки и метке по умолчанию, соответственно Form1, Hscroll1, Label1. Свойству Caption формы зададим значение Линейка прокрутки. Свойству метки BorderStyle присвоим значение 1 – Fixed Single, а ее свойство Caption приравняем пустой строке. Свойства горизонтальной линейки прокрутки зададим следующим образом. Свойство Значение LargeChange 10 Max 100 Min 0 SmallChange 2 Теперь составим процедуру для линейки прокрутки события Change. Sub Hscroll1 Change( ) Label1.Caption = Str$(HScroll1.Value) 4 End Sub Так как свойство метки Caption способно воспринимать только строковые значения, придется с помощью функции Str$ преобразовывать величину HScroll1.Value в строку. Теперь сделаем код для обработки события Scroll линейки прокрутки. Sub Hscroll1_Scroll( ) Label1.Caption =”Текущая позиция:”+ Str$(HScroll1.Value) End Sub Запустите свой проект. При щелчках на серой области линейки прокрутки, значения, отображаемые строкой метки, буду изменяться с шагом в 10 единицы, а при щелчках стрелок на концах линейки – с шагом в 2 единицы. Перемещая движок мышью, можно изменять значения позиции, показываемое на метке с произвольной дискретностью, а не только 2 или 10. Процедура обработки события Scroll непрерывно обновляет строку метки при перемещении движка. Закончите работу с проектом. 5 3. Таймеры Элемент управления таймер (timer) - это объект, способный инициировать события через регулярные промежутки времени. Таймер программируют присвоением определенных значений (в миллисекундах) свойству interval; тем самым задают периодичность возникновения событий, связанных с таймером. 3.1 Свойства и события таймера Стандартные свойства таймеров Name и Enabled. Самое важное свойство объектов этого типа Interval. Интервал (в мс) между двумя событиями может принимать любые значения в диапазоне от 0 до 65535. Интервал, равный нулю, отключает таймер. Если вам нужно, чтобы события от таймера возникали n раз в секунду, то для подсчета значений свойства Interval можно пользоваться формулой 1000/n. Например, чтобы система генерировала события таймера 2 раза в секунду, в свойство Interval надо записать число 500 (т.е. 1000/2). Когда доступ к таймеру разрешен, событие Timer генерируется через равные промежутки времени. 3.2 Проект Metronome В этом проекте на основе двух объектов – таймера и линейки прокрутки – создается модель метронома. На форме в новом проекте поместим горизонтальную линейку прокрутки и таймер. У левого конца линейки прокрутки разместите метку, введите в ее свойство Caption строку Медленно. Аналогичную метку вставьте у правого конца линейки и определите ее свойство Caption как строку Быстро. Свойство Name формы, таймера и линейки прокрутки оставим данное по умолчанию этим элементам Visual Basic, соответственно Form1, Timer1, Hscroll1. Свойству Caption формы присвойте значение Метроном. Вот приблизительно что у вас должно получиться: Установите свойство таймера Interval на значение 1000. Присвойте следующие значения свойствам горизонтальной линейки прокрутки: 6 Свойство Значение LargeChange 100 Max 300 Min 1500 SmallChange 25 Value 1000 Теперь составим процедуру Change для линейки прокрутки, которая должна синхронизировать таймер с линейкой прокрутки. Privat Sub Hscroll1_Change( ) Timer1.Interval = Hscroll1.Value End Sub Вторая процедура Timer для объекта таймер должна формировать «удары» метронома (динамик вашего компьютера будет издавать сигналы «бип»). Private Sub Timer1_Timer( ) Beep End Sub После запуска проекта метроном отсчитывает 1 такт в секунду. Перемещение движка по линейке изменяет частоту звучания метронома. 7