Pascal 7 & Objects

       

Инициализация первого экземпляра


-----------------------------------------------------------------

Если пользователь запускает приложение в отсутствии уже ра- ботающих других экземпляров этого приложения, вы можете опреде- лить для такого первоначального запуска некоторую обработку. Эта обработка называется инициализацией первого экземпляра. Если пользователь начинает и завершает ваше приложение, затем запуска- ет его снова и т.д., каждый экземпляр будет первым экземпляром (поскольку другие экземпляры в этот момент не выполняются).

Если текущим экземпляром является первый экземпляр, то конс- труктор Init вызывает InitApplication. TApplication определяет заместитель метода InitApplication, который вы можете для выпол- нения специальной инициализации первого экземпляра переопреде- лить.

Например, вы можете модифицировать TestApp таким образом, чтобы о первом экземпляре сообщалось в заголовке основного окна. Для этого добавьте в тип приложения TMyApplication булевское поле с именем FirstApp, затем переопределите метод InitApplication, чтобы он устанавливал FirstApp в True. Наконец, модифицируйте InitMainWindow для проверки FirstApp и вывода в основном окне приложения соответствующего заголовка (см. Рис. 8.2).

################################################################# #+----------------------------------------------------+-+-+###### #|#=###############Первый экземпляр###################|^|v|###### #+----------------------------------------------------+-+-|###### #| |###### #| +----------------------------------------------------+-+-+### #| |#=###############Дополнительный экземпляр###########|^|v|### #| +----------------------------------------------------+-+-|### #| | |### #| | +----------------------------------------------------+-+-+ #| | |#=#XXXXXXXXXXXXДополнительный экземплярXXXXXXXXXXXXX|^|v| #| | +----------------------------------------------------+-+-| #| | | | #| | | | #+--| | | ####| | | ####+--| | #######| | #######+--------------------------------------------------------+

Рис. 8.2 Новая инициализация приложения.

program TestApp; uses OWindows;

type TMyApplication = object(TApplication) FirstApp: Boolean; procedure InitMainWindow; virtual; procedure InitApplication; virtual; end;

procedure TMyApplication.InitMainWindow; begin if FirstApp then MainWindow := New(PWindow, Init(nil, 'Первый экземпляр')) else MainWindow := New(PWindow, Init(nil, 'Дополнительный экземпляр')); end;

procedure TMyApplication.InitApplication; begin FirstApp := True; end;

var MyApp; TMyApplication; begin MyApp.Init('TestApp'); MyApp.Run; MyApp.Done; end.



Содержание раздела