![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
При закрытии программы - минимизация в трей [D7, WinXP]
Chaser © (2005-12-19 11:54:00)Требуется, чтобы в программе при нажатии на крестик (системные кнопки, кнопка "Сlose"), программа не закрывалась, а минимизировалась в трей.
Я делаю так:
procedure TForm1.WMSYSCOMMAND(var msg: TMessage);
begin
inherited;
if (msg.WParam=SC_MINIMIZE) or (msg.WParam=SC_CLOSE)
then HideMainForm; // минимизируемся
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if cancl=true
then CanClose:=true;
if cancl=false
then CanClose:=false;
end;
Соответственно в программе есть кнопка "Выход", и в ней написано:
cancl:=true;
Но при выключении компьютера, он не выключается как раз потому, что программа не может закрыться.
Причем если делать без "CanClose" (вообще убрать процедуру "FormCloseQuery"), то сообщение "(msg.WParam=SC_CLOSE)" почему-то не обрабатывается.
Как это исправить?
Или есть другие способы минимизации в трей?
I am (2005-12-19 14:17:00) [1]Не изобретай велосипед. Воспользуйся комонентом CoolTrayIcon
Leonid Troyanovsky (2005-12-19 14:11:00) [2]
> Chaser © (19.12.05 13:59) [2]
> if ((msg.WParam and $FFF0) = SC_MINIMIZE)
> Все равно программа закрывается, а не минимизируется.
Дык, это лишь первая неточность.
> >При обработке WM_QUERYENDSESSION установить cancl := True;
> Можно подробнее?
Сделать обработчик сообщения WM_QUERYENDSESSION, в котором:
cancl := True;
inherited;
--
Regards, LVT.
Chaser (2005-12-19 13:59:00) [3]
> > Chaser © (19.12.05 11:54)
>
>
> > if (msg.WParam=SC_MINIMIZE) or (msg.WParam=SC_CLOSE)
>
> if ((msg.WParam and $FFF0) = SC_MINIMIZE ) or ((msg.WParam
> and $FFF0)..
>
> > if cancl=true
> > then CanClose:=true;
> > if cancl=false
> > then CanClose:=false;
>
> CanClose := cancl;
>
> > Как это исправить?
>
> При обработке WM_QUERYENDSESSION установить cancl := True;
>
> {msg.Result := LResult( True )}
>
> --
> Regards, LVT.
if ((msg.WParam and $FFF0) = SC_MINIMIZE)
or ((msg.WParam and $FFF0)=SC_CLOSE)
then HideMainForm; // минимизируемся
Все равно программа закрывается, а не минимизируется.
>При обработке WM_QUERYENDSESSION установить cancl := True;
>{msg.Result := LResult( True )}
Можно подробнее?
Leonid Troyanovsky (2005-12-19 12:52:00) [4]
> Chaser © (19.12.05 11:54)
> if (msg.WParam=SC_MINIMIZE) or (msg.WParam=SC_CLOSE)
if ((msg.WParam and $FFF0) = SC_MINIMIZE ) or ((msg.WParam and $FFF0)..
> if cancl=true
> then CanClose:=true;
> if cancl=false
> then CanClose:=false;
CanClose := cancl;
> Как это исправить?
При обработке WM_QUERYENDSESSION установить cancl := True;
{msg.Result := LResult( True )}
--
Regards, LVT.