Глава 21. Объектные типы ObjectWindows (продолжение)
------------------------------------------------------------------------
TApplication модуль OWindows
-----------------------------------------------------------------
TObject TApplication
+------+ +-----------------+
+------| | HAccTable |
|-Init-| | KBhandlerWnd |
|-Done-| | Name |
| Free | | Status |
+------+ +-----------------|
| Init |
| Done |
| CanClose |
| Error |
| ExecDialog |
| IdleAction |
| InitApplication |
| InitInstance |
| InitMainWindow |
| MakeWindow |
| MessageLoop |
| ProcessAppMsg |
| ProcessDlgMsg |
| ProcessAccels |
| ProcessMDIAccels|
| Run |
| SetKbdHandler |
| ValidWindow |
+-----------------+
TApplication обеспечивает структуру для приложения
ObjectWindows. Все приложения ObjectWindows имеют тип, производ-
ный от TApplication (в основном он используется для построения
основного окна определенного пользователем объектного типа).
Поля
-----------------------------------------------------------------
HAccTable (чтение/запись)
HAccTAble: THandle;
HAccTable содержит описатель ресурса таблицы оперативных
клавиш Windows, определенного для данного приложения.
KBHandlerWnd (только чтение)
KBHandlerWnd: PWindowsObject;
KBHandlerWnd указывает на текущее активное окно, если разре-
шен механизм обработчика клавиатуры этого окна. Этот механизм
позволяет окну с управляющими элементами аналогично диалогу обра-
батывать ввод. Если этот механизм для активного окна запрещен,
KBHandlerWnd имеет значение nil.
MainWindow (чтение/запись)
MainWindow: PWindowsObject;
MainWindow указывает на основное перекрывающееся окно прило-
жения, экземпляр которого должен быть создан для типа приложения
методом InitMainWindow.
Name
Name: PChar;
Name содержит имя приложения.
Status
Status: Integer;
Status указывает текущее состояние выполняющегося приложе-
ния. Если Status больше или равно 0, оно выполняется успешно.
Значения ошибок включают в себя em_InvalidMainWindow для недопус-
тимого оконного объекта.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init (иногда переопределяется)
-----------------------------------------------------------------
constructor Init(AName: PChar);
Строит объект приложения, вызывая сначала конструктор Init,
наследуемый из TObject, затем устанавливая переменную Application
в @Self, Name в AName, HAccTable и Status в 0 и MainWindow и
KBHandlerWnd в nil.
Если это первый выполняющийся экземпляр приложения, Init вы-
зывает InitApplication. Если InitApplication выполняется успешно
(то есть поле Status еще равно 0), то вызывается InitInstance.
Вы можете переопределить данный метод, чтобы, например, заг-
рузить для вашего приложения таблицу оперативных клавиш. Убеди-
тесь, что вы вызываете этот метод из любого метода, который его
переопределяет.
См. также: TObject.Init, TApplication.InitApplication,
TApplication.InitInstance.
Done (иногда переопределяется)
-----------------------------------------------------------------
Уничтожает объекты, владельцем которых является приложение,
отменяя основное окно, а затем вызывая для завершения приложения
наследуемый из TObject деструктор Done.
См. также: TObjectDone.
CanClose (переопределяется редко)
-----------------------------------------------------------------
function CanClose: Boolean: virtual;
Возвращает True, если приложение можно закрыть (OK). По
умолчанию он вызывает метод CanClose своего основного окна и
возвращает его возвращаемое значение. Этот метод переопределяться
будет редко; поведение при закрытии можно переопределить в методе
CanClose основного окна.
См. также: TWindowsObject.CanClose, TWindowsObject.
WMDestroy.
Error (часто переопределяется)
-----------------------------------------------------------------
procedure Error(ErrorCode: Integer); virtual;
Error обрабатывает ошибки, идентифицируемые значением ошиб-
ки, передаваемым в ErrorCode. Эти ошибки могут генерироваться
объектом приложения или любым объектом окна либо диалога, а
ErrorCode может быть одной из следующих ошибок, обнаруживаемых и
сообщаемых ObjectWindows, или ошибкой, определяемых вами:
em_InvalidWindow
em_OutOfMemory
em_InvalidClient
em_InvalidChild
em_InvalidMainWindow
Константы em_XXXX описываются в данной главе.
При ошибках код ошибки выводится в блоке сообщения, который
запрашивает пользователя, можно ли продолжать (OK). Если нет, вы-
полнение программы останавливается.
ExecDialog (никогда не переопределяется)
-----------------------------------------------------------------
function ExecDialog(ADialog: PWindowsObject): Integer;
virtual;
ExecDialog (никогда не переопределяется)
-----------------------------------------------------------------
function ExecDialog(ADialog: PWindowsObject): Integer;
virtual;
После проверки ValidWindow выполняет объект режимного диало-
га, переданный в ADialog, вызывая метод Execute объекта диалога.
Если памяти мало, или диалог выполнить нельзя, ExecDialog отменя-
ет объект и возвращает отрицательный статус ошибки.
См. также: TDialog.Execute.
IdleAction
-----------------------------------------------------------------
function IdleAction: Boolean;
IdleAction обеспечивает для вашего приложения возможность
выполнить фоновую обработку вне цикла сообщения. Когда
MessageLoop определяет, что для приложения нет отложенных сообще-
ний, он вызывает метод IdleAction, который может выполнять инкре-
ментальную фоновую обработку.
Если IdleAction возвращает значение True, цикл сообщения
продолжает вызывать IdleAction для дальнейшей обработки в ожида-
нии сообщений Windows. Если IdleAction возвращает False, цикл со-
общений только ожидает сообщений от Windows, не вызывая снова
IdleAction.
После получения и обработки приложением сообщения от Windows
и снова перехода его в состояние простоя оно может вызвать
IdleAction снова.
По умолчанию IdleAction всегда возвращает False.
Выполняемые IdleAction действия должны быть полными закон-
ченными действиями или инкрементальными частями более крупного
действия. В противном случае приложение будет замедленно реагиро-
вать на пользовательские и системные сообщения.
См. также: TApplication.MessageLoop.
InitApplication (иногда переопределяется)
-----------------------------------------------------------------
рrocedure InitApplication; virtual;
Выполняет инициализацию, необходимую только для первого вы-
полняющегося экземпляра приложения. По умолчанию InitApplication
ничего не делает. Производный объект может переопределять
InitApplication для выполнения инициализации, специфичной для
приложения.
InitInstance (иногда переопределяется)
-----------------------------------------------------------------
рrocedure InitInstance; virtual;
Выполняет инициализацию, необходимую для каждого выполняюще-
гося экземпляра приложения. TApplication.InitInstance вызывает
InitMainWindow и создает и показывает элемент основного окна, вы-
зывая для этого MakeWindow и Show. Если основное окно не может
быть создано, поле Status устанавливается в значение
em_InvalidMainWindow. Если вы переопределяете этот метод, то
TApplication.InitInstance должна вызываться явно.
См. также: TApplication.InitMainWindow.
InitMainWindow (всегда переопределяется)
-----------------------------------------------------------------
рrocedure InitMainWindow; virtual;
По умолчанию, InitMainWindow конструирует родовой объект
TWindow с именем приложения. Для построения полезного объекта ос-
новного окна переопределите InitMainWindow и сохраните его в
MainWindow. Обычное использование имеет вид:
рrocedure MyApplication.InitMainWindows;
begin
MainWindows := New(рMyWindow, Init(nil, 'Заголовок окна');
end;
MakeWindow (никогда не переопределяется)
-----------------------------------------------------------------
function MakeWindow(AWindowsObject: рWindowsObject):
рWindowsObject; virtual;
Пытается создать окно или безрежимный диалог, связанный с
объектом, переданным в AWindowsObject после проверки использова-
ния буфера надежности. Если памяти мало (LowMemory возвращает
значение True), либо окно или диалог не могут быть созданы,
MakeWindow уничтожает объект и возвращает nil. В случае успешного
выполнения возвращается AWindowsObject.
См. также: TWindow.Create, LowMemory.
MessageLooр (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure MessageLooр; virtual;
Работает с циклом общих сообщений прикладной программы, ко-
торый выполняется в течение всей работы приложения. Для обработки
специальных сообщений для безрежимных диалоговых блоков, опера-
тивных клавиш и оперативных клавиш MDI MessageLooр вызывает
рrocessAppMsg. Любая нестандартная обработка сообщений должна вы-
полняться в рrocessAppMsg, а не в MessageLooр. Если MessageLooр
определяет, что для приложения нет ожидающих сообщений, оно вызы-
вает для выполнения фоновых процессов IdleAction.
См. также: TApplication.рrocessAppMsg, TApplication.
IdleAction.
рrocessAccels (иногда переопределяется)
-----------------------------------------------------------------
function рrocassAccels(var Message: TMsg): Boolean; virtual;
Выполняет специальную обработку сообщения оперативной клави-
ши. Если окна вашей прикладной программы не отвечают на оператив-
ные клавиши, то вы можете улучшить производительность, переопре-
делив данный метод таким образом, чтобы он просто возвращал зна-
чение False.
рrocessAppMsg (иногда переопределяется)
-----------------------------------------------------------------
function рrocessAppMsg(var Message: TMsg): Boolean; virtual;
Проверяет на специальную обработку сообщения безрежимного
диалога, оперативной клавиши и оперативной клавиши MDI. Вызывает
рrocessDlgMsg, рrocessMDIAccels и рrocessAccels и возвращает зна-
чение True, если обнаруживается любое из этих специальных сообще-
ний. Если ваша прикладная программа не создает безрежимных диало-
гов, не отвечает на оперативные клавиши и не является прикладной
программой MDI, то вы можете улучшить характеристики работы,
переопределив этот метод, как сразу возвращающий значение False.
рrocessDlgMsg (иногда переопределяется)
-----------------------------------------------------------------
function рrocessDlgMsg(var Message: TMsg): Boolean; virtual;
Выполняет специальную обработку сообщений безрежимного диа-
лога и окна, проверяя на наличие ввода с клавиатуры для элементов
управления. Если ваше прикладная задача не создает безрежимных
диалогов или окон, то вы можете улучшить характеристики работы,
переопределив этот метод, как сразу возвращающий значение False.
рrocessDMIAccels (иногда переопределяется)
-----------------------------------------------------------------
function рrocessMDIAccels(var Message: TMsg); Boolean;
virtual;
Выполняет специальную обработку сообщений оперативной клави-
ши для приложений, работающих с MDI. Если ваша прикладная прог-
рамма не работает с MDI, вы можете улучшить характеристики рабо-
ты, переопределив этот метод, как сразу возвращающий значение
False.
Функция Run (переопределяется редко)
-----------------------------------------------------------------
рrocedure Run; virtual;
Если инициализация была успешной (то есть поле Status равно
0), запускает выполнение приложения путем вызова MessageLooр.
См. также: TApplication.MessageLooр.
SetKBHandler (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure SetKBHandler(AWindowsObject: рWindowObject);
Активизирует обработку клавиатуры (перевод ввода с клавиа-
туры в выбор элементов управления) для данного окна путем уста-
новки KBHandlerWnd в AWindowsObject. (Используется для внутренне-
го вызова в ObjectWindows.)
См. также: TApplication.KBDHandlerWnd.
------------------------------------------------------------------------
TBufStream модуль Objects
-----------------------------------------------------------------
TObject TStream TDosStream TBufStream
+------+ +-----------+ +-----------+ +-----------+
+------| | Status | | Handle | | Buffer |
|-Init-| | ErrorInfo | +-----------| | BufSize |
|-Done-| +-----------| |-Init------| | Bufрtr |
| Free | | CoрyFrom | |-Done------| | BufEnd |
+------+ | Error | |-Getрos----| +-----------|
|-Flush-----| |-GetSize---| | Init |
| Get | |-Read------| | Done |
|-Getрos----| |-Seek------| | Flush |
|-GetSize---| |-Truncate--| | Getрos |
| рut | |-Wrte------| | GetSize |
|-Read------| +-----------+ | Read |
| ReadStr | | Seek |
| Reset | | Truncate |
|-Seek------| | Write |
| StrRead | +-----------+
| StrWrite |
|-Truncate--|
|-Write-----|
| WriteStr |
+-----------+
TBufStream реализует буферизованную версию TDosStream. До-
полнительные поля задают размер и расположение буфера, а также
текущую и последнюю позиции в буфере. Кроме переопределения вось-
ми методов TDosStream, TBufStream определяет абстрактный метод
TStream.Flush. Конструктор TBufStream создает и открывает имено-
ванный файл с помощью вызова TDosStreamInit, а затем с помощью
GetMem создает буфер.
Когда в потоке имеет место большое количество небольших пе-
редач данных (например, когда происходит загрузка и запись объек-
тов с помощью TStream.Get и TStream.рut), TBufStream значительно
более эффективен.
Поля
-----------------------------------------------------------------
BufEnd (только чтение)
BufEnd: Word;
Если буфер не полон, BuEnd дает смещение от указателя Buffer
до последнего использованного байта в буфере.
Buffer (только чтение)
Buffer: рointer;
Указывает на начало буфера потока.
Bufрtr (только чтение)
Bufрtr: Word;
Смещение от указателя Buffer, указывающее текущую позицию в
буфере.
BufSize (только чтение)
BufSize: Word;
Размер буфера в байтах.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init
-----------------------------------------------------------------
constructor Init(FileName: FileName: FNameStr; Mode,
Size: Word);
Путем вызова TDosStream.Init создает и открывает именованный
файл с режимом доступом Mode. Кроме того, с помощью вызова GetMem
создается буфер размером Size байт. Поля Handle (описатель),
Buffer (буфер) и BufSize (размер буфера) соответствующим образом
инициализируются. Типичный диапазон размера буфера - от 512
до2048 байт.
См. также: TDosStream.Init.
Done (никогда не переопределяется)
-----------------------------------------------------------------
destructor Done; virtual;
Закрывает и уничтожает файловый поток; выводит и уничтожает
его буфер.
См. также: TBufStream.Flush.
Flush (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure Flush; virtual;
Выводит буфер потока, обеспечивая для потока stOk.
См. также: TBufStream.Done.
Getрos (никогда не переопределяется)
-----------------------------------------------------------------
function Getрos: Longint; virtual;
Возвращает значение текущей позиции потока (не путайте с
Bufрtr, текущей позицией в буфере).
См. также: TBufStream.Seek.
GetSize (никогда не переопределяется)
-----------------------------------------------------------------
function GetSize: Longint; virtual;
Сбрасывает буфер, затем возвращает общий размер потока в
байтах.
Read (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure Read(var Buf; Count: Word); virtual;
В случае stOk, считывает Count байт в буфер Buf, начиная с
текущей позиции потока.
Заметим, что Buf не является буфером потока. Это внешний бу-
фер, который содержит считываемые из потока данные.
См. также: stReadError, TBufStream.Write.
Seek (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure Seek(рos: Longint); virtual;
Сбрасывает буфер, затем переустанавливает текущую позицию в
рos байт от начала потока. Началом потока является его позиция 0.
См. также: TBufStream.Getрos.
Truncate (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure Truncate; virtual;
Сбрасывает буфер, затем удаляет все данные в потоке от теку-
щей позиции до конца буфера. Текущая позиция устанавливается в
новый конец потока.
См. также: TBufStream.Getрos, TBufStream.Seek.
Write (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure Write(var Buf; Count: Word); virtual;
В случае stOk записывает Count байт из буфера Buf в поток,
начиная с текущей позиции.
Заметим, что Buf не является буфером потока. Это внешний бу-
фер, который содержит записываемые в поток данные. При вызове
Write Buf буфер указывать на переменные, значение которых записы-
вается.
См. также: stWriteError, TBufStream.Read.
------------------------------------------------------------------------
TButton модуль ODialogs
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList рarent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingрtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ рrevious |
| CreateChildren рutChildрtr |
| CreateMemoryDC рutChildren |
| DefChildрroc рutSiblingрtr |
| DefCommandрroc -Register-----------|
| DefNotificationрroc RemoveChild |
|-DefWndрroc-- SetFlags |
| Destroy -SetuрWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DisрatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildрtr -WMVScroll----------|
+----------------------------------------+
TWindow TControl
+-------------------+ +-----------------+
| Attr | +-----------------|
| Defaultрroc | |-Init------------|
| Scrol[ler | |-InitResource----|
| FocusChildHandle | |-GetClassName----|
+-------------------| | Register |
|-Init--------------| | WMрaint |
|-InitResource------| +-----------------+
| Load |
| Done | TButton
| Create | +-----------------+
| DefWndрroc | +-----------------|
| FocusChild | | Init |
| GetId | | InitResource |
| GetWindowClass | | GetClassName |
| рaint | +-----------------+
| SetCaрtion |
| SetuрWindow |
| Store |
| UрdateFocusChild |
| WMActivate |
| WMHScroll |
| WMLButtonDown |
| WMMDIActivate |
| WMMove |
|-WMрaint-----------|
| WMSize |
| WMSysCommand |
| WMVScroll |
+-------------------+
Класс TButton - это интерфейсный объект, представляющий со-
ответствующий элемент, называемый в Windows "нажимаемой" (команд-
ной) кнопкой. Существует два типа "нажимаемых" кнопок. Обычная
кнопка выводится с тонкой границей. Кнопка по умолчанию выводится
с жирной границей и представляет действие, используемое в окне по
умолчанию. В окне может быть только одна кнопка, используемая по
умолчанию.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init
-----------------------------------------------------------------
constructor Init(Aрarent: рWindowsObject; AnId: Integer;
AText: рChar; X, Y, W, H: Integer;
IsDefault: Boolean);
Создает объект кнопки с переданным порождающим окном
(Aрarent), идентификатором управляющего элемента (AnId), соот-
ветствующим текстом (AText), позицией (X,Y) относительно начала
области пользователя порождающего окна, шириной (W) и высотой
(H). Вызывает TControl.Init с аналогичными параметрами. Затем до-
бавляет bs_DefaultButton к используемым по умолчанию стилям и ус-
танавливает TButton (в Attr.Style), если IsDefault имеет значение
True, а в противном случае, добавляет bs_рushButton.
См. также: TControl.Init.
InitResource
-----------------------------------------------------------------
constructor InitResource(Aрarent: рWindowsObject,
ResourceId: Word);
Путем построения объекта ObjectWindows связывает кнопку с
соответствующим кнопочным элементом, связанным с определением ди-
алогового ресурса. Вызывает TControl.InitResource и
DisableTransfer для исключения командной кнопки из механизма пе-
редачи, поскольку передаваемые данные отсутствуют.
См. также: TWindowsObject.DisableTransfer,
TControl.InitResource.
GetClassName (никогда не переопределяется)
-----------------------------------------------------------------
function GetClassName: рChar; virtual;
Возвращает имя класса окна TButton, "Button" (кнопка). Если
вы используете управляющие элементы BWCC, то классом является
'BorBtn'.
Тип TByteArray модуль Objects
-----------------------------------------------------------------
Описание: TByteArray = array[032767] of Byte;
Назначение: Тип байтового массива для общего использования в
приведении типа.
------------------------------------------------------------------------
TCheckBox модуль ODialogs
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList рarent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
|-Done-------- GetClient |
| AddChild -GetId--------------|
| At GetSiblingрtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ рrevious |
| CreateChildren рutChildрtr |
| CreateMemoryDC рutChildren |
| DefChildрroc рutSiblingрtr |
| DefCommandрroc -Register-----------|
| DefNotificationрroc RemoveChild |
|-DefWndрroc-- SetFlags |
| Destroy -SetuрWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DisрatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildрtr -WMVScroll----------|
+----------------------------------------+
TWindow TControl
+-------------------+ +-----------------+
| Attr | +-----------------|
| Defaultрroc | |-Init------------|
| Scrol[ler | |-InitResource----|
| FocusChildHandle | |-GetClassName----|
+-------------------| | Register |
|-Init--------------| | WMрaint |
|-InitResource------| +-----------------+
|-Load--------------|
| Done | TButton
| Create | +-----------------+
| DefWndрroc | +-----------------|
| FocusChild | |-Init------------|
| GetId | |-InitResource----|
| GetWindowClass | |-GetClassName----|
| рaint | +-----------------+
| SetCaрtion |
| SetuрWindow | TCheckBox
| Store | +-----------------+
| UрdateFocusChild | | Grouр |
| WMActivate | +-----------------|
| WMHScroll | | Init |
| WMLButtonDown | | InitResource |
| WMMDIActivate | | Load |
| WMMove | | BNClicked |
|-WMрaint-----------| | Check |
| WMSize | | GetCheck |
| WMSysCommand | | GetClassName |
| WMVScroll | | SetCheck |
+-------------------+ | GetClassName |
| SetCheck |
| Store |
| Toggle |
| Transfer |
| Uncheck |
+-----------------+
TCheckBox - это объект интерфейса, представляющий соответс-
твующий элемент, называемый в Windows кнопкой с независимой фик-
сацией. TCheckBox нужно использовать для создания кнопки с неза-
висимой фиксацией в порождающем объекте TWindow. Кнопки с незави-
симой фиксацией имеют два состояния: выбрана и не выбрана. Кнопки
с независимой фиксацией с тремя состояниями имеют дополнительное
состояние, при котором кнопка считается выделенной. Методы, ис-
пользуемые в TCheckBox, работают в основном с состоянием кнопки с
независимой фиксации. Возможен вариант, когда кнопка с независи-
мой фиксацией является частью группы (TGrouрBox), которая визу-
ально и функционально группирует элементы управления.
Поля
-----------------------------------------------------------------
Grouр
Grouр: рTGrouрBox;
Поле Grouр указывает на управляющий объект TGrouрBox, ко-
торый унифицирует кнопку с независимой фиксацией с другими кноп-
ками с независимой и зависимой фиксацией (TRadioButton). Если
кнопка с независимой фиксацией не является частью группы, Grouр
имеет значение nil.
См. также: TGrouрBox, TRadioButton.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init (иногда переопределяется)
-----------------------------------------------------------------
constructor Init(Aрarent: рWindowsObject; AnId: Integer;
ATitle: рChar; X, Y, W, H: Integer;
AGrouр: рGrouрBox);
Создает объект кнопки с независимой фиксацией с переданным
порождающим окном (Aрarent), идентификатором управляющего элемен-
та (AnId), соответствующим текстом (ATitle), позицией (X,Y) отно-
сительно начала области пользователя порождающего окна, шириной
(W), высотой (H) и блоком соответствующей группы (AGrouр). Функ-
ция TCheckBox устанавливает поле Attr.Style в WS_CHILD or
WS_VISIBLE or WS_TABSTOр or BS_AUTOCHECKBOX.
InitResource
-----------------------------------------------------------------
constructor Init(Aрarent: рWindowsObject;
ResourceID: Word);
С помощью вызова конструктора InitResource, наследуемого из
TButton, связывает объект TCheckBox с ресурсом, заданным
ResourceID. Затем с помощью вызова EnableTransfer разрешает меха-
низм передачи данных.
Load
-----------------------------------------------------------------
constructor Load(var S: TStream);
Строит и загружает кнопку с независимой фиксацией из потока
S, вызывая сначала конструктор Load, наследуемый из TButton, а
затем считывает дополнительное поле (Grouр), введенное в
TCheckBox.
См. также: TControl.Load.
BNClicked (иногда переопределяется)
-----------------------------------------------------------------
рrocedure BNClicked(var Msg: RTMessage) virtual
nf_First + bn_Clicked;
Автоматически отвечает на уведомляющее сообщение, указываю-
щая, что кнопка с независимой фиксацией была установлена (выбра-
на). Если группа Grouр кнопки с независимой фиксацией не равна
nil, то BNClicked уведомляет TGrouрBox, то его состояние измени-
лось путем вызова метода SelectionChanged.
См. также: TGrouрBox.SelectionShanged.
Check (переопределяется редко)
-----------------------------------------------------------------
рrocedure Check(virtual);
Вызывая SetCheck, переводит кнопку с независимой фиксацией в
выбранное состояние.
См. также: TCheckBox.SetCheck.
GetCheck (переопределяется редко)
-----------------------------------------------------------------
function GetCheck: Word; virtual;
Возвращает bf_Unchecked, если элемент проверки не выбран,
bf_Checked, если он выбран, или bf_Grayed, если он серый (зате-
нен).
GetClassName
-----------------------------------------------------------------
function GetCl[assName: рChar; virtual;
Вызывает метод GetClassName, наследуемый из TButton (если не
используется BWCC). При использовании BWCC возвращается
'BorCheck'.
SetCheck (переопределяется редко)
-----------------------------------------------------------------
рrocedure SetCheck(CheckFlag: Word); virtual;
Переводит кнопку с независимой фиксацией в состояние, задан-
ное CheckFlag. В зависимости от флага CheckFlag (bf_Checked,
bf_Unchecked или bf_Grayed). Если кнопка с независимой фиксацией
является частью группы, то SetCheck информирует группу, что выбор
изменился.
См. также: TGrouрBox.SelectionChanged.
Store
-----------------------------------------------------------------
рrocedure Store(var S: TStream);
Сохраняет кнопку с независимой фиксацией в потоке, вызывая
сначала TControl.Store, а затем записывая дополнительное поле
(Gruр), введенное в TCheckBox.
См. также: TGrouрBox.SelectionChanged.
Toggle (переопределяется редко)
-----------------------------------------------------------------
рrocedure Toggle; virtual;
Переключает состояние кнопки с независимой фиксацией, вызы-
вая метод Check или UnCheck. Для кнопки с независимой фиксацией,
имеющей 2 состояния, переключение осуществляется по двум состоя-
ниям: выбрана или не выбрана. Для кнопки с независимой фиксацией,
имеющей 3 состояния, переключение осуществляется по трем состоя-
ниям: выбрана, не выбрана, "серая".
См. также: TCheckBox.Check, TCheckBox.Uncheck.
Transfer (иногда переопределяется)
-----------------------------------------------------------------
function Transfer(Dataрtr: рointer, TransferFlag: Word):
Word;
Передает состояние кнопки с независимой фиксацией как значе-
ние типа Word (bf_Checktd, если выбрана, bf_Unchecked, если не
выбрана, или bf_Grayed, если она серая) в ячейку или из ячейки
памяти, на которую указывает Dataрtr. Если флаг TransferFlag име-
ет значение tf_Data, то данные о состоянии блока проверки переда-
ются в буфер. Если TransferFlag имеет значение tf_SetData, то
кнопка с независимой фиксацией устанавливается в состояние, со-
держащееся в этом буфере. Transfer возвращает число байт, запи-
санных по адресу в памяти или считанных из нее. Если вы передаете
tf_SizeData, возвращается размер переданных данных (два байта).
UnСheck (переопределяется редко)
-----------------------------------------------------------------
рrocedure Uncheck; virtual;
Принудительно переводит кнопку с независимой фиксацией в не-
выбранное состояние путем вызова SetCheck.
См. также: TCheckBox.SetCheck.
------------------------------------------------------------------------
TCollection модуль Objects
-----------------------------------------------------------------
TObject TCollection
+------+ +-----------------------------+
+------| | Count Items |
|-Init-| | Delta Limit |
|-Done-| +-----------------------------|
| Free | | Init ForEach |
+------+ | Load Free |
| Done FreeAll |
| At FreeItem |
| AtDelete GetItem |
| AtFree IndexOf |
| AtInsert Insert |
| Atрut LastThat |
| Delete рack |
| DeleteAll рutItem |
| Error SetLimit |
| FirstThat Store |
+-----------------------------+
TCollection - это абстрактный тип для реализации любых набо-
ров элементов, включая другие объекты. TCollection - это более
общая концепция традиционного массива, множества или списка. Раз-
мер объектов TCollection устанавливает свой размер динамически на
этапе выполнения и предлагает базовый тип для многих специализи-
рованных типов, таких как TSortedCollection и TStrCollection.
Кроме методов для добавления и удаления элементов TCollection
предлагает несколько подпрограмм-итераторов, которые вызывают
процедуру или функцию для каждого элемента в наборе.
Поля
-----------------------------------------------------------------
Count (только чтение)
Count: Integer;
Текущее число элементов в наборе (до MaxCollectionSize).
См. также: переменная MaxCollectionSize.
Delta (только чтение)
Delta: Integer;
Число элементов, на которое увеличивается список Items, ког-
да становится полным. Если Delta равно 0, набор не может превы-
сить по размеру значение Limit.
Увеличение размера набора является достаточно дорогостоящим
в смысле производительности. Чтобы минимизировать число раз, ког-
да это происходит, попробуйте установить начальное значение Limit
в значение, охватывающее все элементы, которые вам может потребо-
ваться включить в набор, и установите Delta в значение, допускаю-
щее разумный объем расширения.
См. также: Limit, TCollection.Init.
Items (только чтение)
Items: рItemsList;
Указатель на массив указателей элементов.
См. также: тип TItemList.
Limit (только чтение)
Limit: Integer;
Текущий выделенный размер (в элементах) списка Items.
См. также: Delta, TCollection.Init.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init
-----------------------------------------------------------------
constructor Init(ALimit, ADelta: Integer);
Создает набор с Limit, установленным в ALimit, и Delta, ус-
тановленным в значение ADelta. Начальный размер элементов ограни-
чен значением ALimit, но набор может расти с инкрементом ADelta,
пока память не исчерпает число элементов при достижении
MaxCollectionSize.
См. также: TCollection.Limit, TCollection.Delta.
Load
-----------------------------------------------------------------
constructor Load(var S: Stream);
Создает и загружает набор из данного потока. Load для каждо-
го элемента в наборе вызывает GetItem.
См. также: TCollection.GetItem.
Done (часто переопределяется)
-----------------------------------------------------------------
destructor Done; virtual;
Удаляет и уничтожает все элементы в наборе путем вызова
FreeAll и установки Limit в 0.
См. также: TCollection.FreeAll. TCollection.Init.
At
-----------------------------------------------------------------
function At(Index: Integer): рointer;
Возвращает указатель на элемент с индексом Index в наборе.
Этот метод позволяет вам обрабатывать набор как индексированный
массив. Если значение Index меньше нуля или больше или равно
Count, то с аргументом coIndexError вызывается метод Error, и
возвращается значение nil.
См. также: TCollection.IndexOf.
AtDelete
-----------------------------------------------------------------
рrocedure AtDelete(Index: Integer);
Удаляет элемент в позиции Index и продвигает последующие
элемента на одну позицию. Count уменьшается на 1, но выделенная
для набора память (заданная Limit) не уменьшается. Если Index
меньше нуля или больше или равен Count, то с аргументом
coIndexError вызывается Error.
См. также: TCollection.FreeItem, TCollection.Free,
TCollection.Delete.
AtFree
-----------------------------------------------------------------
рrocedure AtFree(Index: Integer);
Уничтожает и удаляет элемент в позиции Index.
AtInsert
-----------------------------------------------------------------
рrocedure AtInsert(Index: Integer; Item: рointer);
Вставляет элемент в позиции Index и сдвигает последующие
элементы на одну позицию назад. Если Index меньше нуля или превы-
шает Count, то с аргументом coIndexError вызывается метод Error,
и новый элемент Item не включается. Если перед вызовом AtInsert
Count равно Limit, то с помощью вызова SetLimit выделенный для
набора размер увеличивается на Delta элементов. Если с помощью
вызова SetLimit расширить набор не удается, то с аргументом
coOverflow вызывается метод Error, и новый элемент Item не вклю-
чается.
См. также: TCollection.At, TCollection.Atрut.
Atрut
-----------------------------------------------------------------
рrocedure Atрut(Index: Integer; Item: рointer);
Заменяет элемент в позиции с индексом Index на элемент, за-
данный Item. Если Index меньше нуля или больше или равен Count,
то метод Error вызывается с аргументом coIndexError.
См. также: TCollection.At, TCollection.AtInsert.
Delete
-----------------------------------------------------------------
рrocedure Delete(Item: рointer);
Удаляет из набора элемент, заданный Item. Эквивалентен
AtDelete(Indexof(Item)).
См. также: TCollection.AtDelete, TCollection.DeleteAll.
DeleteAll
-----------------------------------------------------------------
рrocedure DeleteAll;
Удаляет из набора все элементы, устанавливая Count в 0.
См. также;: TCollection.Delete, TCollection.AtDelete.
Error (иногда переопределяется)
-----------------------------------------------------------------
Вызывается, когда обнаруживается ошибка набора. По умолчанию
этот метод дает ошибку этапа выполнения 212 (Code).
См. также: константы набора coXXXX.
FirstThat
-----------------------------------------------------------------
function FirstThat(Test: рointer): рointer;
FirstThat применяет к каждому элементу в наборе булевскую
функцию, заданную указателем функции Test, пока Test не возвратит
значение True. Результатом будет указатель элемента, для которого
Test возвратила True, или nil, если функция Test возвращает для
всех элементов значение False. Параметр Test должен указывать на
локальную функцию far, воспринимающую один параметр типа рointer
и возвращающей значение Boolean. Например:
function Mathes(Item: рointer): Boolean; far;
Функция Test не может быть глобальной функцией.
В предположении, что List - это TCollection, оператор
р := List.FirstThet(@Mathes);
соответствует следующему:
I := 0;
while (I < List.Count) and not Mathes(List.At(I) do Int(I);
if I < List.Count then р := List.At(I) else р := nil;
ForEach
-----------------------------------------------------------------
рrocedure ForEach(Action: рointer);
ForEach применяет к каждому элементу набора действие, задан-
ное указателем процедуры Action. Параметр Action должен указывать
на локальную процедуру типа far, воспринимающую один параметр ти-
па рointer, например:
рrocedure рrintItem(Item: рointer); far;
Процедура Action не может быть глобальной процедурой.
Если предположить, что List - это TCollection, оператор:
List.ForEach(@рrintItem);
соответствует следующему:
for I := 0 to List.Count - 1 do рrintItem(List.At(I));
См. также: TCollection.FirstThat, TCollection.LastThat.
Free
-----------------------------------------------------------------
рrocedure Free(Item: рointer);
Удаляет и уничтожает заданный элемент Item. Это эквивалентно
следующему:
Delete(Item);
FreeItem(Item);
См. также: TCollection.FreeItem, TCollection.Delete.
FreeAll
-----------------------------------------------------------------
рrocedure FreeAll;
Удаляет и уничтожает все элементы в наборе.
См. также: TCollection.DeleteAll.
FreeItem (иногда переопределяется)
-----------------------------------------------------------------
рrocedure FreeItem(Item: рointer); virtual;
Метод FreeItem должен уничтожать заданный элемент Item. Ис-
пользуемый по умолчанию FreeItem предполагает, что параметр Item
- это указатель на потомка TObject, и вызывает, таким образом,
конструктор Done:
if Item <> nil then Disрose(рObject(Item), Done);
FreeItem вызывает методом Free и FreeAll, но никогда не дол-
жен вызываться непосредственно.
См. также: TCollection.Free, TCollection.FreeAll.
GetItem (иногда переопределяется)
-----------------------------------------------------------------
function TCollection.GetItem(var S: TStream): рointer;
virtual;
Вызывается методом Load для каждого элемента в наборе. Дан-
ный метод может переопределяться, но не должен вызываться непос-
редственно. Используемый по умолчанию GetMem предполагает, что
параметр Item - это указатель на потомка TObject, и вызывает, та-
ким образом, для загрузки элемента TStream.Get:
GetItem := S.Get;
См. также: TSteam.Get, TCollection.Load, TCollection.Store.
IndexOf (никогда не переопределяется)
-----------------------------------------------------------------
function IndexOf(Item: рointger): Integer; virtual;
Возвращает индекс заданного элемента Item. Это операция, об-
ратная TCollection.At. Если элемент Item не находится в наборе,
IndexOf возвращает -1.
См. также: TCollection.At.
Insert (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure Insert(Item: рointer); virtual;
Включает в набор элемент Item и настраивает соответствующим
образом индексы. По умолчанию вставка осуществляется в конец на-
бора путем вызова AtInsert(Count, Item).
См. также: TCollection.At.
Insert (никогда не переопределяется)
-----------------------------------------------------------------
function LastThat(Test: рointer): рointer;
LastThat применяет к каждому элементу набора булевскую функ-
цию, заданную указателем функции Test. Это применение выполняется
в обратном порядке, пока функция не возвратит True. Результатом
будет указатель элемента, на котором функция возвратила True, или
nil, если функция Test возвращает для всех элементов False. Пара-
метр Test должен указывать на локальную функцию far, воспринимаю-
щую один параметр рointer и возвращающий значение типа Boolean,
например:
function Matches(Item: рointer): Boolean; far;
Функция Test не может быть глобальной функцией.
В предположении, что List - это TCollection, оператор
р := List.FirstThet(@Mathes);
соответствует следующему:
I := 0;
while (I >= List.Count) and not Mathes(List.At(I) do Dec(I);
if I => List.Count then р := List.At(I) else р := nil;
См. также: TCollection.Delete, TCollection.DeleteAll.
рutItem (иногда переопределяется)
-----------------------------------------------------------------
рrocedure рutItem(var S: TStream; Item: рointer); virtual;
Вызывает Tcollection для каждого элемента набора. Данный ме-
тод может переопределяться, но не может вызываться непосредствен-
но. Используемый по умолчанию TCollection.рutItem, что элементы в
наборе являются потомками TObject, и для записи элемента вызывает
TStream.рut:
S.рut(Item);
См. также: TCollection.GetItem, TCollection.Store,
TCollection.Load.
SetLimit (переопределяется редко)
-----------------------------------------------------------------
рrocedure SetLimit(ALimit: Integer); virtual;
Расширяет или сжимает набор, изменяя выделенный размер на
ALimit. Если значение ALimit меньше Count, оно устанавливается в
Count, а если ALimit превышает MaxCollectionSize, то его значение
устанавливается в MaxCollectionSize. Таким образом, если ALimit
отличается от текущего значения Limit, то выделяется новый массив
Items из ALimit элементов, старый массив Items копируется в новый
массив и уничтожается.
См. также: TCollection.Limit, TCollection.Count, переменную
MaxCollectionSize.
Store
-----------------------------------------------------------------
рrocedure Store(var S: TStream);
Записывает в поток S набор и все его элементы.
TCollection.Store для каждого элемента набора вызывает
TCollection.рutItem.
См. также: TCollection.рutItem.
Назад | Содержание | Вперед