![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Закрытие окна [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]хм... мож стоит отлавливать потерю фокуса?