Система программирования Turbo Pascal

Your trusted source for ремонт рояля.            

Фрагмент палитры TProgram



Фрагмент палитры TProgram

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

Палитры Turbo Vision задаются в виде обычных текстовых строк. Это дает возможность применять к палитрам все операции и преобразования, которые используются при работе со строковыми данными. Для изменения k-го элемента палитры TProgram следует изменить k-ый символ в строке, указатель на которую возвращает функция GetPalette. Пусть, например, нам нужно, чтобы во всех окнах скроллера стандартный цвет текста (желтый на голубом фоне) был заменен на белый на черном фоне. Тогда можно использовать такой прием:

Uses Арр,...; 

type

TMyProgram = object (TApplication) 

Constructor Init;

.....

end;

Constructor TMyProgram.Init; 

begin

GetPaletteA[13] := #$0F; {Задаем белый цвет на черном фоне} 

TApplication.Init {Инициируем программу} 

end;

В этом фрагменте в конструкторе TMyProgram.Init осуществляется замена 13-го элемента палитры: этот элемент отвечает за цвет основного текста скроллера (см. рис. 17.3). После такого изменения во всех скроллерах программы основной текст будет выводиться белыми символами на черном фоне.

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




каким по счету элементом в палитре окна-владельца скроллера определяется цвет полос: в нашем примере это элемент с номером 5. Таким образом, палитра скроллера должна содержать значения 5 и 7 вместо прежних 6 и 7 (см. рис. 17.2). Создадим новый объект:

type

TMyScroller = object (TScroller)

Function GetPalette: PPalette; Virtual;

end;

Function TMyScroller.GetPalette: PPalette; 

const

NewColors = #5#7;

NewPalette: String [2] = NewColors; 

begin

GetPalette := @NewPalette 

end;

Существует и менее универсальный, но более простой путь изменения цвета только в одном видимом элементе. Как мы знаем, изображение этого элемента в конечном счете формируется в его методе Draw; если этот метод перекрывается в Вашей программе, а в некоторых случаях, например в скроллере, он должен обязательно перекрывается, то можно воздействовать на цвет непосредственно при обращениях к процедурам MoveChar и MoveStr. Например:

type

MyScroller = object (TScroller) 

Procedure Draw; Virtual;

end;

Procedure MyScroller.Draw; 

var

Color: Byte;

.....

begin

(* Color := GetColor(l); {Стандартный цвет скроллера} *) 

Color := $0F; {Задаем белые символы на черном фоне}

.....

MoveChar(...,...,Color,...); 

MoveStr(...,...,Color);

.....

end;

В этом примере в строке комментария (* ..... *) указывается обычный способ получения стандартного цвета основного текста скроллера. Вместо этого желаемый цвет задается нужными атрибутами в переменной Color, которая затем используется при обращениях к процедурам MoveChar и MoveStr.

Палитра TProgram насчитывает 63 элемента и учитывает все возможные функциональные действия, осуществляемые видимыми элементами (см. прил.П6). Более того, этот объект на самом деле имеет три 63-элементных палитры: CColor (цветная палитра), CBlackWhite (черно-белая) и CMonoChrome (монохромная). В установочной секции модуля Views на основе тестирования аппаратных средств ПК из этих палитр выбирается рабочая палитра, которая затем и будет использоваться при формировании изображений. При необходимости Вы можете переустановить палитру TProgram с помощью глобальной процедуры SetVideoMode, например:

Program MyProgram; Uses 

Views,....; 

var

Main: TApplication;

.....

begin {Начало основной программы} 

SetVideoMode(smBW80); {Выбрать черно-белую палитру} 

Main.Init; {Инициация программы}

.....

end;

Обращение к SetVideoMode должно предшествовать инициации основной программы, работающей в среде Turbo Vision. Параметром обращения к этой процедуре может быть одна из следующих констант:

const

smBW80 = $002; {Черно-белый режим работы цветного адаптера} 

smCO80 = $003; {Цветной режим работы} 

smMono = $007; {Монохроматический адаптер}

Эти константы можно дополнять константой

const

smFont8x8 = $100; {Задает 43/50 строк для экрана EGA/VGA.}

для задания режима вывода 43 или 50 строк на экране дисплея, оснащенного адаптером EGA или VGA. Например:

SetVideoMode(smC080+smFont8x8);



Содержание раздела