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

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

не перехватывается 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, то и не должно выключаться, Вы же сами запретили.

А что обработчик не вызывается - код в студию.


Наверх

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