TApplication (модуль OWindows)


TObjectTApplication
 HAccTable
KBhandlerWnd
Name
Status
Init
Done
Free
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.