Краски, палитры, заполнения
Процедура GetPalette
Возвращает размер и цвета текущей палитры. Заголовок:
Procedure GetPalette(var Palettelnfo: PaletteType);
Здесь Palettelnfo – переменная типа PaletteType, возвращающая размер и цвета палитры.
В модуле Graph определена константа:
const MaxColors =15;
И тип:
type PaletteType = record Size: Word; {Количество цветов в палитре} Colors: array [0..MaxColors] of Shortlnt {Номера входящих в палитру цветов} end;
С помощью следующей программы можно вывести на экран номера всех возможных цветов из текущей палитры.
Uses Graph; var Palette: PaletteType; d,r,e,k: Integer; begin {Инициируем графику} d: = Detect; InitGraph(d, r, ' '); e: = GraphResult; if e <> grOk then WriteLn(GraphErrorMsg(e)) else begin GetPalette(Palette); {Получаем палитру} CloseGraph; {Возвращаемся в текстовый режим} with Palette do {Выводим номера цветов} for k: = 0 to pred(Size) do Write(Colors[k]:5); end end.
Процедура SetAllPalette
Изменяет одновременно несколько цветов палитры. Заголовок процедуры:
Procedure SetAllPalette(var Palette);
Параметр Palette в заголовке процедуры описан как нетипизированный параметр. Первый байт этого параметра должен содержать длину N палитры, остальные N байты – номера вновь устанавливаемых цветов в диапазоне от -1 до MaxColors. Код -1 означает, что соответствующий цвет исходной палитры не меняется.
В следующей программе происходит одновременная смена сразу всех цветов палитры.
Uses Graph, CRT; var Palette: array [0..MaxColors] of Shortint; d,r,e,k: Integer; begin {Инициируем графику} d: = Detect; InitGraph(d, r, ''); e: = GraphResult; if e <> grOk then WriteLn(GraphErrorMsg(e)) else begin {Выбираем толстые сплошные линии} SetLineStyle(SolidLn, 0, ThickWidth); {Выводим линии всеми доступными цветами} for k: = 1 to GetMaxColor do begin SetColor(k); Line(GetMaxX div 3,k*10.2*GetMaxX div 3,k*10) end; Palette[0]: = MaxColors; {Размер палитры} repeat {Цикл смены палитры} for k: = 1 to MaxColors do Palette[k]: = Random(succ(MaxCoLors)); SetAllPalette(Palette) until KeyPressed; if ReadKey=#0 then k: = ord(ReadKey); CloseGraph end end.