Часть 1. Основы Visual Basiс
На главную самоучителя
21.01.2005
Глава 12.
Что такое ActiveX? Добавление ActiveX В проект.
Индикатор хода выполнения Progress Bar. Скользящая шкала Slider.
Скачать исходник примера "Generator"
Скачать исходник примера "SliderPic"

Что такое 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 © 2005 4us
Сайт создан в системе uCoz