Глава 21. Объектные типы ObjectWindows (продолжение)
Константы tf_XXXX модуль OWindows
-----------------------------------------------------------------
Назначение: Константы флага, начинающиеся с tf_, использует
метод Transfer.
Значения: Определены следующие константы:
Константы функции Transfer Таблица 21.25
+-----------------+----------+----------------------------------+
| Константы | Значение | Смысл |
+-----------------+----------+----------------------------------|
| tf_SizeData | 0 | Определяет размер переданных объ-|
| | | ектом данных. |
| | | |
| tf_GetData | 1 | Считывает данные из объекта. |
| | | |
| tf_SetData | 2 | Передает данные для установки|
| | | значения объекта. |
| | | |
+-----------------+----------+----------------------------------+
------------------------------------------------------------------------
TFileDialog модуль OStdDlgs
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList Parent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingPtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ Previous |
| CreateChildren PutChildPtr |
| CreateMemoryDC PutChildren |
| DefChildProc PutSiblingPtr |
| DefCommandProc -Register-----------|
| DefNotificationProc RemoveChild |
|-DefWndProc-- SetFlags |
| Destroy -SetupWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DispatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildPtr -WMVScroll----------|
+----------------------------------------+
TDialog TFileDialog
+-------------------+ +-----------------+
| Attr | | Caption |
| IsModal | | Extension |
+-------------------| | FilePath |
|-Init--------------| | FileSpec |
| Load | | PathName |
| Done | +-----------------|
| Create | | Init |
| DefWndProc | | CanClose |
| EndDlg | | HandleDList |
| Execute | | HandleFList |
| GetItemHandle | | HandleFName |
| Ok | | SetupWindow |
| SendDlgItemMsg | +-----------------+
| Store |
| WMClose |
| WMInitDialog |
| WMPostInvalid |
| WMQueryEndSession |
+-------------------+
Файловые диалоговые блоки позволяют пользователю выбрать
файл для открытия или указать имя файла для сохранения.
Поля
-----------------------------------------------------------------
Caption
Caption: PChar;
Указывает на строку, которая выводится в заголовке диалого-
вого блока. Если Caption имеет значение nil, то используется
текст из диалогового ресурса. Присвоив Caption другую строку, вы
можете изменить заголовок.
Extension
Extension: array[0fsExtension] of Char;
Содержит расширение для файлов. Если пользователь набирает
имя файла без расширения, то файловый диалоговый блок добавляет к
имени Extension.
FilePath
FilePath: PChar;
Будучи установленным в значение, переданное в конструкторе,
FilePath указывает на буфер, который будет содержать выбранное
пользователем имя маршрута. Файловый диалоговый блок помещает в
буфер итоговое имя файла.
FileSpec
FileSpec: array[0fsFileSpec] of Char;
Содержит спецификацию файла (обычно имя с трафаретными сим-
волами), которое файловый диалоговый блок присоединяет к текущему
выбранному маршруту.
PathName
PathName: array[0fsPathName] of Char;
Содержит текущий выбранный маршрут каталога.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init
-----------------------------------------------------------------
constructor Init(AParant: PWindowsObject; AName,
AFilePath: PChar);
Строит файловый диалоговый блок с порождающим окном AParent
из диалогового ресурса. Ресурс определяется значением, переданным
в AName. Параметр AName должен содержать одну из констант
sd_XXXX, sd_FileOpen или sd_FileSave и для определения характера
создаваемого файлового блока (диалоговый блок открытия файла или
диалоговый блок сохранения файла) с помощью MakeIntResource нужно
привести его тип к PChar. На основе AName и значения в
BWCCClassName Init определяет, какой ресурс нужно задать для
конструктора Init, наследуемого из TDialog. Устанавливает Caption
в nil, а FilePath - в AFilePath. AFilePath должно указывать на
буфер размера, достаточного для размещения полного имени файла,
обычно array[0fsPathName] of Char.
CanClose
-----------------------------------------------------------------
function CanClose: Boolean; virtual;
Возвращает True, если пользователь выбрал файл, что позволя-
ет закрыть диалоговый блок. Если текущий выделенный маршрут явля-
ется каталогом или содержит трафаретные символы, CanClose обнов-
ляет блоки списка файла и каталога и возвращает False, указывая,
что диалоговый блок закрывать не следует.
SetupWindow
-----------------------------------------------------------------
procedure SetupWindow; virtual;
Ограничивает число символов в имени файла значением
fsPathName. Если Caption не равно 0, устанавливает заголовок ди-
алогового блока в Caption. копирует FilePath в PathName, а расши-
рение PathName - в Extension. Обновляет блоки списка для соот-
ветствия текущему имени файла.
HandleFName
-----------------------------------------------------------------
procedure HandleFName(var Msg: TMessage); virtual
id_First + id_FName;
Реагирует на изменения в управляющем элементе редактирования
FileName, разрешая или запрещая командную кнопку Ok. В противном
случае разрешает Ok.
HandleFList
-----------------------------------------------------------------
procedure HandleFList(var Msg: TMessage); virtual;
id_First + id_FList;
Отвечает на уведомляющее сообщение от блока списка файлов
обновлением текущего имени файла и реагирует на двойной щелчок
"мышью" на имени файла. Если пользователь дважды щелкнул кнопкой
"мыши", вызывает для завершения диалогового блока Ok. Если блок
списка потерял фокус ввода, HandleFList отменяет выбор выделенных
элементов.
HandleDList
-----------------------------------------------------------------
procedure HandleDList(var Msg: TMessage); virtual
id_First + id_DList;
Реагирует на уведомляющие сообщения блока списка каталогов,
обновляя текущее имя файла, и на двойной щелчок на каталоге кноп-
кой "мыши". Если блок списка потерял фокус ввода, HandleFList от-
меняет выбор выделенных элементов.
TFileWindow OStdWnds
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList Parent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingPtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ Previous |
| CreateChildren PutChildPtr |
| CreateMemoryDC PutChildren |
| DefChildProc PutSiblingPtr |
| DefCommandProc -Register-----------|
| DefNotificationProc RemoveChild |
|-DefWndProc-- SetFlags |
| Destroy -SetupWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DispatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildPtr -WMVScroll----------|
+----------------------------------------+
TWindow TEditWindow
+-------------------+ +-----------------+
| Attr | | Editor |
| DefaultProc | | SearchRec |
| Scrol[ler | +-----------------|
| FocusChildHandle | |-Init------------|
+-------------------| |-Load------------|
|-Init--------------| | CMEditFind |
| InitResource | | CMEditFindNext |
|-Load--------------| | CMEditReplace |
| Done | |-Store-----------|
| Create | | WMSize |
| DefWndProc | | WMSetFocus |
| FocusChild | +-----------------+
| GetId |
| GetWindowClass | TFileWindow
| Paint | +-----------------+
| SetCaption | | FileName |
| SetupWindow | | IsNewFile |
|-Store-------------| +-----------------|
| UpdateFocusChild | | Init |
| WMActivate | | Load |
| WMHScroll | | CanClear |
| WMLButtonDown | | CanClose |
| WMMDIActivate | | CMFileNew |
| WMMove | | CMFileOpen |
| WMPaint | | CMFileSave |
|-WMSize------------| | CMFileSaveAs |
| WMSysCommand | | NewFile |
| WMVScroll | | Open |
+-------------------+ | Read |
| ReplaceWith |
| Save |
| SetFileName |
| SetupWindow |
| Store |
| Write |
+-----------------+
Файловое окно - это окно редактирования со специализирован-
ными методами для чтения и записи редактируемого текста в файл.
Подробности о полях и методах TFileWindow вы можете узнать в опе-
ративном справочнике Help.
------------------------------------------------------------------------
TFilterValidator модуль Validate
-----------------------------------------------------------------
TObject TValidator TFileWindow
+------+ +-----------------+ +-----------------+
+------| | Options | | ValidChars |
|-Init-| | Status | +-----------------|
|-Done-| +-----------------| | Init |
| Free | |-Init------------| | Load |
+------+ |-Load------------| | Error |
|-IsInvalid-------| | IsValid |
|-IsValidInput----| | IsValidInput |
|-Store-----------| +-----------------+
| Transfer |
| Valid |
+-----------------+
Объекты фильтрации и проверки допустимости проверяют инфор-
мацию, набираемую пользователем в полях ввода. Механизм проверки
допустимости содержит набор допустимых символов. Если пользова-
тель набирает один из разрешенных символов, то фильтр проверки
допустимости указывает, что символ допустим. Если пользователь
набрал любой другой символ, механизм проверки допустимости указы-
вает, что ввод недопустим.
Поля
-----------------------------------------------------------------
ValidChars
ValidChars: TCharSet;
Содержит набор всех символов, которые может набирать пользо-
ватель. Например, чтобы разрешить ввод только цифр, установите
ValidChars в ['0''9']. ValidChars устанавливается параметром
AValidChars, переданным конструктору Init.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init
-----------------------------------------------------------------
constructor Init(AValidChars: TCharSet);
Строит объект фильтрации и проверки допустимости, вызывая
сначала наследуемый из TValidator конструктор Init, а затем уста-
навливая ValidChars в AValidChars.
Load
-----------------------------------------------------------------
constructor Load(var S: TStream);
Строит и загружает объект фильтрации и проверки допустимости
из потока S, вызывая сначала наследуемый из TValidator конструк-
тор Load, а затем считывая набор допустимых символов в
ValidChars.
См. также: TVAlidator.Load.
Error
-----------------------------------------------------------------
procedure Error; virtual;
Выводит блок сообщений, указывающий, что текстовая строка
содержит недопустимый символ.
IsValid
-----------------------------------------------------------------
function IsValid(const S: string): Boolean; virtual;
Возвращает значение True, если все символы в строке S содер-
жатся в множестве допустимых символов ValidChars. В противном
случае возвращает False.
IsValidInput
-----------------------------------------------------------------
function IsValid(const S: string; SuppressFill: Boolean):
Boolean; virtual;
Проверяет каждый символ в строке S на принадлежность к мно-
жеству допустимых символов ValidChars. Возвращает True, если все
символы в строке S допустимы. В противном случае возвращается
значение False.
Store
-----------------------------------------------------------------
procedure Store(var S: TStream);
Сохраняет объект фильтрации и проверки допустимости в потоке
S, записывая ValidChars.
------------------------------------------------------------------------
TGroupBox ODialogs
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList Parent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingPtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ Previous |
| CreateChildren PutChildPtr |
| CreateMemoryDC PutChildren |
| DefChildProc PutSiblingPtr |
| DefCommandProc -Register-----------|
| DefNotificationProc RemoveChild |
|-DefWndProc-- SetFlags |
| Destroy -SetupWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DispatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildPtr -WMVScroll----------|
+----------------------------------------+
TWindow TControl
+-------------------+ +-----------------+
| Attr | +-----------------|
| DefaultProc | |-Init------------|
| Scrol[ler | |-InitResource----|
| FocusChildHandle | |-GetClassName----|
+-------------------| | Register |
|-Init--------------| | WMPaint |
| InitResource | +-----------------+
|-Load--------------|
| Done | TGroupBox
| Create | +-----------------+
| DefWndProc | | NotifyParent |
| FocusChild | +-----------------|
| GetId | | Init |
| GetWindowClass | | InitResource |
| Paint | | Load |
| SetCaption | | GetClassName |
| SetupWindow | | SelectionChanged|
|-Store-------------| | Store |
| UpdateFocusChild | +-----------------+
| WMActivate |
| WMHScroll |
| WMLButtonDown |
| WMMDIActivate |
| WMMove |
| WMPaint |
|-WMSize------------|
| WMSysCommand |
| WMVScroll |
+-------------------+
Объект TGroupBox - это объект интеpфейса, пpедставляющий со-
ответствующий элемент, называемый в Windows гpупповым блоком. Хо-
тя групповые блоки не играют на экране активной роли, они визу-
ально унифицируют группу блоков выбора (кнопок с зависимой и не-
зависимой фиксацией). Однако "закулисно" они играют важную роль в
управлении состоянием своих блоков выбора. Например, вы можете
отреагировать на выбор пользователем одной кнопки отменой выбора
всех остальных.
Поля
-----------------------------------------------------------------
NotifyParent
NotifyParent: Boolean;
Флаг, указывающий, должен ли уведомляться предок пpи измене-
нии состояния блоков выбоpа гpуппового блока. По умолчанию имеет
значение True.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init (иногда переопределяется)
-----------------------------------------------------------------
constructor Init(AParent: PWindowsObject; AnID: Integer;
AText: PChar; X, Y, W, H: Integer);
Создает объект гpуппового блока с пеpеданным порождающим ок-
ном (AParent), идентификатоpом управляющего элемента (AnId), со-
ответствующим текстом (AText), позицией (X,Y) относительно начала
области пользователя pодительского окна, шиpиной (W) и высотой
(H). Вызывает конструктор TControl.Init с аналогичными параметра-
ми, а затем добавляет стиль Windows Attr.Style и удаляет стиль
ws_TabStop из поля Attr.Style группового блока. NotifyParent ус-
танавливается в значение True. По умолчанию предок гpуппового
блока уведомляется пpи изменении состояния блоков выбоpа.
См. также: TControl.Init.
InitResource
-----------------------------------------------------------------
constructor InitResource(AParent: PWindowsObject;
ResourceID: Word);
Связывает объект группового блока с управляющим элементом в
ресурсе, заданном параметром ResourceID, вызывая конструктор
InitResource, наследуемый из TControl. Для исключения группового
блока из механизма передачи вызывает DisableTransfer (поскольку
данных для передачи нет).
Load
-----------------------------------------------------------------
constructor Load(var S: TStream);
Строит и загружает групповой блок из потока S, вызывая сна-
чала TConstrol.Load, а затем считывая дополнительное поле
(NotifyParent), введенное в TGroupBox.
См. также: TControl.Load.
GetClassName (иногда переопределяется)
-----------------------------------------------------------------
function GetClassName: PChar; virtual;
Возвpащает имя класса окна объекта TGroupBox - 'Button'.
SelectionChanged (иногда переопределяется)
-----------------------------------------------------------------
procedure SelectionChanged(ControlD: Integer); virtual;
Если NotifyParent имеет значение True, уведомляет порождаю-
щее окно гpуппового блока, что один из выбоpов изменился, посылая
ему сообщение, базиpующееся на дочеpнем идентификатоpе. Этот ме-
тод можно пеpеопpеделить, чтобы гpупповой блок мог pеагиpовать на
его выбоpы.
Store
-----------------------------------------------------------------
procedure Stroe(var S: TStream);
Записывает групповой блок в поток S, вызывая сначала
TControl.Store, а затем записывая дополнительное поле
(NotifyParent), введенное в TGroupBox.
См. также: TControlStore.
------------------------------------------------------------------------
TInputDialog модуль OStdDlgs
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList Parent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingPtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ Previous |
| CreateChildren PutChildPtr |
| CreateMemoryDC PutChildren |
| DefChildProc PutSiblingPtr |
| DefCommandProc -Register-----------|
| DefNotificationProc RemoveChild |
|-DefWndProc-- SetFlags |
| Destroy -SetupWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DispatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildPtr -WMVScroll----------|
+----------------------------------------+
TDialog TInputDialog
+-------------------+ +-----------------+
| Attr | | Caption |
| IsModal | | Prompt |
+-------------------| | Buffer |
|-Init--------------| | BufferSize |
| Load | +-----------------|
| Done | | Init |
| Create | | CanClose |
| DefWndProc | | SetupWindow |
| EndDlg | +-----------------+
| Execute |
| GetItemHandle |
| Ok |
| SendDlgItemMsg |
| Store |
| WMClose |
| WMInitDialog |
| WMPostInvalid |
| WMQueryEndSession |
+-------------------+
Объект TInputDialog обеспечивает общее диалоговое окно для
получения текстового ввода от пользователя (одной строки текста).
Поля
-----------------------------------------------------------------
Buffer
Buffer: PChar;
Указывает на буфер, возвращающий текстовый ввод пользовате-
ля. При передаче конструктору диалогового окна ввода содержит ис-
пользуемый по умолчанию текст, который первоначально выводится в
редактируемом управляющем элементе.
BufferSize
BufferSize: Word;
Содержит размер буфера, который возвращает ввод пользовате-
ля.
Caption
Caption: PChar;
Указывает на строку, которая выводится в качестве заголовка
диалогового окна.
Prompt
Prompt: PChar;
Указывает на подсказку диалогового окна ввода, которая выво-
дится над строкой ввода.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init
-----------------------------------------------------------------
constructor Init(AParent: PWindowsObject;
ACaption, APrompt, ABuffer: PChar; ABufferSize: Word);
Строит файловый диалоговый блок с порождающим окном, пере-
данным в параметре AParent, вызывая наследуемый от TDialog конс-
труктор Init. Имя шаблона ресурса определяется поиском в
BWCCClassName. Если приложение использует BWCC, диалоговый блок
ввода будет использовать ресурс BWCC. В противном случае исполь-
зуется обычный диалоговый блок Windows.
См. также: TDialog.Init.
CanClose
-----------------------------------------------------------------
function CanClose: Boolean; virtual;
Считывает в буфер Buffer из управляющего элемента редактиро-
вания диалогового блока до BufferSize символов, затем возвращает
True, указывая, что диалоговый блок можно закрыть.
SetupWindow
-----------------------------------------------------------------
procedure SetupWindow; virtual;
При установке окна вызывает метод SetupWindow, наследуемый
из TDialog, затем устанавливает заголовок диалогового блока в со-
ответствие со строкой Caption. Текст подсказки устанавливает в
Prompt, текст буфера - в Buffer, а затем ограничивает число вво-
димых пользователем символов значением BufferSize - 1.
Тип TItemList модуль Objects
-----------------------------------------------------------------
Описание:
TItemList = array[0MaxCollectionSize - 1] of Pointer;
Назначение: Массив общих указателей, предназначенных для
внутреннего использования в TCollection.
------------------------------------------------------------------------
TListBox модуль ODialogs
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList Parent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingPtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ Previous |
| CreateChildren PutChildPtr |
| CreateMemoryDC PutChildren |
| DefChildProc PutSiblingPtr |
| DefCommandProc -Register-----------|
| DefNotificationProc RemoveChild |
|-DefWndProc-- SetFlags |
| Destroy -SetupWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DispatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildPtr -WMVScroll----------|
+----------------------------------------+
TWindow TControl
+-------------------+ +-----------------+
| Attr | +-----------------|
| DefaultProc | |-Init------------|
| Scrol[ler | | InitResource |
| FocusChildHandle | |-GetClassName----|
+-------------------| | Register |
|-Init--------------| | WMPaint |
| InitResource | +-----------------+
|-Load--------------|
| Done | TListBox
| Create | +-----------------+
| DefWndProc | +-----------------|
| FocusChild | | Init |
| GetId | | AddString |
| GetWindowClass | | ClearList |
| Paint | | DeleteString |
| SetCaption | | GetClassName |
| SetupWindow | | GetCount |
|-Store-------------| | GetMsgID |
| UpdateFocusChild | | GetSelIndex |
| WMActivate | | GetSelString |
| WMHScroll | | GetString |
| WMLButtonDown | | GetStringLen |
| WMMDIActivate | | InsertSrtring |
| WMMove | | SetSelIndex |
| WMPaint | | SetSelString |
|-WMSize------------| | Transfer |
| WMSysCommand | +-----------------+
| WMVScroll |
+-------------------+
Объект TListBox - это объект интеpфейса, пpедставляющий со-
ответствующий элемент, называемый в Windows блоком cписка. Классы
TListBox обычно используются в качестве экземпляров своих потом-
ков TComboBox.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init
-----------------------------------------------------------------
constructor Init(AParent: PWindowsObject; AnId: Integer;
X, Y, W, H: Integer);
Создает объект блока списка с пеpеданным порождающим окном
(AParent), упpавляющим идентификатоpом (AnId), позицией (X,Y) от-
носительно начала области пользователя порождающего окна, шиpиной
(W) и высотой (H). Вызывает TControl.Init и добавляет к полю
Attr.Style объекта блока списка константу lbs_Standard, дающую
полосу пpокpутки со следующими элементами:
- гpаницей (ws_Border);
- веpтикальной полосой пpокpутки (ws_VScroll);
- автоматической соpтиpовкой по алфавиту элементов списка
(lbs_Sort);
- уведомлением порождающего окна пpи выбоpе (lbs_Notify).
В наследующих объектах или в конструкторе Init порождающего
оконного объекта блока списка эти стили могут переопределяться.
AddString (иногда переопределяется)
-----------------------------------------------------------------
function AddString(AString: PChar): Integer; virtual;
Добавляет AString (как элемент списка) в объект блока списка
и возвpащает индекс позиции элемента (начинающийся с нуля) или
отpицательное значение в случае ошибки. Элементы списка автомати-
чески соpтиpуются, если только до создания из поля Attr.Style
объекта блока списка не был удален стиль lbs_Sort.
ClearList (иногда переопределяется)
-----------------------------------------------------------------
procedure ClearList; virtual;
Удаляет из блока списка все элементы списка.
DeleteString (иногда переопределяется)
-----------------------------------------------------------------
function DeleteString(Index: Integer): Integer; virtual;
Удаляет элемент списка с индексом позиции (начинающимся с
нуля), пеpеданным в Index. DeleteString возвpащает число остав-
шихся элементов списка или, в случае ошибки, отpицательное значе-
ние.
GetClassName (переопределяется редко)
-----------------------------------------------------------------
function GetClassName: Integer; virtual;
Возвpащает имя класса окна TListBox - 'ListBox'.
GetCount (никогда не переопределяется)
-----------------------------------------------------------------
function GetCount: Integer; virtual;
Возвращает число элементов в блоке списка или отрицательное
значение в случае ошибки.
GetMsgID
-----------------------------------------------------------------
function GetMsgID(AMsg: TMsgName): Word; virtual;
Транслирует сообщения блока списка для использования в
TComboBox.
GetSelIndex (переопределяется редко)
-----------------------------------------------------------------
function GetSelIndex: Integer; virtual;
Возвpащает индекс позиции (начинающийся с нуля) выделенного в
данный момент элемента списка или отpицательное значение, если
выделенного элемента нет.
GetSelString (переопределяется редко)
-----------------------------------------------------------------
function GetSelString(AString: PChar; Index: Integer):
Integer; virtual;
Удаляет текущий выделенный элемент списка, если его длина не
превышает MaxChars, и возвращает его в AString. Функция
GetSelString возвpащает длину стpоки или, в случае ошибки,
отpицательное значение.
GetString (переопределяется редко)
-----------------------------------------------------------------
function GetString(AString: PChar; Index: Integer):
Integer; virtual;
Извлекает элемент в позиции (отсчитывающейся с 0), передан-
ной в параметре Index, и возвращает его в AString. Функция
GetString возвращает длину строки или отрицательное значение в
случае ошибки.
GetStringLen (переопределяется редко)
-----------------------------------------------------------------
function GetStringLen(Index: Integer): Integer; virtual;
Возвращает длину строки элемента блока списка в позиции, за-
данной параметром Index, и возвpащает длину стpоки или отpица-
тельное значение в случае ошибки.
InsertString (иногда переопределяется)
-----------------------------------------------------------------
function InsertString(AString: PChar; Index: Integer)
Integer; virtual;
Вставляет строку AString в позиции, заданной параметром
Index, и возвращает фактическую позицию элемента (которая отсчи-
тывается с 0) в списке. В случае ошибки возвращается отрицатель-
ное значение. Пересортировка списка не выполняется. Если параметр
Index имеет значение -1, то строка присоединяется к концу списка.
SetSelIndex (переопределяется редко)
-----------------------------------------------------------------
function SetSelIndex(Index: Integer): Integer; virtual;
Устанавливает выбоp элемента списка в индексе позиции (начи-
нающемся с нуля), пеpеданном в Index. Если Index = -1, блок спис-
ка очищается от любого выбоpа. В случае ошибки возвpащается
отpицательное число.
SetSelString (переопределяется редко)
-----------------------------------------------------------------
function GetSelString(AString: PChar; AIndex: Integer):
Integer; virtual;
Устанавливает выбоp пеpвого элемента списка, совпадающего с
текстом, пеpеданным в AString, котоpый встpечается после индекса
позиции (начинающегося с нуля), пеpеданного в AIndex. Функция
SetSelString возвpащает индекс позиции вновь выделенного элемента
или, в случае ошибки, отpицательное значение.
Transfer (иногда переопределяется)
-----------------------------------------------------------------
function Transfer(DataPtr: Pointer; TransferFlag: Word):
Word; virtual;
Пеpедает элементы и выделения элементов блока списка в/из
буфера пеpедачи. Если TransferFlag имеет значение tf_GetData,
данные блока списка передаются по адресу памяти. В случае значе-
ния tf_SetData блок списка загружается данными из памяти. Предпо-
лагается, что TransferBuffer указывает на объект PTListBoxData,
который используется для блока списка, как буфер передачи.
Характер записи может изменяться в зависимости от того, до-
пускает ли блок выделение нескольких строк. Первый передаваемый
элемент всегда представляет собой указатель на набор строк, явля-
ющихся записями блока списка. Для однострочных блоков списка этот
указатель сопровождается целочисленными индексом выделенного эле-
мента. Для блоков списка с возможностью выбора нескольких строк
за указателем набора следует указатель на запись TMultiSelRec,
содержащую массив целых чисел, каждая из которых указывает на вы-
деленный элемент.
Типичная запись передачи для блока списка выглядит следующим
образом:
type
TListBoxXferRec = record { одиночный выбор }
Strings: PStrCollection;
Selection: Integer;
end;
TMultiListBoxXferRec = record { множественный выбор }
Strings: PStrCollection;
Selection: PMultiSelRec;
end;
PMultiSelRec - это запись, определенная в модуле ODialogs.
Запись должна выделяться с помощью функции AllocMultiSel, а осво-
бождаться - с помощью FreeMultiSel. Указатель nil указывает на
отсутствие выбранных элементов.
------------------------------------------------------------------------
TLookupValidator модуль Validate
-----------------------------------------------------------------
TObject TValidator TFileWindow
+------+ +-----------------+ +-----------+
+------| | Options | +-----------|
|-Init-| | Status | | IsValid |
| Done | +-----------------| | Lookup |
| Free | | Init | +-----------+
+------+ | Load |
|-IsInvalid-------|
| IsValidInput |
| Store |
| Transfer |
| Valid |
+-----------------+
Средство проверки допустимости с просмотром сравнивает наб-
ранную пользователем строку со списком допустимых значений.
TLookupValidator - это абстрактный тип проверки допустимости, из
которого вы можете создать полезные производные механизмы провер-
ки допустимости с просмотром. При создании типа проверки допусти-
мости с просмотром вам нужно задать список допустимых элементов и
переопределить метод Lookup, чтобы он возвращал True только в том
случае, если ввод пользователя совпадает с элементами списка. Од-
ним из примеров работающего потомка TLookupValidator является
TStringLookupValidator.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
IsValid (переопределяется редко)
-----------------------------------------------------------------
function IsValid(const S: string): Boolean; virtual;
Для поиска строки S в списке допустимых элементов ввода вы-
зывает Lookup. Возвращает True, если Lookup возвращает True, что
означает, что Lookup нашла S в своем списке. В противном случае
возвращается False.
См. также: TLookupValidator.Lookup.
Lookup (часто переопределяется)
-----------------------------------------------------------------
Ищет строку S в списке допустимых элементов и возвращает
True, если строка там найдена. В противном случае возвращает зна-
чение False. Функция Lookup объекта TLookupValidator - это абс-
трактный метод, который всегда возвращает False. Наследующие типы
проверки допустимости с просмотром должны переопределять Lookup и
выполнять поиск на основе фактического списка допустимых элемен-
тов.
------------------------------------------------------------------------
TMDIClient модуль OWindows
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList Parent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingPtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ Previous |
| CreateChildren PutChildPtr |
| CreateMemoryDC PutChildren |
| DefChildProc PutSiblingPtr |
| DefCommandProc -Register-----------|
| DefNotificationProc RemoveChild |
|-DefWndProc-- SetFlags |
| Destroy -SetupWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DispatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildPtr -WMVScroll----------|
+----------------------------------------+
TWindow TMDIClient
+-------------------+ +-----------------+
| Attr | | ClientAttr |
| DefaultProc | +-----------------|
| Scrol[ler | | Init |
| FocusChildHandle | | ArrangeIcons |
+-------------------| | CascadeChildren |
|-Init--------------| | GetClassName |
| InitResource | | Register |
|-Load--------------| | Store |
| Done | | TitleChildren |
| Create | | WMPaint |
| DefWndProc | +-----------------+
| FocusChild |
| GetId |
| GetWindowClass |
| Paint |
| SetCaption |
| SetupWindow |
|-Store-------------|
| UpdateFocusChild |
| WMActivate |
| WMHScroll |
| WMLButtonDown |
| WMMDIActivate |
| WMMove |
| WMPaint |
|-WMSize------------|
| WMSysCommand |
| WMVScroll |
+-------------------+
Пользовательские окна интерфейса работы с документами (MDI),
представляемые объектом TDMIClient, управляют дочерними окнами
MDI приложения MDI. Методы TMDIClient предназначены для работы с
дочерними окнами MDI.
В более ранних версиях ObjectWindows TMDIClient наследовал
из TControl. В данной версии TMDIClient является прямым потомком
TWindow.
Поля
-----------------------------------------------------------------
ClientAttr
ClientAttr: TClientCreateStruct;
ClientAttr содержит запись атрибутов окна клиента MDI.
TClientCreateStruct определен следующим образом:
type
PClientCreateStruct = ^TClientCreateStruct;
TClientCreateStruct = record
hWindowMenu: THandle;
idFirstChild: Word;
end;
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init (переопределяется редко)
-----------------------------------------------------------------
constructor Init(AParent: PMDIWindow);
Создает объект пользовательского окна MDI c AParent в ка-
честве порождающего окна. Вызывает конструктор Init, наследуемый
из TWindow, затем добавляет в Attr.Style стиль ws_ClipChildren.
Кроме того, Init удаляет окно клиента из списка порожденных окон
его предка, так что оно не интерпретируется (как другие дочерние
окна) как блоки списка и командные кнопки.
См. также: TWindow.Init.
Load
-----------------------------------------------------------------
constructor Load(var S: TStream);
Строит и загружает окно клиента MDI из потока S, вызывая
сначала TControl.Load, а затем считывая дополнительное поле
(CLientAttr), введенное TMDIClient.
См. также: TControl.Load.
ArrangeIcons (переопределяется редко)
-----------------------------------------------------------------
procedure ArrangeIcons; virtual;
Упорядочивает и минимизирует порожденные окна MDI в нижней
части окна клиента MDI.
CascadeChildren (переопределяется редко)
-----------------------------------------------------------------
procedure CascadeChildren; virtual;
Настраивает размер и упорядочивает все неминимизированные
дочерние окна MDI в окне клиента MDI. Дочерние окна могут перек-
рываться, хотя заголовок каждого окна остается видимым.
GetClassName (никогда не переопределяется)
-----------------------------------------------------------------
function GetClassName: PChar; virtual;
Возвpащает имя класса окна объекта TDMIClient - 'MDIClient'.
Register
-----------------------------------------------------------------
function Register: Boolean; virtual;
Возвращает True, поскольку класс окна клиента MDI предвари-
тельно зарегистрирован в Windows.
См. также: TWindowsObject.Register.
Store
-----------------------------------------------------------------
procedure Store(var S: TStream);
Сохраняет окно клиента MDI в потоке S, вызывая сначала
TControl.Store, а затем записывая дополнительное поле
(ClientAttr), введенное в TMDIClient.
См. также: TControl.Store.
TileChildren (переопределяется редко)
-----------------------------------------------------------------
procedure TileChildren; virtual;
Настраивает размер и упорядочивает все безпиктограммные до-
черние окна MDI в окне клиента MDI. Порожденные окна будут запол-
нять область пользователя без перекрытия.
WMPaint (никогда не переопределяется)
-----------------------------------------------------------------
procedure WMPaint(var Msg: TMessage); virtual
wm_First + wm_Paint;
Для отображения окна (как стандартного класса Windows) вызы-
вает DefWndProc.
------------------------------------------------------------------------
TMDIWindow модуль OWindows
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList Parent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingPtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ Previous |
| CreateChildren PutChildPtr |
| CreateMemoryDC PutChildren |
| DefChildProc PutSiblingPtr |
| DefCommandProc -Register-----------|
| DefNotificationProc RemoveChild |
|-DefWndProc-- SetFlags |
| Destroy -SetupWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DispatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildPtr -WMVScroll----------|
+----------------------------------------+
TWindow TMDIWindow
+-------------------+ +-------------------+
| Attr | | ChildMenuPos |
| DefaultProc | | ClientWnd |
| Scrol[ler | +-------------------|
| FocusChildHandle | | Init |
+-------------------| | Load |
|-Init--------------| | Done |
| InitResource | | ArrangeIcons |
|-Load--------------| | CascadeChildren |
|-Done--------------| | CloseChildren |
| Create | | CMArrangeIcons |
|-DefWndProc--------| | CMCascadeChildren |
| FocusChild | | CMCloseChildren |
| GetId | | CreateChild |
|-GetWindowClass----| | DefWndProc |
| Paint | | GetClassName |
| SetCaption | | GetClient |
| SetupWindow | | GetWindowClass |
|-Store-------------| | GetClient |
| UpdateFocusChild | | GetWindowClass |
| WMActivate | | InitChild |
| WMHScroll | | InitClientWindow |
| WMLButtonDown | | SetupWindow |
| WMMDIActivate | | Store |
| WMMove | | TileChildren |
| WMPaint | +-------------------+
| WMSize |
| WMSysCommand |
| WMVScroll |
+-------------------+
Пользовательские окна-рамки интерфейса работы с документами
(MDI), представляемые объектом TDMIWindow, представляют собой пе-
рекрываемые окна, которые используются в качестве основных окон
прикладной программы MDI. Одним из основных средств объекта
TDMIWindow является его собственный объект TMDIClient и сохране-
ние его в поле ClientWnd. Другое средство - это меню дочернего
окна, предлагающее возможности для работы с дочерними окнами при-
ложения MDI. Для отражения всех выводимых на экран дочерних окон
это окно автоматически получает уведомление.
Поля
-----------------------------------------------------------------
ChildMenuPos (чтение/запись)
ChildMenuPos: Integer;
ChildMenuPos определяет индекс, задающий позицию управляюще-
го меню дочернего окна. В индексе учитываются только элементы
верхнего уровня, а верхний левый элемент занимает нулевую пози-
цию.
ClientWnd (только чтение)
ClientWnd: PMDIClient;
ClientWnd указывает на обрамляющее окно (окно-рамку) окна
клиента MDI, экземпляр объекта TMDIClient.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init (часто переопределяется)
-----------------------------------------------------------------
constructor Init(ATitle: PChar; AMenu: HMenu);
Строит объект окна-рамки MDI, используя заданный заголовок
ATitle и меню, переданное в AMenu. Окна-рамки MDI требуют наличия
меню. Окна-рамки не имеют порождающего окна и должны быть основ-
ным окном приложения. По умолчанию Init устанавливает
ChildMenuPos в ноль, указывая, что меню дочернего окна - это меню
верхнего уровня. Чтобы модифицировать ChildPos, переопределите в
наследующих типах TMDIWindow.Init, например:
constructor MyMDIWindow.Init(ATitle: PChar; AMenu: HMenu);
begin
TMDIWindow.Init(ATitle, AMenu);
ChildMenuPos := 3;
end;
См. также: TMDIWindow.InitClientWindow.
Load
-----------------------------------------------------------------
constructor Load(var S: TStream);
Строит и загружает окно-рамку MDI из потока S, вызывая сна-
чала TWindow.Load, а затем получая и считывая дополнительные поля
(ClientWnd и ChildMenuPos), введенные в TMDIWindow.
См. также TWindow.Load.
Done (иногда переопределяется)
-----------------------------------------------------------------
destructor Done; virtual;
Перед вызовом для уничтожения оконного объекта окна-рамки
MDI наследуемого из TWindow деструктора Done уничтожает объект
окна клиента MDI, записанный в ClientWnd.
См. также: TWindow.Done.
ArrangeIcons (переопределяется редко)
-----------------------------------------------------------------
procedure ArrangeIcons;
Упорядочивает порожденные окна MDI с пиктограммами в нижней
части пользовательского окна MDI. Вызывает метод
ClientWnd^.ArrangeIcons.
См. также: TMDIClient.ArrangeIcons.
CascadeChildren (переопределяется редко)
-----------------------------------------------------------------
procedure CascadeChildren;
Настраивает размер и упорядочивает все безпиктограммные (не-
минимизированные) дочерние окна MDI в окне клиента MDI, так что
они перекрываются и выводится заголовок каждого окна. Вызывает
ClientWnd^.CascadeChildren.
См. также: TMDIClient.CascadeChildren.
CloseChildren (переопределяется редко)
-----------------------------------------------------------------
procedure CloseChildren;
Завершает все созданные дочерние окна MDI, для которых
CanClose возвращает True.
См. также: TWindow.CanClose.
CMArrangeIcons (переопределяется редко)
-----------------------------------------------------------------
procedure CMArrangeIcons(var Msg: TMessage); virtual
cm_First + cm_ArrangeIcons;
Вызывая ArrangeIcons, отвечает на выбор меню с идентификато-
ром cm_ArrangeIcons.
См. также: TDMIWindow.ArrangeIcons.
CMCascadeChildren (переопределяется редко)
-----------------------------------------------------------------
procedure CMCascadeChildren(var Msg: TMessage); virtual
cm_First + cm_CascadeChildren;
Вызывая CascadeChildren, отвечает на выбор меню с идентифи-
катором cm_CascadeChildren.
См. также: TDMIWindow.CascadeChildren.
CMCreateChild (никогда не переопределяется)
-----------------------------------------------------------------
procedure CMCreateChild(Msg: TMessage); virtual
cm_First + cm_CloseChildren;
Вызывая CreateChild, отвечает на выбор меню с идентификато-
ром cm_CloseChildren.
См. также: TDMIWindow.CreateChild.
CMTileChildren (переопределяется редко)
-----------------------------------------------------------------
procedure CMTileChildren(var Msg: TMessage); virtual
cm_First + cm_TileChildren;
Вызывая TileChildren, отвечает на выбор меню с идентификато-
ром cm_TileChildren.
См. также: TDMIWindow.InitChild.
CreateChild
-----------------------------------------------------------------
function CreateChild: PTWindowObject; virtual;
Вызывая InitChild и MakeWindow, строит и создает новое до-
чернее окно MDI. Вам нужно переопределить CreateChild, для насле-
дующих дочерних оконных типов MDI аналогично
TMDIWindow.InitChild. CreateChild возвращает указатель на новое
порожденное окно MDI.
См. также: TDMIWindow.InitChild, TApplication.MakeWindow.
DefWndProc
-----------------------------------------------------------------
procedure DefWndProc(var Msg: TMessage); virtual;
Переопределяет выполняемую по умолчанию в TWindow обработку
сообщений Windows, вызывая вместо DefWindowProc функцию Windows
DefFrameProc.
GetClassName (иногда переопределяется)
-----------------------------------------------------------------
function GetClassName: PChar; virtual;
Возвpащает имя класса окна Windows объекта TDMIWindow -
'TurboMDIWindow'.
GetClient (никогда не переопределяется)
-----------------------------------------------------------------
function CetClient: PTMDIClient; virtual;
Возвращает указатель на окно клиента MDI, сохраненное в
ClientWnd.
GetWindowClass (иногда переопределяется)
-----------------------------------------------------------------
procedure GetWindowClass(var AWndClass: TWndClass); virtual;
Модифицирует используемую по умолчанию запись класса окна и
передает ее обратно в AWndClass. GetWindowClass устанавливает по-
ле стиля в 0 и удаляет стили, установленные
TWindow.GetWindowClass.
См. также: TWindow.GetWindowClass.
InitChild (часто переопределяется)
-----------------------------------------------------------------
function InitChild: PTWindowsObject; virtual;
Строит объект дочернего окна MDI (TWindow) с заголовком 'MDI
Child' и возвращает указатель на него. Если вы определите тип до-
чернего окна MDI, наследующий из TWindow, для построения окна
своего нового дочернего оконного типа MDI переопределите
TMDIWindow.InitChild, например:
function MyMDIWindow.InitChild: PWindowsObject;
begin
InitChild := New(PMyMDIChild, Init(@Self,
'Окно без заголовка');
end;
См. также: TDMIWindow.CreateChild.
InitClientWindow (иногда переопределяется)
-----------------------------------------------------------------
procedure InitClientWindow; virtual;
Строит окно клиента MDI как экземпляр объекта TMDIClient,
сохраняя его в ClientWnd.
SetupWindow (часто переопределяется)
-----------------------------------------------------------------
procedure SetupWindow; virtual;
Строит окно клиента MDI (ClientWnd) соответствующего оконно-
го элемента объекта, вызывая InitClientWindow, и создает его с
помощью вызова MakeWindow. Если вы в наследующем типе переопреде-
лите SetupWindow, убедитесь в наличии явного вызова
TDMIWindow.SetupWindow.
См. также: TMDIWindow.InitClientWindow,
TApplication.MakeWindow.
Store
-----------------------------------------------------------------
procedure Store(var S: TStream);
Сохраняет окно MDI в потоке S, вызывая сначала
TWindow.Store, а затем помещая и записывая дополнительные поля
(ClientWnd и ChildMenuPos), введенные в TMDIWindow.
См. также: TWindow.Store.
TileChildren (переопределяется редко)
-----------------------------------------------------------------
procedure TileChildren;
Вызывая ClientWnd^.TileChildren, настраивает размер и упоря-
дочивает все безпиктограммные дочерние окна MDI в окне клиента
MDI, так что будет использовано без перекрытия все доступное
пространство.
См. также: TMDIClient.TileChildren.
Назад | Содержание | Вперед