Краски, палитры, заполнения
Функция GetBkColor
Возвращает значение типа Word, содержащее текущий цвет фона. Заголовок:
Function GetBkColor: Word;
Процедура 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.