Процедура SetFillPattern

Устанавливает образец рисунка и цвет штриховки. Заголовок:

Procedure SetFillPattern(Pattern: FillPatternType;Color: Word);

Здесь Pattern – выражение типа FillPatternType; устанавливает образец рисунка для Fill – UserFill в процедуре SetFillStyle; Color – цвет заполнения.

Образец рисунка задается в виде матрицы из 8x8 пикселей и может быть представлен массивом из 8 байт следующего типа:

type

FillPatternType = array [1..8] of Byte;

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

На рис. 4.8 показан пример двух образцов заполнения. На рисунке черточкой обозначается несветящийся пиксель, а прямоугольником - светящийся. Для каждых 8 пикселей приводится шестнадцатеричный код соответствующего байта.

Следующая программа заполняет этими образцами две прямоугольных области экрана.

Рис. 4.8. Образцы заполнения и их коды

Uses Graph, CRT;

const

pattl: FillPatternType= ($49,$92,$49,$92,$49,$92,$49,$92);

patt2: FillPatternType= ($00,$18,$24,$42,$42,$24,$18,$00);

var

d,r,e: Integer;

begin {Инициируем графику}

d := Detect; InitGraph(d, r, '');

e := GraphResult; if e <> grOk then

WriteLn(GraphErrorMsg(e))

else

begin

if d=CGA then

SetGraphMode (0) ; {Устанавливаем цвет для CGA}

SetFillStyle(UserFill,White);

{Левый верхний квадрат}

SetFillPattern(Patt1,1);

Bar(0,0,GetMaxX div 2, GetMaxY div 2);

{Правый нижний квадрат}

SetFillPattern(Patt2,2);

Bar(GetMaxX div 2,GetMaxY div 2,GetMaxX,GetMaxY);

if ReadKey=#0 then d := ord(ReadKey);

CloseGraph

end

end.

Если при обращении к процедуре указан недопустимый код цвета, вызов процедуры игнорируется и сохраняется ранее установленный образец заполнения. В частности, если в предыдущем примере убрать оператор

if d=CGA then

SetGraphMode(0);

устанавливающий цветной режим работы CGA -адаптера, на экран ПК, оснащенного адаптером этого типа, будут выведены два одинаковых прямоугольника, так как обращение

SetFillPattern(patt2, 2);

содержит недопустимо большой для данного режима код цвета и обращение игнорируется. Сказанное, однако, не относится к процедуре SetFillStyle для значения параметра Fill в диапазоне от 0 до 11: программа будет нормально работать и в режиме высокого разрешения CGA-адаптера, причем все цвета палитры, кроме цвета фона, при этом заменяются на белый.