TMenuBox Menus
+------------+
| TObject |
+------+-----+
+------+-----+
| TView |
+------+-----+
+------+-----+
| TMenuView |
+----+---+---+
+--------+ +------+
+----+-----+ +====+=====+
| TMenuBar | | TMenuBox |
+----------+ +==========+
Объекты MenuBox представляют вертикальные прямоугольники
меню. Они могут содержать произвольный список выбираемых
действий, включая элементы подменю. Как и в полосе меню,
для указания запрещенных элементов используется цвет.
Прямоугольники меню могут создаваться как подменю полосы
меню или других прямоугольников меню или могут
использоваться как отдельные выпадающие меню.
Методы
Init constructor Init(var Bounds: TRect; Amenu: PMenu;
AParentMenu: PMenuView);
Init настраивает параметр Bounds в соответствии с шириной
и длиной элементов в AMenu, затем создает прямоугольник
меню, вызывая TMenuView.Init.
Бит ofPreProcess в поле Options установлен так, чтобы
могли использоваться горячие клавиши. Установка State
включает sfShadow. Поле меню установлено в AMenu, которое
задает элементы меню. Поле ParentMenu установлено в
AParentMenu.
См. так же: TMenuView.Init, sfXXXX флаги состояний, ofXXXX
флаги опций, TMenuView.Menu, TMenuView.ParentMenu
Draw procedure Draw; virtual; Перекрывается: Редко
Рисует рамку прямоугольника меню и элементы меню цветом по
умолчанию.
GetItemRect procedure GetItemRect(Item: PMenuItem; var R: TRect;
virtual; Перекрывается: Редко
Перекрывает абстрактный метод в TMenuView. Возвращает
прямоугольник, занятый элементом меню. Используется для
определения, находится ли отметка мышкой на данном
элементе меню.
См. так же: TMenuView.GetItemRect
Палитра
Прямоугольники меню, как и все видимые элементы меню,
используют палитру по умолчанию CMenuView для отображения
элементов со 2 по 7 в палитру стандартной программы.
1 2 3 4 5 6
+====+====+====+====+====+====+
CMenuView | 2 | 3 | 4 | 5 | 6 | 7 |
+==+=+==+=+==+=+==+=+==+=+==+=+
Нормальный текст -+ | | | | +-- Короткий выбранный
Запрещенный текст -----+ | | +------ Запрещенный выбранный
Короткий текст -------------+ +------------ Нормальный выбранный
TMenuView Menus
+------------+
| TObject |
+------+-----+
+------+-----+
| TView |
+------+-----+
+======+=====+
| TMenuView |
+====+===+===+
+--------+ +------+
+----+-----+ +----+-----+
| TMenuBar | | TMenuBox |
+----------+ +----------+
TMenuView предоставляет тип абстрактного меню, из которого
порождаются полосы и прямоугольники меню. Вы вероятно
никогда не будете создавать экземпляров TMenuView.
Поля
ParentMenu ParenMenu: PMenuView; Только чтение
Указатель на объект TMenuView (или порожденный от него),
который владеет этим меню. Заметим, что TMenuView - не
группа. Здесь принадлежность намного проще, чем для
TGroup, позволяя вложенность меню: выбор подменю и
обратный возврат в "родительское" меню. Выборы из полос
меню, например, обычно приводят к "выпаданию" подменю. В
этом случае полоса меню - предок прямоугольника меню.
См. так же: TMenuBox.Init
Menu Menu: PMenu; Только чтение
Указатель на запись TMenu для этого меню, которая содержит
связанный список элементов меню. Указатель меню позволяет
обращаться ко всем полям элементов меню в видимом элементе
меню.
См. так же: TMenuView.FindItem, TMenuView.GetItemRect, тип
TMenu
Current Current: PMenuItem; Только чтение
Указатель на текущий выбранный элемент меню.
Методы
Init constructor Init(var Bounds: TRect);
Вызывает TView.Init, чтобы создать объект TMenuView
размера Bounds. По умолчанию EventMask установлено в
evBroadcast. Этот метод не предназначен для использования
с экземплярами объектов TMenuView. Он предназначен для
вызова из порожденных типов TMenuBar и TMenuBox.
См. так же: TView.Init, evBroadcast, TMenuBar.Init,
TMenuBox.Init
Load constructor TMenuView.Load(var S: TStream);
Создает объект TMenuView и загружает его из потока S
вызывая TView.Load, а затем загружая элементы в список
меню.
См. так же: TView.Load, TMenuView.Store
Execute function Execute: Word; virtual; Перекрывается: Никогда
Выполняет видимый элемент меню до тех пор, пока
пользователь не выберет элемент меню или не отменит этот
процесс. Возвращает команду, назначенную выбранному
элементу меню, или 0, если меню было отменено. Этот метод
должен вызываться только из ExecView.
См. так же: TGroup.ExecView
FindItem function FindItem(Ch: Char): PMenuItem);
Возвращает указатель на элемент меню, который имеет Ch как
горячую клавишу (подсвеченный символ). Возвращает nil,
если такой элемент не найден или этот элемент запрещен.
Заметим, что для Ch не различаются прописные и строчные
буквы.
GetItemRect procedure GetItemRect(Item: PMenuItem; var R: TRect);
virtual; Перекрывается: Всегда
Этот метод возвращает в R прямоугольник, занимаемый данным
элементом меню. Используется для определения, не был ли
отмечен данный элемент мышкой. Наследники TMenuView должны
перекрывать этот метод для того, чтобы откликаться на
события от мышки.
См. так же: TMenuBar.GetItemRect, TMenuBox.GetItemRect
GetHelpCtx function GetHelpCtx: Word; virtual;
Перекрывается: Иногда
По умолчанию этот метод возвращает контекст подсказки
текущего элемента меню. Если это hcNoContext, выбирается
текущий контекст родительского меню. Если родительского
меню нет, GetHelpCtx возвращает hcNoContext.
См. так же: hcXXXX константы контекста help
GetPalette function GetPalette: PPalette; virtual;
Перекрывается: Иногда
Возвращает указатель на палитру по умолчанию CMenuView.
HandleEvent procedure HandleEvent(var Event: TEvent); virtual;
Перекрывается: Никогда
Вызывается для обработки событий меню. Определяет, какой
элемент меню был выбран мышкой или клавиатурой (включая
горячие клавиши) и генерирует соответствующее командное
событие через PutEvent.
См. так же: TView.HandleEvent, TView.PutEvent
HotKey function HotKey(KeyCode: Word): PMenuItem;
Возвращает указатель на элемент меню, связанный с горячей
клавишей, заданной через KeyCode. Возвращает nil, если не
существует такого элемента меню или если элемент запрещен.
Горячие клавиши - это обычно функциональные клавиши или
комбинации Alt ключей и определяются аргументами в вызовах
NewItem и NewSubMenu в InitMenuBar. Этот метод
используется в TMenuView.HandleEvent для определения,
будет ли событие от клавиатуры вибирать элемент меню.
Store procedure Store(var S: TStream);
Сохраняет объект TMenuView (и его подменю) в потоке S,
вызывая TView.Store, а затем записывая каждый элемент меню
в поток.
См. так же: TMenuView.Load
Палитра
Все видимые элементы меню используют палитру по умолчанию
CMenuView для отображения элементов со 2 по 7 в палитру
стандартной программы.
1 2 3 4 5 6
+====+====+====+====+====+====+
CMenuView | 2 | 3 | 4 | 5 | 6 | 7 |
+==+=+==+=+==+=+==+=+==+=+==+=+
Нормальный текст -+ | | | | +-- Короткий выбранный
Запрещенный текст -----+ | | +------ Запрещенный выбранный
Короткий текст -------------+ +------------ Нормальный выбранный
TObject Objects
+===========+
| TObject |
++=+=+=+=+=++
+---------+ | | | | +---------+
+-------+-------+ | | | | +-------+-------+
| TCollection | | | | | | TResourceFile |
+---------------+ | | | | +---------------+
+-----------+ | | +----------+
+-------+-------+ | | +-------+-------+
| TStream | | | | TStringList |
+---------------+ | | +---------------+
+-------------+ +-------------+
+-------+-------+ +-------+-------+
| TStrListMaster| | TView |
+---------------+ +---------------+
TObjеct - это начальная точка иерархии объектов Turbo
Vision. Как базовый объект он не имеет предков, но имеет
множество потомков. Кроме TPoint и ТRect все стандартные
объекты Turbo Vision порождены в конечном счете от
TObject. Любой объект, использующий потоки Turbo Vision,
должен происходить от TObject.
Методы
Init constructor Init;
Распределяет память в куче для объекта и заполняет его
нулями. Вызывается из констракторов всех порожденных
объектов. Заметим, что TObject.Init будет заполнять все
поля в потомках так, что Вы должны вызвать TObject.Init до
инициализации любых полей в констракторах порожденных
объектов.
Free procedure Free;
Освобождает объект и вызывает дестрактор Done.
Done destructor Done; virtual;
Выполняет необходимую очистку и освобождение динамических
объектов.
TParamText Dialogs
TParamText порожден от TStaticText, который использует
параметризованные строки текста для форматного вывода,
используя процедуру FormatStr.
Поля
ParamCount ParamCount: Integer;
ParamCount указывает число параметров, содержащихся в
ParamList.
См. так же: TParamText.ParamList
ParamList ParamList: Pointer;
ParamList - это нетипированный указатель на массив или
запись указателей или значений типа LongInt, используемый
как параметр форматирования для текстовой строки.
Методы
Init constructor Init(var Bounds: TRect; AText: String;
AParamCount: Integer);
Инициализирует объект статического текста, вызывая
TStaticText.Init с заданным Bounds и текстовой строкой
AText, которая может содержать спецификаторы формата в
форме %[-][nnn]X, который будет замещаться параметрами,
переданными во время выполнения. Число параметров,
переданных в ParamCount, присваивается полю ParamCount.
Спецификаторы формата детально описаны в процедуре
FormatStr.
См. так же: TStaticText.Init, FormatStr процедуры
Load constructor Load(var S: TStream);
Распределяет объект TParamText в куче и загружает его
занчение из потока S, вызывая TStaticText.Load, затем
читая поле ParamCount из потока.
См. так же: TStaticText.Load
DataSize function DataSize: Word; virtual;
Возвращает размер данных, требуемый параметрами объекта,
т.е. ParamCount*SizeOf(LongInt).
GetText procedure GetText(var S: String); virtual;
Создает форматированную строку текста в S, выполняя
объединение параметров, заданных в ParamList в текстовую
строку Text с помощью вызова FormatStr(S, Text^,
ParamList^).
См. так же: FormatStr процедуры
SetData procedure SetData(var Rec); virtual;
Этот видимый элемент читает DataSize байт в ParamList из
Rec.
См. так же: TView.SetData
Store procedure Store(var S: TStream);
Сохраняет объект в потоке S, вызывая TStaticText.Store,
затем записывая поле ParamCount в поток.
См. так же: TStaticText.Store
Палитра
Объекты TParamText используют палитру по умолчанию
CStaticText для отображения 6-го элемента в палитру
стандартного диалога.
1
+===+
CStaticText | 6 |
+=+=+
Текст -----+
TPoint Objects
TPoint - это простой объект, представляющий точку на
экране.
Поля
X X: Integer;
Х - это колонка точки на экране.
Y Y: Integer;
Y - это строка точки на экране.
TProgram App
+---------+
| TObject |
+----+----+
+----+----+
| TView |
+----+----+
+----+----+
| TGroup |
+-+--+--+-+
+----------+ | +------------+
+----+----+ +----+-----+ +======+=======+
| TWindow | | TDeskTop | | TProgram |
+----+----+ +----------+ +======+=======+
+----+----+ +------+-------+
| TDialog | | TApplication |
+---------+ +--------------+
TProgram обеспечивает базовую заготовку для всех
стандартных программ на Turbo Vision. Все такие программы
должны порождаться от TProgram или его потомка
TApplication. TApplication отличается от TProgram только
констрактором и дестрактором. 2 типа объекта
предоставляются для большей гибкости при создании
нестандартных программ. В большинстве случает Ваша
программа будет порождаться от TApplication. TProgram
порождается от TGroup, поскольку она должна содержать
объекты TDeskTop, TStatusLine и TMenuBar.
Методы
Init constructor Init; Перекрывается: Иногда
Устанавливает глобальную переменную Application в @Self;
вызывает TProgram.InitScreen для инициализации переменных,
определяющих режим экрана; вызывает TGroup.Init передавая
прямоугольник Bounds равный полному экрану; устанавливает
поле State в sfVisible + sfSelected + sfFocused + sfModal
+ sfExposed; устанавливает поле Options в 0; устанавливает
поле Buffer в адрес экранного буфера, заданного в
ScreenBuffer; наконец вызывает InitDeskTop, InitStatusLine
и InitMenuBar и вставляет эти видимые элементы в группу
TProgram.
См. так же: TGroup.Init, TProgram.InitDeskTop,
TProgram.InitStatusLine, TProgram.InitMenuBar
Done destructor Done; virtual; Перекрывается: Иногда
Освобождает объекты DeskTop, MenuBar и StatusLine и
устанавливает глобальную переменную Application в nil.
См. так же: TGroup.Done
GetEvent procedure GetEvent(var Event: TEvent); virtual;
Перекрывается: Редко
По умолчанию TView.GetEvent просто вызывает GetEvent
своего владельца и поскольку TProgram (или TApplication) в
конечном итоге являются владельцем любого видимого
элемента, любой вызов GetEvent будет приводить к TProgram.
GetEvent (если только видимый элемент не перекроет
GetEvent)
TРrogram.GetEvent вначале проверяет, не сгенерировал ли
TProgram.PutEvent событие. Если да, то GetEvent возвращает
это событие. Если нет пришедшего события, GetEvent
вызывает GetMouseEvent; если тот возвращает evNothing,
вызывается GetKeyEvent, если оба возвращают evNothing:
указывая, что нет ввода от пользователя, GetEvent вызывает
TProgram.Idle, чтобы запустить "фоновые" задачи,
выполняемые во время ожидания ввода от пользователя. До
возврата GetEvent передает все события evKeyDown и
evMouseDown в StatusLine для отображения в ассоциированные
события от горячих клавиш evCommand.
См. так же: TProgram.PutEvent, GetMouseEvent, GetKeyEvent
GetPalette function GetPalette: PPalette; virtual;
Перекрывается: Иногда
Возвращает указатель на палитру, заданную индексом палитры
в глобальной переменной AppPalette. TProgram поддерживает
3 палитры: apColor, apBlackWhite и apMonochrome.
Переменная AppPalette инициализируется в
TProgram.InitScreen.
См. так же: TProgram.InitScreen, AppPalette, apXXXX
константы
HandleEvent procedure HandleEvent(var Event: TEvent); virtual;
Перекрывается: Всегда
Обрабатывает событие от клавиатуры от Alt-1 до Alt-9
генерируя событие evBroadcast с значением Command равным
cmSelectWindowNum и значением InfoInt 19.
TWindow.HandleEvent реагирует на такие сообщения, выбирая
окно с данным номером.
Обрабатывает событие evCommand со значением Command равным
cmQuit вызывая EndModal(cmQuit) которое приводит к
завершению программы.
TProgram.Handle почти всегда перекрывается для введения
обработки команд, специфичных для Вашей программы.
См. так же: TGroup.HandleEvent
Idle procedure Idle; virtual; Перекрывается: Иногда
Idle вызывается из TProgram.GetEvent когда очередь событий
пуста, позволяя программе выполнять фоновые задачи при
ожидании ввода от пользователя.
По умолчанию TProgram.Idle вызывает StatusLine^.Update,
чтобы разрешить строке статуса обновлять себя в
соответствии с текущим констекстом подсказки. Затем, если
набор команд изменился после последнего вызова
TProgram.Idle, генерируется evBroadcast со значением
Command равным cmCommandSetChanged, чтобы разрешить
видимому элементу, который зависит от этого набора команд,
разрешить или запретить себя.
Если Вы перекрываете Idle, всегда вызывайте наследуемый
Idle. Так же убедитесь, что любые задачи, выполняемые в
Вашем Idle, не занимают слишком большого времени в
программе, поскольку это будет блокировать ввод
пользователя.
InitDeskTop procedure InitDeskTop; virtual; Перекрывается: Редко
Создает объект TDeskTop для программы и сохраняет
указатель на него в глобальной переменной DeskTop.
InitDeskTop вызывается в TProgram.Init и никогда не должен
вызываться прямо. InitDeskTop может быть перекрыт
созданием потомка от TDeskTop.
См. так же: TProgram.Init, TDeskTop, TWindow.Init
InitMenuBar procedure InitMenuBar; virtual; Перекрывается: Всегда
Создает объект TMenuBar для программы и сохраняет
указатель на него в глобальной переменной в MenuBar.
InitMenuBar вызывается в TProgram.Init и никогда не должен
вызываться прямо. InitMenuBar почти всегда перекрывается
потомком от TMenuBar, определенным пользователем.
См. так же: TProgram.Init, TMenuBar, TWindow.Init
InitScreen procedure InitScreen; virtual; Перекрывается: Иногда
Вызывается из TProgram.Init и TProgram.SetScreenMode
каждый раз, когда режим экрана инициализируется или
изменяется. Это метод, который действительно выполняет
обновление и настройку переменных, определяющих режим
экрана для размера тени, маркеров и палитры программы.
См. так же: TProgram.Init, TProgram.SetScreenMode
InitStatusLine procedure InitStatusLine; virtual;
Перекрывается: Всегда
Создает объект TStatusLine для программы и сохраняет
указатель на него в глобальной переменной в StatusLine.
InitStatusLine вызывается в TProgram.Init и никогда не
должен вызываться прямо. InitStatusLine почти всегда
перекрывается потомком от TStatusLine, определенным
пользователем.
См. так же: TProgram.Init, TStatusLine
OutOfMemory procedure OutOfMemory; virtual; Перекрывается: Часто
OutOfMemory вызывается из TProgram.ValidView для
определения, что LowMemory - True. OutOfMemory должна
сообщать пользователю, что недостаточно памяти для
выполнения операции. Например с использованием программы
MessageBox из модуля StdDlg:
procedure TMyApp.OutOfMemory;
begin
MessageBox('Not enough memory to complete operation.',
nil, mfError + mfOKButton);
end;
См. так же: TProgram.ValidView, LowMemory
PutEvent procedure PutEvent(var Event: TEvent); virtual;
Перекрывается: Редко
По умолчанию TView.PutEvent просто вызывает PutEvent
своего владельца и поскольку объект TProgram (или
TApplication) в конечном счете является владельцем любого
видимого элемента, каждый вызов PutEvent будет приводить к
TProgram.PutEvent (если только видимый элемент не перекрыл
PutEvent).
Program.PutEvent сохраняет копию записи PutEvent в буфере
и следующий вызов в TPreogram.GetEvent будет возвращать
эту копию.
См. так же: TProgram.GetEvent, TView.PutEvent
Run procedure Run; virtual; Перекрывается: Редко
Выполняет TProgram, вызывая метод Execute (который
TProgram наследует от TGroup).
См. так же: TGroup.Execute
SetScreenMode procedure SetScreenMode(Mode: Word);
Устанавливает режим экрана. Mode - одна из констант
smCO80, smBW80 или smMono с дополнительным smFont8x8 для
выбора 43- или 50-строчного режима на EGA или VGA.
SetScreenMode скрывает мышку, вызывает SetVideoMode для
изменения режима экрана, вызывает InitScreen для
инициализации переменных режима экрана, назначает
ScreenBuffer в TProgram.Buffer, вызывает ChangeBounds с
новым прямоугольником экрана и, наконец, показывает мышку.
См. так же: TProgram.InitScreen, SetVideoMode, smXXXX
константа
ValidView function TProgram.ValidView(P: PView): PView;
Проверяет правильность вновь созданных видимых элементов,
возвращая Р, если видимый элемент правильный и nil - если
нет. Во-первых, если Р - nil, возвращается значение nil.
Во-вторых, если LowMemory - True, при вызове ValidView
видимый элемент, заданный в Р, освобождается, вызывается
метод OutOfMemory и возвращается значение nil. В-третьих,
если вызов P^.Valid(cmValid) возвращает False, видимый
элемент освобождается и возвращается значение nil. Иначе
видимый элемент считается правильным и возвращается
указатель на этот видимый элемент Р.
ValidView часто используется для проверки правильности
нового видимого элемента до вставки его во владельца.
Например, следующий оператор показывает типичную
последовательность создания, проверки и вставки нового
окна в панель экрана (TProgram.ValidView и TGroup.Insert
знают как игнорировать возможные указатели nil,
возникающие в результате ошибок).
DeskTop^.Insert(ValidView(New(TMyWindow, Init(.))));
См. так же: LowMemory, TProgram.OutOfMemory, Valid методы
Палитра
Палитра для объекта-программа управляет конечным
отображением цвета всех видимых элементов программы. Все
отображения других палитр приводят к выбору элемента в
палитре программы, которая задает атрибуты текста. Первый
элемент используется в TBackground для цветов фона.
Элементы со 2 по 7 используются меню и строкой статуса.
1 2 3 4 5 6 7
+===+===+===+===+===+===+===+
CColor |$71|$70|$78|$74|$20|$28|$24|
+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+
CBlackWhite |$70|$70|$78|$7F|$07|$07|$0F|
+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+
CMonochrome |$70|$07|$07|$0F|$70|$70|$70|
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Фон ----+ | | | | | +-- Короткий выбор
Нормальный текст --+ | | | +------ Запрещенный выбор
Запрещенный текст -----+ | +---------- Нормальный выбор
Короткий текст ------------+
Элементы в 8 по 15 используются голубыми окнами.
8 9 10 11 12 13 14 15
+===+===+===+===+===+===+===+===+
CColor |$17|$1F|$1A|$31|$31|$1E|$71|$00|
+===+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+===+
CBlackWhite |$07|$0F|$07|$70|$70|$07|$70|$00|
+===+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+===+
CMonochrome |$07|$0F|$07|$70|$70|$07|$70|$00|
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Рамка пассивна + | | | | | | +-- Зарезервировано
Рамка активна -----+ | | | | +- Выбранный текст скроллера
Кнопка рамки ----------+ | | +---- Нормальный текст скроллера
Страница скроллинга -------+ +-------- Зарезервировано
Элементы с 16 по 23 используются бирюзовыми окнами.
16 17 18 19 20 21 22 23
+===+===+===+===+===+===+===+===+
CColor |$37|$3F|$3A|$13|$13|$3E|$21|$00|
+===+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+===+
CBlackWhite |$07|$0F|$07|$70|$70|$07|$70|$00|
+===+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+===+
CMonochrome |$07|$0F|$07|$70|$70|$07|$70|$00|
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Рамка пассивна + | | | | | | +-- Зарезервировано
Рамка активна -----+ | | | | +- Выбранный текст скроллера
Кнопка рамки ----------+ | | +---- Нормальный текст скроллера
Страница скроллинга -------+ +-------- Зарезервировано
Элементы с 24 по 31 используются серыми окнами.
24 25 26 27 28 29 30 31
+===+===+===+===+===+===+===+===+
CColor |$70|$7F|$7A|$13|$13|$70|$7F|$00|
+===+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+===+
CBlackWhite |$70|$7F|$7F|$70|$07|$70|$07|$00|
+===+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+===+
CMonochrome |$70|$70|$70|$07|$07|$70|$07|$00|
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Рамка пассивна + | | | | | | +-- Зарезервировано
Рамка активна -----+ | | | | +- Выбранный текст скроллера
Кнопка рамки ----------+ | | +---- Нормальный текст скроллера
Страница скроллинга -------+ +-------- Зарезервировано
Элементы с 32 по 63 используются диалоговыми окнами. См.
TDialog для отдельных элементов.
32 33 34 35 36 37 38 39 40
+===+===+===+===+===+===+===+===+===+
CColor |$17|$1F|$1A|$31|$31|$31|$1E|$71|$00|
+===+===+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+===+===+
CBlackWhite |$07|$0F|$07|$70|$70|$70|$07|$70|$00|
+===+===+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+===+===+
CMonochrome |$07|$0F|$07|$70|$70|$70|$07|$70|$00|
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Рамка пассивна + | | | | | | | +-- Короткая метка
Рамка активна -----+ | | | | | +- Подсвеченная метка
Кнопка рамки ----------+ | | | +----- Нормальная метка
Страница скроллинга -------+ | +--------- Статический текст
Элементы управления -----------+
скроллинга
41 42 43 44 45 46 47 48 49
+===+===+===+===+===+===+===+===+===+
CColor |$17|$1F|$1A|$31|$31|$31|$1E|$71|$00|
+===+===+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+===+===+
CBlackWhite |$07|$0F|$07|$70|$70|$70|$07|$70|$00|
+===+===+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+===+===+
CMonochrome |$07|$0F|$07|$70|$70|$70|$07|$70|$00|
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Нормальная кнопка | | | | | | | +-- Короткий кластер
Кнопка по умолчанию+ | | | | | +----- Выбранный кластер
Выбранная кнопка-------+ | | | +-------- Нормальный кластер
Запрещенная кнопка---------+ | +------------ Тень кнопки
Короткая кнопка ---------------+
50 51 52 53 54 55 56
+===+===+===+===+===+===+===+
CColor |$1F|$2F|$1A|$20|$72|$31|$31|
+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+
CBlackWhite |$0F|$70|$0F|$07|$70|$70|$70|
+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+
CMonochrome |$07|$70|$07|$07|$70|$07|$07|
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Нормальная строка----+ | | | | | +- Элементы управления
ввода | | | | | скроллинга окна истории
Выбранная строка ------+ | | | +----- Страница скроллинга
ввода | | | окна истории
Стрелки строки ввода --------+ | +---------- Стороны истории
Стрелка истории -----------------+
57 58 59 60 61 62 63
+===+===+===+===+===+===+===+
CColor |$30|$2F|$3E|$31|$13|$00|$00|
+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+
CBlackWhite |$07|$70|$0F|$07|$07|$00|$00|
+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+
CMonochrome |$07|$70|$0F|$07|$07|$00|$00|
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Нормальный просмотр--+ | | | | | +-- Зарезервировано
списка | | | | |
Активный просмотр ------+ | | | +------ Зарезервировано
списка | | |
Выбранный просмотр списка ---+ | +---------- Информационная
Разделитель просмотра списка ----+ панель
TRadioButtons Dialogs
+------------+
| TObject |
+------+-----+
+------+-----+
| TView |
+------+-----+
+------+-----+
| TCluster |
+----+---+---+
+--------+ +------+
+======+========+ +------+------+
| TRadioButtons | | TCheckBoxes |
+===============+ +-------------+
Объекты TRadioButtons - это кластеры, содержащие до 65,536
элементов управления, из которых в любой момент времени
может быть выбрана только одна кнопка. Выбор невыбранной
кнопки будет автоматически освобождать предварительно
выбранную кнопку. Этот объект наследует от TCluster
большую часть функций, включая Init, Load и Done.
Зависимые кнопки часто ассоциированы с объектом TLabel.
TRadioButtons интерпретирует наследуемое поле
TCluster.Value как номер "нажатой" кнопки. С номером
первой кнопки в кластере, равным 0.
Методы
Draw procedure Draw; virtual; Перекрывается: Редко
Рисует кнопки как ' ( ) ' .
Mark function Mark(Item: Integer): Boolean; virtual;
Перекрывается: Никогда
Возвращает True, если Item = Value, т.е. если кнопка с
номером Item представлена текущим значением поля Value.
См. так же: TCluster.Value, TCluster.Mark
MovedTo procedure MovedTo(Item: Integer); virtual;
Перекрывается: Никогда
Присваивает Value значение Item.
См. так же: TCluster.MovedTo, TRadioButtons.Mark
Press procedure Press(Item: Integer); virtual;
Перекрывается: Никогда
Присваивает Value значение Item. Вызывается при нажатии
кнопки с номером Item.
SetData procedure SetData(var Rec); virtual; Перекрывается: Редко
Вызывает TCluster.SetData для установки поля Value, затем
устанавливает поле Sel равным Value, поскольку выбранный
элемент - это "нажатая" кнопка.
См. так же: TCluster.SetData
Палитра
Объекты TRadioButtons используют CCluster - палитру по
умолчанию для всех объектов кластера для отображения
элементов с 16 по 18 в палитру стандартного диалога.
1 2 3 4
+====+====+====+====+
CCluster | 16 | 17 | 18 | 18 |
+==+=+==+=+==+=+==+=+
Нормальный текст | | +--- Короткая выбранная
Выбранный текст ------+ +-------- Короткая нормальная
TRect Objects
Поля
A A: TPoint
А - это точка, определяющая верхний левый угол
прямоугольника на экране.
B B: Point
В - это точка, определяющая нижний правый угол
прямоугольника на экране.
Методы
Assign procedure Assign(XA, YA, XB, YB: Integer);
Этот метод назначает значения параметров полям
прямоугольника. ХА становится А.Х, ХВ становится Х.В и
т.д.
Copy procedure Copy(R: TRect);
Copy устанавливает все поля равными прямоугольнику R.
Move procedure Move(ADX, ADY: Integer);
Перемещает прямоугольник, добавляя ADX к A.X и B.X и
добавляя ADY к A.Y и B.Y.
Grow procedure Grow(ADX, ADY: Integer);
Изменяет размер прямоугольника, вычитая ADX из A.X,
добавляя ADX к B.X, вычитая ADY из A.Y и добавляя ADY к B.
Y.
Intersect procedure Intersect(R: TRect);
Изменяет положение и размер прямоугольника до области,
определенной пересечением текущего положения и R.
Union procedure Union(R: TRect);
Изменяет прямоугольник до его объединения с
прямоугольником R; т.е. до наименьшего прямоугольника,
содержащего этот объект и R.
Contains function Contains(P: TPoint): Boolean;
Возвращает True, если прямоугольник содержит точку P.
Equals function Equals(R: TRect): Boolean;
Возвращает True, если R равен данному прямоугольнику.
Empty function Empty: Boolean;
Возвращает True, если прямоугольник пустой, т.е. не
содержит символьного пространства. Таким образом поля A и
B равны.
TResourceCollection Objects
+---------+
| TObject |
+----+----+
+------+------+
| TCollection |
+------+------+
+--------+----------+
| TSortedCollection |
+--------+----------+
+--------+----------+
| TStringCollection |
+--------+----------+
+=========+===========+
| TResourceCollection |
+=====================+
TResourseCollection порожден от TStringCollection и
используется с TSourseFile для реализации коллекции
ресурсов. Файл ресурсов - это поток, который индексируется
ключевыми строками. Следовательно, каждый элемент ресурса
имеет целое поле Pos и строковое поле Key. Перекрытие
методов TResourseCollection главным образом связано с
обработкой дополнительных строк в его элементах.
TResourseCollection используется внутри объектов
TResourseFile для поддержки индекса файла ресурсов.
TResourceFile Objects
+---------+
| TObject |
+----+----+
+=======+=======+
| TResourceFile |
+===============+
TResourseFile реализует поток, который может
индексироваться ключевыми строками. Когда объекты
сохраняются в файле ресурса, используя TResourseFile.Put,
задается ключевая строка, которая идентифицирует этот
объект. Объект может быть позже получен указанием этой
ключевой строки в вызове TResourseFile.Get.
Для обеспечения быстрого и эффективного доступа к
объектам, хранящимся в файле ресурса, TResourseFile хранит
ключевые строки в отсортированной коллекции строк
(используя тип TResourseCollection) вместе с позицией и
размером данных этого ресурса в файле ресурса. Как и в
случае потоков, типы объектов, записываемые и читаемые из
файла ресурсов, должны быть зарегистрированы с помощью
RegisterType.
Поля
Stream Stream: PStream; Только чтение
Указатель на поток, связанный с этим файлом ресурса.
Modified Modified: Boolean; Чтение/Запись
Установлен в True, если файл ресурса был модифицирован.
Методы
Init constructor Init(AStream: Pstream); Перекрывается: Никогда
Инициализирует файл ресурса, используя поток, заданный
через AStream, и устанавливает поле Modified в False.
Например:
ResFile.Init(New(TBufStream, Init("MYAPP.RES', stOpenRead,
1024)));
Во время инициализации Init смотрит в заголовке файла
ресурсов текущую позицию в потоке. Формат заголовка файла
ресурсов:
type
TResFileHeader = record
Signature: array[14] of Char;
ResFileSize: Longint;
IndexOffset: Longint;
end;
где Signature содержит 'FBPR', ResFileSize содержит размер
всего файла ресурсов, за исключением полей Signature и
ResFileSize (т.е. размер файла ресурса -8 байт) и
IndexOffset содержит смещение коллекции индексов от начала
заголовка.
Если Init не находит заголовка файла ресурса в текущей
позиции AStream, он считает, что создается новый файл
ресурса и создает пустой индекс.
Если Init видит метку .EXE файла в текущей позиции потока,
он просматривает поток до конца файла .EXE и ищет
заголовок файла ресурса здесь. Аналогично Init будет
пропускать оверлейный файл, добавленный к .EXE файлу (так
же как OvrInit пропускает файл ресурса). Это означает, что
Вы можете добавить оверлейный файл и файл ресурса (в любом
порядке) в конец .EXE файла Вашей программы. (Именно это
сделано с выполнимым файлом IDE - TURBO.EXE).
См. так же: TResourceFile.Done
Done destructor Done; virtual; Перекрывается: Никогда
Выталкивает файл ресурса, используя TResourseFile.Flush,
затем освобождает индекс и поток, указанный полем Stream.
См. так же: TResourceFile.Init, TResourceFile.Flush
Count function Count: Integer;
Возвращает число ресурсов, запомненных в файле ресурсов.
См. так же: TResourceFile.KeyOf
Delete procedure Delete(Key: String);
Удаляет ресурс, индексируемый ключем Key из файла
ресурсов. Пространство, ранее занятое удаленным ресурсом,
не используется. Вы можете удалить эту память, используя
SwitchTo для создания упакованной копии файла в новом
потоке.
См. так же: TResourceFile.SwitchTo
Flush procedure Flush;
Если файл ресурса был модифицирован (проверяется поле
Modified) Flush сохраняет обновленный индекс в конце
потока и обновляет заголовок ресурса в начале потока.
Затем Modified устанавливается в False.
См. так же: TResourceFile.Done, TResourceFile.Modified
Get function Get(Key: String): PObject;
Ищет Key в индексе файла ресурсов. Возвращает nil, если
ключ не найден. Иначе, устанавливает поток на позицию,
заданную индексом и вызывает Stream^.Get для создания и
загрузки объекта по этому индексу. Например
DeskTop^.Insert(ValidView(ResFile.Get('EditorWindow')));
См. так же: TResourceFile.KeyAt, TResourceFile.Put
KeyAt function KeyAt(I: Integer): String;
Возвращает ключевую строку для ресурса с номером i в файле
ресурса. Индекс первого ресурса 0 и индекс последнего
ресурса TResourseFile.Count-1. Используя Count и KeyAt Вы
можете обработать все ресурсы в файле ресурса.
См. так же: TResourceFile.Count
Put procedure Put(Item: PObject; Key: String);
Добавляет объект, заданный через Р в файл ресурса с
ключевой строкой, заданной в Key. Если индекс содержит
Key, новый объект замещает старый. Объект добавляется в
конец существующих объектов файла ресурса с использованием
Stream^.Put
См. так же: TResourceFile.Get
SwitchTo function SwitchTo(AStream: PStream; Pack: Boolean):
PStream;
Переключает файл ресурса из его потока в поток, переданный
через AStream и возвращает указатель на новый поток.
Если параметр Pack равен True, поток будет отбрасывать
пустое и неиспользуемое пространство из файла ресурса до
записи в новый поток. Это единственный способ сжать файл
ресурса. Копирование с параметром Pack = False будет
выполняться быстрее, но без сжатия.
Назад | Содержание | Вперед