РАССЫЛКА #06 - 02.05.2001

Сегодня в выпуске

Новости сайта

02.05.2001 Ещё модули :о).
30.04.2001 Добавлены новые модули для VB.
07.04.2001 Добавлена новая статья, а также коллекция JavaScript'ов в разделе Internet технологии.


Вопрос-ответ

Имя: Vitaliy
E-mail: revenkov@hotbox.ru
Вопрос:
Привет,
У меня такой вопрос как в VB6.0 зделать так что бы запустить exe файл.
Ответить

Имя: Павел
E-mail: pasha_nik@mail.ru
Вопрос:
Где можно найти НЕ online библиотеку по API функциям?
Ответить

Имя: Аркадий
E-mail: arcadics@online.ru
Вопрос:
Определение типа файла (VB)
Ответить

    Вопросы можете задавать в соответствующем разделе сайта.


Пишем свой Progress Bar

    Чтобы сделать Progress Bar достаточно иметь объект, на котором можно рисовать. Например Picture Box.

    Есть два метода прорисовки бара: линиями или закрашенным прямоугольником. Наиболее быстрый способ второй, т.к. мы рисуем только одну линию по диагонали, а потом делаем из неё закрашенный прямоугольник, в то время как в первом мы рисуем несколько десятков линий. Но этот способ хорош тогда, когда Вы хотите сделать плавный градиент в Вашем баре. Мы рассмотрим все 2 случая.

    В первом случае мы рисуем линию из координат [0;0] (левый верхний угол) Picture Box'а до [x;ширина объекта], где x - координата, меняющаяся в зависимости от данного числа процентов. Поскольку эта координата - величина в пикселях, а мы знаем только в процентах, то надо расчитать сколько пикселей состовляет один процент

Sub ShowProgress(Obj As Control, PVal As Integer)
Dim PNum As Double

If PVal > 100 Then Exit Sub

If Obj.BorderStyle = 1 Then
    PNum = (Obj.Width - 4) / 100
Else
    PNum = Obj.Width / 100
End If


    Здесь ShowProgress - процедура для прорисовки бара, Obj - указатель на Picture Box, а PVal - количество процентов. Далее мы объевляем переменную PNum, в которой будет храниться количество пикселей на один процент. Её тип Double, а не Integer, т.к. целого количества пикселей может и не быть. Например длина бара 30 пикселей, а всего процентов 100, и получится, что один процент это 3.3333.... пикселей. VB округлит это число до 3 и мы будем видеть недокрашенный бар, когда будет 100%

    Далее идёт проверка на количество процентов: если больше 100, то выход.

    В последнем блоке операторов условия мы и присваиваем это самое число. Проверка на то, установлен ли параметер BorderStyle нужна для того, чтобы выяснить, есть ли рамочка. Она состовляет 4 пикселя и лежит не снаружи объекта, а внутри, так что влияет на наши расчёты.

    Теперь можно начать рисовать, но для начала нужно очистеть объект.

Obj.Cls

    Теперь в центре объекта печатаем количество процентов.

If Obj.BorderStyle = 1 Then
    Obj.CurrentX = (Obj.Width - 4) / 2 - Obj.TextWidth(PVal & "%") / 2
    Obj.CurrentY = (Obj.Height - 4) / 2 - Obj.TextHeight(PVal & "%") / 2
Else
    Obj.CurrentX = Obj.Width / 2 - Obj.TextWidth(PVal & "%") / 2
    Obj.CurrentY = Obj.Height / 2 - Obj.TextHeight(PVal & "%") / 2
End If
Obj.Print PVal & "%"


    Здесь мы опять проверяем параметер BorderStyle. Затем находим центер объекта и вычитаем из него половину длины полученного текста. Это нужно, чтобы текст печатался не с центра, а немного левее. Тогда надпись будет ровно в центре. Последний оператор выводит текст.

    Осталось только нарисовать сам бар.

Obj.Line (0, 0)-(PNum * PVal, Obj.Height), , BF

    Чтобы прямоугольник не закрасил надпись, а инверсировал её, нужно указать в параметрах объекта свойство DrawMode равное 10 - Not Xor Pen.

    Скачать модуль с этой процедурой можно с этой страницы.

    Во втором случае мы должны рисовать много линий.

For I = 0 To (PNum * PVal)
    Obj.Line (I, 0)-(I, Obj.Height)
Next I


    Для плавного градиента можно изменить код так.

Dim ColorPerPix As Double
ColorPerPix = 255 / Obj.Width
For I = 0 To (PNum * PVal)
    Obj.ForeColor = RGB(0, 0, ColorPerPix * I)
    Obj.Line (I, 0)-(I, Obj.Height)
Next I


    ColorPerPix - количество оттенков цветов на один пиксель.

API функции

Функция CreatePenIndirect

Описание: Создает объект перо. Созданное перо, описанное как логическое перо, через структуру передается функции. После того, как ваша программа завершила работу, используя перо, оно должно быть удалено через функцию DeleteObject.
Объявление:
Declare Function CreatePenIndirect Lib "gdi32" (lpLogPen As LOGPEN) As Long

Type POINTAPI
    x As Long
    y As Long
End Type

Type LOGPEN
    lopnStyle As Long
    lopnWidth As POINTAPI
    lopnColor As Long
End Type
Параметры: lpLogPen
Описание аттрибутов,передаваемых к создаваемому перу

Возвращаемое значение: В случае ошибки функция возвращает 0. В успешном случае функция возвращает дескриптор созданного пера.

Функция CreateSolidBrush

Описание: CreateSolidBrush создает объект Кисть, используемый для заливки областей фигур. После окончания использования этим объектом воспользуйтесь функцией DeleteObject для удаления объекта Кисть и освобождения ресурсов компьютера. Функция возвращает дескриптор к новому объекту Кисть.
Объявление: Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Параметры: crColor
Значение RGB цвета для кисти

Возвращаемое значение: Функция возвращает дескриптор к новому объекту Кисть. В случае ошибки функция возвращает 0.


Ссылки

Program Studio
Всё для программиста и WEB дизайнера.

All about Turbo Pascal and Borland Pascal
Здесь собраны книги и пособия по Turbo Pascal и Borland Pascal дистрибутивы Turbo и Borland Pascal и других утилит решения задач, исходники игр и программ.

Присылайте свои ссылки с описанием на e-mail или просто добавьте их в каталог ссылок, и они будут опубликованы в этом разделе.

Сайт рассылки: Program Studio
Автор: Павел

Ваши предложения можете присылать на prs@narod.ru.

Хотите опубликоваться? Присылайте свои статьи на prs@narod.ru и получите гонорар от 200 до 1500 показов RLE.
Hosted by uCoz