![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
не перехватывается WM_QUERYENDSESSION ! [D6, D7, D2005, 2000, XP]
VikMix © (2006-01-29 12:31:00)Здравствуйте! CanClose = false в FormCloseQuery(),
вставил свой обработчик на WM_QUERYENDSESSION и WM_ENDSESSION, но при выключении комп-ра не вызывается! Может ли проблема быть в том, что приложение находится в состоянии minimize ? если да то что делать? ХП просто отказывается выключаться!
Плохиш (2006-01-29 14:46:00) [1]
> procedure TMainForm.FormCloseQuery(Sender: TObject; var
> CanClose: Boolean);
> begin
> if CantClose then
> begin
> CanClose:= false;> Application.Minimize; // я склонен к проблеме Minimize
> хотя это наверно глупость (
> TrayTimer.Enabled:=true;
> end ;
> end;
Ты сам запретил форме закрываться, о чём в [1] и сказано.
> Набережных С. © (29.01.06 13:45) [4]
> Мда-а...уж... Откуда этот бред?
Полностью поддерживаю
Набережных С. (2006-01-29 13:45:00) [2]Мда-а...уж... Откуда этот бред?
TForm1 = class(TForm)
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
FEndSessionFlag: boolean;
procedure WmQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:= FEndSessionFlag;
end;
procedure TForm1.WmQueryEndSession(var Message: TWMQueryEndSession);
begin
FEndSessionFlag:= true;
inherited;
end;
VikMix (2006-01-29 13:26:00) [3]Дело в том что в обработчике уст-ся спец влаг разрешающий закрыть прил-е.
Вот код:
....
protected
procedure WMGetSysCommand(var Message :TMessage); message WM_SYSCOMMAND;
......
procedure TMainForm.WMGetSysCommand(var Message : TMessage) ;
Begin
if Message.wParam = SC_MINIMIZE then
begin
TrayTimer.Enabled:=true; // вызывается!!! значит обработчик рабочий!
Inherited ;
end Else
if (Message.wParam=WM_QUERYENDSESSION)or(Message.wParam=WM_ENDSESSION)then
begin
// halt;
CantClose:=false;
MainForm.Close();
end else
Inherited ;
End;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if CantClose then
begin
CanClose:= false;
Application.Minimize; // я склонен к проблеме Minimize хотя это наверно глупость (
TrayTimer.Enabled:=true;
end ;
end;
Набережных С. (2006-01-29 12:58:00) [4]var
EndSessionFlag: boolean = false;
procedure ...FormCloseQuery(...);
begin
CanClose:= EndSessionFlag;
end;
procedure ...WmQueryEndSession(...);
begin
EndSessionFlag:= true;
inherited;
end;
Юрий Зотов (2006-01-29 12:57:00) [5]Если CanClose всегда False, то и не должно выключаться, Вы же сами запретили.
А что обработчик не вызывается - код в студию.