Часть
1. Основы Visual Basiс
|
||||||
21.01.2005 | ||||||
Глава
12.
|
||||||
Что
такое ActiveX? Добавление ActiveX В проект.
Индикатор хода выполнения Progress Bar. Скользящая шкала Slider. |
||||||
Что такое ActiveX? |
Мой дорогой
друг. Когда ты устанавливал на жесткий диск Visual Basic 6.0, то в твой компьютер
скачалось много всякого добра, и в том числе некоторые файлы средств управления
ActiveX. Эти файлы лежат в c:\Windows\System или c:\Windows\System32
и имеют расширение .ocx. Большинство этих файлов представляют собой отдельные
средства ActiveX, но например, тот, что мы будем рассматривать сегодня
(Microsoft Windows Common Controls 6.0) включает в себя аж девять средств
управления ActiveX. Некоторые средства ActiveX перечислены на
странице "Элементы
ActiveX". Вот сейчас мы о некоторых и поговорим.
Начнем с самых нужных и используемых. Одним из таких средств является индикатор
хода выполнения - Progress Bar. Если ты достаточно наблюдателен,то наверняка
заметил,что при выполнении длительных процессов (копирование файлов, загрузка
программ и т.п.) Windows выводит на экран окошко, где синенькая полосочка (индикатор
хода выполнения процесса), постепенно увеличиваясь в длине, показывает, какой
объем процесса выполнен, и вообще скорость процесса. Индикатор хода выполнения
позволяет юзеру не нервничать и утешаться тем, что процесс худо-бедно идет,
что он успеет раза два покурить и что компьютер не завис.
Элемент ActiveX: Индикатор ходы выполнения ProgressBar. |
Чтобы приступить
к использованию Progress Bar, его надо сперва добавить в панель инструментов
нашего нового exe-проекта (по-скольку это средство управления ActiveX
храниться в файле mscomctl.ocx). Сделать это - раз плюнуть. Для этого надо создать
exe-проект, затем в меню Проект надо щелкнуть по строке Компонеты
(Рис.22)
Рисунок
22.
Затем, в открывшемся окне списка средств управления найди строку Microsoft
Windows Common Controls 6.0 , щелкни в этой строке по полю флажка, поставив
галочку и нажми кнопку OK на окне (Рис.23).
Рисунок
23.
У тебя в панели инструментов появилось сразу несколько объектов. И в том числе
ProgressBar (Рис.24). Аналогично добавляются и другие средства ActiveX
из других файлов.
Рисунок
24.
Теперь ты можешь перетащить его на форму и начать с ним работать.
Он будет называться ProgressBar1. Основными свойствами, которыми мы будем
пользоваться являются:
.Min - минимальное числовое значение, с которого шкала начнет работать
.Max - максимальное числовое значение, на котором шкала дойдет до конца.
.Value - текущее числовое значение шкалы
кроме того можно использовать
.Scrolling - меняет прерывистую шкалу (0-ccScrollingStandard) на непрерывную
(1-ccScrillingSmooth)
.Orientation - установка в вертикальное (если приспичило) или горизонтальное
положение
Кроме того, понятно, что имеются всякие стандартные свойства (типа высота-длина,
видимый-невидимый и т.п), о которых и говорить-то нечего.
Вообще использовать
ProgressBar имеет смысл только в циклах (любых). Ты задаешь начальное
и конечное значение, а значение ProgressBar.Value меняется именно в цикле.
Собственно именно оно и заставляет шкалу изменяться. Использование этого объекта
рассмотри на примере программы Generator, которая иммитирует игрушки-гадалки.
Знаешь такие китайские игрушки: загадаешь желание, крутанешь шарик, а он потом
остановится и лампочка зажжется у слова типа "Никогда" или "Скоро".
Так вот, у нас у аналогичных слов (они заданы в окне свойств, а не в коде) будет
останавливаться шкала ProgressBar со свойством .Scrolling - 1-ccScrillingSmooth
(неперывная).
Объявим две переменные: первая для хранения сгенерированного случайного числа,
вторая - просто для цикла.
Dim
MyValue As
Long
Dim x As Long
Положим на форму командную кнопку Command1 и в ней напишем процедурку
Private Sub
Command1_Click()
Здесь
мы используем генератор случайных чисел. Мы уже использовали генерирование случайных
чисел в Главе
3 при создании программы "Однорукий
бандит", хоть и без оператора Randomize. Этот оператор просто
генерирует число и передает его в качестве опорного в функцию Rnd, которая
в свою очередь на основе этого числа генерирует случайное число от 0 до 1.
Randomize '
Инициализирует генератор случайных чисел.
Поскольку, функция Rnd возвращает число, меньшее единицы, мы умножаем его на 10000, а чтобы избежать нулевого значения, прибавляем единицу. Кроме того, получившийся результат округляем до целого числа с помощью функции Int. Эта функция просто отбрасывает дробную часть (а на самом деле не округляет). Синтаксис ее: Int(число). Аналогична ей функция Fix(число), которая работает так же, как и Int, но при округлении отрицательного числа приближает его к числу большему или равному, в то время как Int - к меньшему или равному.
MyValue = Int((10000 * Rnd) + 1) '
Возвращает случайное число от 1 до 10000.
Далее уже задаем начальное (1) и конечное (10000) значение ProgressBar1.
ProgressBar1.Min = 1
ProgressBar1.Max = 10000
Теперь организуем
цикл от единицы до полученного нами случайного числа.
В нем при каждом его выполнении значение ProgressBar1.Value изменяется,
что отображается на изменении шкалы.
For
x = 1 To
MyValue
ProgressBar1.Value = x
Next x
End Sub
Вот и вся программка. Да, еще хочу сказать, что число 10 000 выбрано для того, чтобы ProgressBar работал достаточно медленно. Скачать исходник можно вверху страницы.
При загрузке файла средств управления общего назначения в панели инструментов появились и другие объекты ActiveX. Обратим наши взоры на средство Slider, которое располагается через один и ниже ProgressBar'а, думаю, найдешь.
Элемент ActiveX: Скользящая шкала Slider. |
По сути своей
этот элемент очень похож на объект "полоса прокрутки ScrollBar",
который мы разбирали в Главе
4. Главными отличиями его являются внешний вид: Slider представляет
собой линейку с бегунком и отметками-маркерами (тиками), а также то, что его
максимальное значение не ограничено, как у ScrollBar'а значением 32767.
Элемент этот простой, я не буду повторять описание его свойств .Min,
.Max, .Value и т.п. Если пропустил, посмотри выше на этой странице.
Однако у Slider'а есть и другие свойства:
.LargeChange - величина, на которую изменится положение бегунка при щелчке
мышью по слайдеру
.TickFrequency - определяет с какой частотой на слайдере будут располагаться
маркеры (тики). Например, если у нас Slider1.Min=0, Slider1.Max=1000, а Slider1.TickFrequency=100,
то на всем слайдере будут равномерно располагаться (1000-0)/100+1 = 11 тиков,
первый из которых будет обозначать 0, второй - 100 и т.д., до последнего - 1000.
Как работать со слайдером, мы разберем примере программки SliderPic (скачать
ее можно вверху страницы). Практического применения ей я не вижу, но она иллюстрирует,
как с помощью слайдера можно изменять объекты. В нашем случае мы с помощью двух
слайдеров - горизонтального и вертикального будем менять, соответственно, ширину
и высоту Picture для того, чтобы в нее влезла картинка. Сразу оговорюсь, что
поскольку единица измерения размеров объектов в VB принята почему-то в твипах,
я все в твипах и оставлю. Если тебе охота перевести в другие единицы, например,
в пиксели,- пожалуйста (в Главе
6 мы использовали методы ScaleX и ScaleY для перевода в из одного измерения
в другое).
Итак, создадим exe-проект, положим на него Picture1 любого размера, но
желательно позиционировать его ближе к верхнему левому углу формы (а то куда
ж мы его расширять будем), и два слайдера -Slider1 (горизонтальный) и
Slider2 (вертикальный). Чтобы Slider2 стал горизонтальным, надо
его свойство .Orientation в окне свойств установить в 1-ccOrientationVertical.
Теперь пишем код.
Option Explicit
В процедуре загрузки формы
привяжем начало каждого слайдера к положению Picture
Private Sub
Form_Load()
Устанавливаем левую границу
Slider1 вровень с левой границей Picture1
Slider1.Left = Picture1.Left - 150
Также устанавливаем верхнюю
границу Slider2 вровень с верхней границей Picture1
Slider2.Top = Picture1.Top - 150
Как видишь,
мы здесь используем свойства .Top и .Left, которые есть практически
у всех объектов. Они показывают расстояние от края формы до границы объекта
сверху (.Top) и снизу (.Left).
Поскольку бегунок слайдера в нулевой позиции отстоит от начала самого слайдера
где-то на 150 твипов, я из значения положения картинки вычел это расстояние.
Далее загружаем картинку в Picture1. Прошу прощения, за ее пошлость,
просто под руку попалась.
Picture1.Picture = LoadPicture(App.Path & "\Lopes.jpg")
Затем устанавливаем свойства
для каждого слайдера. Значения .Max слайдеров я взял от фонаря, исходя
из того на сколько можно расширить картинку, чтобы она в экран влезала.
Slider1.Min = 0
Slider1.Max = 10215
Slider1.LargeChange = 500
Slider1.Value = Picture1.Width
Slider1.TickFrequency = 500
Slider2.Min = 0
Slider2.Max = 6975
Slider2.LargeChange = 500
Slider2.Value = Picture1.Height
Slider2.TickFrequency = 500
End Sub
Для каждого слайдера создаем
процедурку, где присваиваем значению ширины (или длины) Picture1 значение слайдера.
Private Sub
Slider1_Click()
Picture1.Width = Slider1.Value
End Sub
Private Sub Slider2_Click()
Picture1.Height = Slider2.Value
End Sub
Вот, собственно, и все.
|
Copyright
|