Процедура SetPalette

Заменяет один из цветов палитры на новый цвет. Заголовок:

Procedure SetPalette(N: Word; Color: Shortlnt);

Здесь N – номер цвета в палитре; Color – номер вновь устанавливаемого цвета.

Данная процедура может работать только с адаптерами EGA или VGA. Она не должна использоваться с IBM8514 или 256-цветным вариантом VGA – для этих адаптеров предназначена особая процедура SetRGBPalette (см. ниже). Первоначальное размещение цветов в палитрах EGA/VGA соответствует последовательности их описания константами Black,....White, т.е. цвет с индексом 0 – черный, 1 – синий, 2 – зеленый и т.д. После обращения к процедуре все фрагменты изображения, выполненные цветом с индексом N из палитры цветов, получат цвет Color. Например, если выполнить оператор

SetPalette(2,White);

то цвет с индексом 2 (первоначально это - бирюзовый цвет Cyan) будет заменен на белый. Заметим, что цвет с индексом 0 отождествляется с цветом фона и может изменяться наряду с любым другим цветом.

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

Uses Graph, CRT;

var

d,r,e,N,k,color: Integer;

Palette : PaletteTyper;

begin

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

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

e := GraphResult; if e <> grOK then

WriteLn(GraphErrorMsg(e))

else

begin

{Выбираем толстые сплошные линии}

SetLineStyle(SolidLn, 0, ThickWidth);

GetPalette(Palette) ; {Текущая палитра}

for Color := 0 to Palette.Size-1 do

begin

SetColor(Color);

Line(GetMaxX div 3,Color*10,2*GetMaxX div 3,Color*10)

end;

{Меняем палитру и ждем инициативы пользователя}

while not KeyPressed do

for e := 0 to Palette.Size-1 do

SetPalette(e,Random(Palette.Size));

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

CloseGraph

end

end.