![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как при нажатии на кнопку закрытия свернуть программу вместо выхо [D7, WinXP]
Dmitry © (2004-11-29 23:27:00)Прописал в OnCloseQuery
CanClose := True;
Application.Minimize;
Но возникает проблема при выключении компьютера. Программа просто не хочет закрываться и Windows не выключает компьютер.
Помогите поборототь проблему.
GrayFace (2004-12-03 14:10:00) [1]А вот если делать, как Александр Иванов © (30.11.04 10:10) [7]в OnClose.
GrayFace (2004-12-03 14:05:00) [2]Александр Иванов © (30.11.04 10:10) [7]будет минимизировать приложение при завершении работы. Поэтому
Alexander Panov © (30.11.04 10:09) [6]лучше.
Dmitry (2004-12-01 02:28:00) [3]:) Что правда - то правда. Честно говоря я не увидел сообщения Александра Иванова. Обычно когда видишь исходный код, уже ничего другого заметить не способен. Даже руки как-то сами по себе к CTRL + C тянутся :)
Alexander Panov (2004-11-30 14:44:00) [4]Dmitry (30.11.04 14:26) [8]
Хочу заметить, что и Александр Иванов © (30.11.04 10:10) [7]сработает тоже замечателдьно.
Dmitry (2004-11-30 14:26:00) [5]Пример Александра Панова сработал замечательно! Спасибо всем за помощь!
Александр Иванов (2004-11-30 10:10:00) [6]Проверять в onCloseQuery, если минимизирована - закрывать, иначе - минимизировать.
Alexander Panov (2004-11-30 10:09:00) [7]
public
{ Public declarations }
procedure OnWM_SYSCOMMAND(var Message: TMessage); message WM_SYSCOMMAND;
procedure TForm1.OnWM_SYSCOMMAND(var Message: TMessage);
begin
if Message.WParam and $FFF0 = SC_CLOSE then
begin
Application.Minimize;
Message.Result := 0;
end
else inherited;
end;
TUser (2004-11-30 09:53:00) [8]
> Как при нажатии на кнопку закрытия свернуть программу вместо
> выхо [D7, WinXP]
>
> Dmitry (29.11.04 23:27)
> Прописал в OnCloseQuery
> CanClose := True;
> Application.Minimize;
В OnClose пиши Action:=caMinimize
Defunct (2004-11-30 07:31:00) [9]> CanClose := True;
И что правда работает?
GrayFace (2004-11-30 05:37:00) [10]Надо ловить WM_SYSCOMMAND, а в нем SC_CLOSE.
olookin (2004-11-30 00:17:00) [11]Вот примерно как это работает в ответ на выбор "Завершить сеанс пользователя"...
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var m: TMsg;
z: boolean;
begin
z:=GetMessage(m,form1.handle,0,0);
showmessage(inttostr(m.message));
if m.message=512 then CanClose:=true else begin
CanClose:=false; Application.Minimize; end;
end;
512 - это видимо код сообщения при завершении сеанса. Код на завершение работы не смотрел, но полагаю, что он покажется в showmessage при завершении работы винды.
olookin (2004-11-29 23:56:00) [12]Что, если попробовать ловить сообщения системы, а именно, сообщения с параметром WM_QUERYENDSESSION или WM_ENDSESSION, и если таковое есть, то не делать CanClose:=true?