Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

Глава 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.
                              Назад | Содержание | Вперед

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...