Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизЗакрытие окна Найти похожие ветки
← →
Major (2004-10-03 00:48) [0]Подскажите пожалуйста, мне нужно сделать так, чтобы окно закрывалось сразу после того, как становится неактивным. Простым способом вызывает ошибку:
procedure TForm1.ApplicationDestroy(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.FormCreate(Sender: TObject);
Var
ApplicationDestroy:TNotifyEvent;
begin
Application.OnDeactivate:=ApplicationDestroy;
end;
ПОМОГИТЕ PLEASE!
← →
KilkennyCat © (2004-10-03 00:54) [1]хм... мож стоит отлавливать потерю фокуса?
← →
Palladin © (2004-10-03 00:55) [2]ну и объясни свои мысли в FormCreate...
← →
Major (2004-10-03 00:57) [3]Потерю фокуса отлавливал, но не получается, приложение либо сразу закрывается, либо вовсе не закрывается....
← →
KilkennyCat © (2004-10-03 00:58) [4]Я! я могу!
в онкреате назначается событию ондеактивате выполнять процедурку аппликатиондестрорерррр... где, собссно, пргоа и выключается. Хотя, она уге выклюкается, патамучта одеактиватеруется...
← →
KilkennyCat © (2004-10-03 01:01) [5]WM_ACTIVATEAPP
WM_ACTIVATE
← →
Palladin © (2004-10-03 01:01) [6]да нет... глупо надеятся что Application.OnDeactivate назначится TForm1.ApplicationDestroy... осталось лишь догадатся почему это глупо..
← →
Palladin © (2004-10-03 01:03) [7]
> KilkennyCat © (03.10.04 00:58)
На OnDeactivate прога не выключается, просто активной становится не она. Теряет "фокус".
← →
KilkennyCat © (2004-10-03 01:08) [8]
> 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;
← →
KilkennyCat © (2004-10-03 01:09) [9]
> Palladin © (03.10.04 01:03) [7]
точно... нетрезв немного... путаюсь. подумал, что это ласт-событие...
← →
Palladin © (2004-10-03 01:09) [10]
> Если серъезно, не знаю.
Внимательней надо быть.
procedure TForm1.FormCreate(Sender: TObject);
Var
ApplicationDestroy:TNotifyEvent;
begin
Application.OnDeactivate:=ApplicationDestroy;
end;
и как результат... мусор...
← →
KilkennyCat © (2004-10-03 01:11) [11]
> Palladin © (03.10.04 01:09) [10]
ага. ето и из доки видно.
← →
Major (2004-10-03 01:13) [12]Кстати пример из справки не работает сам по себе, а при вылавливании потери фокуса программа закрывается сразу после запуска, если так:
If Form1.Focused=false then Application.Terminate;
← →
Palladin © (2004-10-03 01:18) [13]ну естественно... TForm.OnCreate вызывается до того как форма получает фокус...
← →
KilkennyCat © (2004-10-03 01:19) [14]
> 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.
← →
Major (2004-10-03 01:20) [15]Все, понял ошибку, большое СПАСИБО за помощь!
← →
KilkennyCat © (2004-10-03 01:20) [16]Application.Minimize; поменять на терминатора - и все.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.046 c