ЗАДАНИЕ XXXVII

Тема: Битовые карты.
Цель: Ознакомиться с методами работы с битовыми картами в среде Stratum 2000.

Для работы необходимо:

владеть основными приемами работы в системе Windows
владеть основными приемами работы в Stratum 2000

Файлы с битовыми картами

    Это файлы с расширениями *.gif, *.pcx, *.tga, *.bmp, *.rle, *.jpg. Самые распространенные из них - это *.gif, *.bmp и *.jpg. Они содержат в себе прямоугольные графические изображения, которые можно загружать и редактировать. В среде Stratum для создания собственных битовых карт и редактирования существующих имеется  встроенный Редактор битовых карт.

Функции для работы с битовыми картами

    Битовые карты загружаются из файлов с помощью функции CreateDIB2d. Но сразу после загрузки работать с битовой картой нельзя, так как предварительно необходимо вставить ее как объект в графическое пространство. Это осуществляется с помощью функции CreateBitmap2d.
    После создания битовой карты как двумерного объекта ее можно перемещать, поворачивать и изменять область ее видимости. Первые две операции осуществляются с помощью функций SetObjectOrg2d и RotateObject2d. Третья - SetBitmapSrcRect. Для того, чтобы определить текущие видимые размеры битовой карты, используется функция GetBitmapSrcRect.

Bitm1.GIF (1007 bytes)

    На рисунке приведен пример видимых размеров битовой карты. Верхняя, светлая часть - видимая, а нижняя, затемненная - невидимая. Красные линии показывают границы видимой области.
    Кроме вышеперечисленных, существуют еще 2 функции для работы с битовыми картами: GetDibObject2d и SetDibObject2d. Первая позволяет определить дескриптор битовой карты, используемой заданным двумерным объектом, а вторая - установить другую битовую карту на место прежней в заданном объекте.

Задание

Требуется создать проект, имитирующий управление подниманием/опусканием шлагбаума.

Нарисуйте с помощью редактора битовых карт или любого другого графического редактора шлагбаум в двух состояниях: поднятом и опущенном. Второе состояние должно располагаться прямо под первым. То есть рисунок будет как бы состоять из двух равных по размеру частей, причем расположение неподвижных элементов в этих частях должно быть неизменным относительно левого и верхнего краев половинок. От того, насколько точно выполнено это условие, будет зависеть правильность работы проекта. Сохраните в файл полученный рисунок

В новом проекте создайте имидж, содержащий следующий текст:

HANDLE HSpace, HObject, HDib
FLOAT x, y, invisible
if (~HObject)
rez := SetObjectOrg2d(~HSpace,~HObject,~x,~y)
rez:=SetBitmapSrcRect2d(~HSpace,~HObject,0,~SizeY * ~faz,~SizeX,~SizeY *(1+ ~faz))
faz := 0
else
FileName := FileLoadDialog("","BMP|Bitmap files(*.bmp)|*.bmp|All files |*.*|","")
HDib := CreateDoubleDIB2d(~HSpace,~FileName)
HObject := CreateDoubleBitmap2d(~HSpace,~HDib,~x,~y)
SizeX := GetObjectWidth2d(~HSpace,~HObject)
SizeY := round(GetObjectHeight2d(~HSpace,~HObject)/2,0)
rez:=SetBitmapSrcRect2d(~HSpace,~HObject,0,0,~SizeX,~SizeY)
rez := SetObjectSize2d(~HSpace,~HObject,~SizeX,~SizeY)
endif

Вставьте в схему этого проекта имиджи LGSpace и WinButton. Соедините переменную faz созданного имиджа с переменной pressed имиджа WinButton. Запустите проект.

В появившемся окне открытия файла выберите тот, в котором содержится Ваш рисунок. На экране появится окно, а в нем - шлагбаум в одном из 2-х положений. Нажмите кнопку в этом окне. Шлагбаум должен изменить положение.

В том случае, если наблюдается изменение положения неподвижных элементов шлагбаума при нажатии кнопки, необходимо подкорректировать рисунок.