Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Закрытие окна [D6, WinXP]


Major ©   (2004-10-03 00:48:00) 

Подскажите пожалуйста,   мне нужно сделать так, чтобы окно закрывалось сразу после того, как становится неактивным. Простым способом вызывает ошибку:

procedure TForm1.ApplicationDestroy(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.FormCreate(Sender: TObject);
Var
  ApplicationDestroy:TNotifyEvent;
begin
Application.OnDeactivate:=ApplicationDestroy;
end;

ПОМОГИТЕ PLEASE!


Major   (2004-10-03 01:20:00) [1]

Все, понял ошибку, большое СПАСИБО за помощь!


KilkennyCat   (2004-10-03 01:20:00) [2]

Application.Minimize; поменять на терминатора - и все.


KilkennyCat   (2004-10-03 01:19:00) [3]


> Major   (03.10.04 01:13) [12]


что тут можно сказать... если какое-то событие происходит раньше, чем нужно, его обходят флагом.
Пример прекрасно работает, вот полный исходник...

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   procedure AppDeactivate(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.AppDeactivate(Sender: TObject);
begin
 Application.Minimize;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnDeactivate := AppDeactivate;
end;

end.


Palladin   (2004-10-03 01:18:00) [4]

ну естественно... TForm.OnCreate вызывается до того как форма получает фокус...


Major   (2004-10-03 01:13:00) [5]

Кстати пример из справки не работает сам по себе, а при вылавливании потери фокуса программа закрывается сразу после запуска, если так:

If Form1.Focused=false then Application.Terminate;


KilkennyCat   (2004-10-03 01:11:00) [6]


> Palladin ©   (03.10.04 01:09) [10]


ага. ето и из доки видно.


KilkennyCat   (2004-10-03 01:09:00) [7]


> Palladin ©   (03.10.04 01:03) [7]


точно... нетрезв немного... путаюсь. подумал, что это ласт-событие...


Palladin   (2004-10-03 01:09:00) [8]


> Если серъезно, не знаю.

Внимательней надо быть.
procedure TForm1.FormCreate(Sender: TObject);
Var
 ApplicationDestroy:TNotifyEvent;

begin
Application.OnDeactivate:=ApplicationDestroy;
end;

и как результат... мусор...


KilkennyCat   (2004-10-03 01:08:00) [9]


> Palladin ©   (03.10.04 01:01) [6]


Если серъезно, не знаю. наверное, надо справку читать.

The following code minimizes an application when it’s deactivated. Note that AppDeactivate should be declared a method of TForm1.

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnDeactivate := AppDeactivate;
end;

procedure TForm1.AppDeactivate(Sender: TObject);
begin
 Application.Minimize;
end;


Palladin   (2004-10-03 01:03:00) [10]


>  KilkennyCat ©   (03.10.04 00:58)

На OnDeactivate прога не выключается, просто активной становится не она. Теряет "фокус".


KilkennyCat   (2004-10-03 01:01:00) [11]

WM_ACTIVATEAPP
WM_ACTIVATE


Palladin   (2004-10-03 01:01:00) [12]

да нет... глупо надеятся что Application.OnDeactivate назначится TForm1.ApplicationDestroy... осталось лишь догадатся почему это глупо..


KilkennyCat   (2004-10-03 00:58:00) [13]

Я! я могу!
в онкреате назначается событию ондеактивате выполнять процедурку аппликатиондестрорерррр... где, собссно, пргоа и выключается. Хотя, она уге выклюкается, патамучта одеактиватеруется...


Major   (2004-10-03 00:57:00) [14]

Потерю фокуса отлавливал, но не получается, приложение либо сразу закрывается, либо вовсе не закрывается....


Palladin   (2004-10-03 00:55:00) [15]

ну и объясни свои мысли в FormCreate...


KilkennyCat   (2004-10-03 00:54:00) [16]

хм... мож стоит отлавливать потерю фокуса?


Наверх

Титульная страница Поиск, карта сайта Написать письмо