3-й бит (bfGrabFocus) - фокусирование кнопки при ее активизации
мышью.
Инициализируется кнопка конструктором Init :
constructor tButton.Init(var Bounds: tRect;
ATitle: tTitleStr; ACommand:Word;AFlags:Byte);
где Bounds - поле, выделяемое под кнопку;
ATitle - текст, размещаемый на кнопке;
ACommand - код команды, связанной с кнопкой;
AFlags - задаваемые флаги кнопки.
Выделяемое под кнопку поле должно быть достаточных размеров,
чтобы в нем отобразилась вся кнопка с текстом и ее тень.Поэтому высоту
кнопки не следует брать меньше двух, а ширина зависит от размещаемого
текста.
Выбрать кнопку можно с помощью мыши, подведя курсор и нажимая на
клавишу, либо с помощью клавиши Tab, а затем клавиши Enter.При выборе
кнопки она формирует событие-команду с кодом команды, который был за-
дан кнопке.В качестве параметра кнопка передает указатель на себя.
Статический (tStaticText) и параметрический (tParamText) тексты
Статический текст предназначен для размещения в диалоговом окне
различной поясняющей информации.
Инициализация осуществляется при помощи метода Init :
constructor tStaticText.Init(var Bounds: tRect;
const AText: String);
где Bounds - поле, выделяемое под статический текст;
AText - размещаемый текст.
Поле, выделяемое под статический текст, должно быть достаточных
размеров, чтобы можно было расположить все слова текста.Текст автома-
тически делится на слова и размещается в выделенном поле без переносов
внутри слов.
Разновидностью статического текста является параметрический
текст, позволяющий модифицировать выводимый текст в зависимости от за-
даваемых параметров.Для того, чтобы указать, в каком месте текста сле-
дует разместить параметры и какого типа, в исходном тексте используют-
ся спецификации там, где должны быть размещены параметры.
Инициализируется параметрический текст методом Init:
constructor tParamText.Init(var Bounds: tRect;
const AText: string; AParamCount: Integer);
где Bounds - поле, выделенное под параметрический текст;
AText - исходный текст со спецификациями параметров;
AParamCount - число параметров текста.
Списки строк
Списки строк в диалоговом окне напоминают поле скроллинга и его
потомков для обычных окон и предназначены для просмотра тех или иных
списков.
Список строк (тип tListViewer) является абстрактным объектом, из
него можно получить реальный объект, который будет работать с конк-
ретным списком информации (вертикальный и горизонтальный скроллинг).
Непосредственным потомком списка строк является список коллекции
строк (типа ListBox), предназначенный в первую очередь для просмотра
коллекции строк (только вертикальный скроллинг).
Инициализируется список коллекции строк с помощью конструктора
Init :
constructor tListBox.Init(var Bounds: tRect;
ANumCols: Word; AScrollBar: pScrollBar);
где Bounds - поле, выделенное под список;
ANumCols - число колонок, в которые выводятся строки;
AScrollBar - указатель на линейку вертикального скроллинга.
Стандартные окна
В Turbo Vision имеется большое количество стандартных окон, имею-
щих специальное назначение.Рассмотрим стандартные информационные ок-
на.Заголовок функции MessageBox имеет вид :
function MessageBox(const Msg: string; Params:
Pointer; AOptions: Word): Word;
где Msg - размещаемое в окне сообщение;
Params - указатель на параметры сообщения;
AOptions - флаги;
результат - код команды, связанной с нажатой кнопкой диалогового
окна.
Функция формирует окно размером 40*60, в котором помещается сооб-
щение Msg, скорректированное параметрами, находящимися по адресу, оп-
ределяемому значением Params и набор кнопок, определяемый параметром
AOptions, который определяет также тип окна (его название).
СОЗДАНИЕ СТРОК СОСТОЯНИЯ
Строка состояния не является необходимым атрибутом.Однако ее ис-
пользование помогает пользователю проще работать с программой, так как
он может получить информацию о текущем состоянии программы и клавишах
быстрого управления.Если программа должна иметь строку состояния, то
ее создание следует начинать непосредственно после создания меню прог-
раммы с тем, чтобы потом одновременно рассматривать команды, формируе-
мые меню и строкой состояния.
Строка состояния, отображающая клавиши быстрого управления
Каждый элемент строки состояния , содержащий информацию о конк-
ретной клавише (их совокупности) быстрого управления, имеет стандарт-
ный тип-запись tStatusItem :
tStatusItem = record
Next: pStatusItem;
Text: pString;
KeyCode: Word;
Command: Word
end;
где Next - указатель на следующий элемент строки состояния;
Text - указатель на строку, содержащую выводимый на экран текст
для данной клавиши быстрого управления;
KeyCode - код клавиши быстрого управления, с помощью которой можно
выбрать данный элемент строки состояния;
Command - код команды, которую следует выполнить при выборе данно-
го элемента строки состояния.
Создать элемент строки состояния можно с помощью стандартной
функции NewStatusKey :
function NewStatusKey(const AText: string;
AKeyCode: Word; ACommand: Word; ANext:
pStatusItem); pStatusItem;
где AText - выводимый на экран текст;
AKeyCode - код клавиши быстрого управления;
ACommand - код команды, которую следует выполнить при выборе дан-
ного элемента;
ANext - указатель на следующий элемент строки состояния;
результат - указатель на созданный элемент строки состояния.
Сама строка состояния имеет стандартный тип-запись tStatusDef :
tStatusDef = recerd
Next: pStatusDef;
Min, Max: Word;
Items: pStatusItem;
end;
где Next - указатель на следующую строку состояния;
Min, Max - миним. и максим. границы диапазона параметра контекс-
тной помощи, для которого отображается именно эта строка состояния;
Items - указатель на первый элемент списка элементов.
Элементы строки состояния также как и строки состояния представ-
ляют собой линейный список.
Для создания строки состояния можно воспользоваться стандартной
функцией NewStatusDef :
function NewStatusDef(AMin, AMax: Word;
AItems: pStatusItem; ANext: pStatusDef): pStatusDef;
где ANext - указатель на следующую строку состояния;
AMin, AMax - миним. и максим. границы диапазона параметра контекс-
тной помощи, для которого отображается именно эта строка состояния;
AItems - указатель на первый элемент списка элементов.
В строке состояния также можно отразить информацию о состоянии
программы в конкретный момент времени (процесс, протекающий в програм-
ме и т.д.)Информация такого вида зависит от значения параметра кон-
текстной помощи активизированного в настоящий момент элемента програм-
мы.Вывести такую информацию можно с помощью метода Hint объекта
tStatusLine :
function tStatusLine(AHelpCtx : Word): string; virtual;
где AHelpCtx - значение параметра контекстной помощи;
результат - строка символов, выводимая на экран.
ЦВЕТОВАЯ ПАЛИТРА TURBO VISION
Turbo Vision позволяет манипулировать цветом изображения объектов
на экране.При этом можно использовать стандартный набор цветов, задан-
ный в пакете, который охватывает расцвечивание всех стандартных объек-
тов и создает благоприятные цветовые ощущения у пользователя програм-
мы, или создавать свою палитру.
Стандартная палитра
Все стандартные отображаемые объекты имеют свою цветовую палитру
- набор цветов для отдельных элементов этого объекта, а окна и диало-
говые окна - по три палитры.Учитывая структуру отображаемых объектов
программы и то, что все отображаемые объекты программы за исключением
основного объекта tApplication, являются подэлементами какой - либо
группы, для каждого такого объекта палитра представляется строкой,
компонентами которой являются не атрибуты цветов, а номера элементов
палитры данной группы.
Если в программе достаточно использовать цвета основной палитры
по их прямому назначению, то никаких действий по раскрашиванию предп-
ринимать не надо, так как цвета выбираются при отображении на экране
соответствующего объекта с помощью метода Draw :
procedure <отображаемый объект>.Draw; virtual;
который, в свою очередь, использует методы GetPallete :
function <отображаемый объект>.GetPallete:
pPallete; virtual;
определяющий указатель на конкретную палитру объекта, и GetColor :
function tView.GetColor(Color: Word): Word;
где Color - номер входа в палитру;
результат - атрибуты соответствующего цвета.
Изменение стандартной палитры
Если требуется изменить уже существующий цвет у всех использующих
его объектов, то следует просто внести изменения в основную палит-
ру.Для этого нужно либо внести изменения в исходный текст модуля App
(константа CAppColor) и перекомпилировать его, либо внести изменения
в метод GetPallete объекта tProgram.
Второй вариант - когда нужно изменить цвета у какого-нибудь объ-
екта группы, а в этой группе есть другой объект, обладающий необходи-
мыми цветами.В этом случае можно изменить соответствующим образом
константу, определяющую палитру у метода GetPallete.
Если необходимо изменить цвета конкретного объекта, а требуемого
сочетания цветов у его владельца нет, то следует дополнить основную
палитру программы новыми элементами, соответствующими требуемым цве-
там.Так как основная палитра исходно имеет 127 элементов, то примерно
столько же можно к ней добавить в случае необходимости.После этого
следует переопределить метод GetPallete основного объекта программы.
В тех случаях, когда следует предусмотреть частое изменение цве-
тов отдельных объектов в процессе выполнения программы, можно восполь-
зоваться средствами модуля ColorSel.
НЕОТОБРАЖАЕМЫЕ ОБЪЕКТЫ TURBO VISION
Помимо отображаемых, в Turbo Vision имеется ряд неотображаемых
объектов, предназначенных для выполнения действий, не связанных непос-
редственно с представлением информации на экране, в частности проверки
вводимой информации или размещения в них той или иной информации.
Основными неотображаемыми объектами являются анализаторы вводимой
информации, коллекции, потоки и ресурсы.Все эти объекты - потомки объ-