Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: CL | DM;

Вниз

Как при нажатии на кнопку закрытия свернуть программу вместо выхо   Найти похожие ветки 

 
Dmitry   (2004-11-29 23:27) [0]

Прописал в OnCloseQuery
CanClose := True;
Application.Minimize;
Но возникает проблема при выключении компьютера. Программа просто не хочет закрываться и Windows не выключает компьютер.
Помогите поборототь проблему.


 
olookin ©   (2004-11-29 23:56) [1]

Что, если попробовать ловить сообщения системы, а именно, сообщения с параметром WM_QUERYENDSESSION или WM_ENDSESSION, и если таковое есть, то не делать CanClose:=true?


 
olookin ©   (2004-11-30 00:17) [2]

Вот примерно как это работает в ответ на выбор "Завершить сеанс пользователя"...

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 при завершении работы винды.


 
GrayFace ©   (2004-11-30 05:37) [3]

Надо ловить WM_SYSCOMMAND, а в нем SC_CLOSE.


 
Defunct ©   (2004-11-30 07:31) [4]

> CanClose := True;

И что правда работает?


 
TUser ©   (2004-11-30 09:53) [5]


>  Как при нажатии на кнопку закрытия свернуть программу вместо
> выхо [D7, WinXP]
>
> Dmitry   (29.11.04 23:27)  
> Прописал в OnCloseQuery
> CanClose := True;
> Application.Minimize;

В OnClose пиши Action:=caMinimize


 
Alexander Panov ©   (2004-11-30 10:09) [6]


 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;


 
Александр Иванов ©   (2004-11-30 10:10) [7]

Проверять в onCloseQuery, если минимизирована - закрывать, иначе - минимизировать.


 
Dmitry   (2004-11-30 14:26) [8]

Пример Александра Панова сработал замечательно! Спасибо всем за помощь!


 
Alexander Panov ©   (2004-11-30 14:44) [9]

Dmitry   (30.11.04 14:26) [8]
Хочу заметить, что и Александр Иванов ©   (30.11.04 10:10) [7]сработает тоже замечателдьно.


 
Dmitry   (2004-12-01 02:28) [10]

:) Что правда - то правда. Честно говоря я не увидел сообщения Александра Иванова. Обычно когда видишь исходный код, уже ничего другого заметить не способен. Даже руки как-то сами по себе к CTRL + C тянутся :)


 
GrayFace ©   (2004-12-03 14:05) [11]

Александр Иванов ©   (30.11.04 10:10) [7] будет минимизировать приложение при завершении работы. Поэтому
Alexander Panov ©   (30.11.04 10:09) [6] лучше.


 
GrayFace ©   (2004-12-03 14:10) [12]

А вот если делать, как Александр Иванов ©   (30.11.04 10:10) [7] в OnClose.



Страницы: 1 вся ветка

Текущий архив: 2004.12.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
14-1101850656
Cheater
2004-12-01 00:37
2004.12.19
Отличие 2 кандидатов


8-1092217378
Руслан
2004-08-11 13:42
2004.12.19
Как определить что MediaPlayer закончил проигрывать файл...


1-1101931887
Гость
2004-12-01 23:11
2004.12.19
Delphi 2005 - портится русский текст в Version Info


3-1100841590
Fin
2004-11-19 08:19
2004.12.19
Подключение к MS SQL не через ODBC


14-1101798356
IceBeerg
2004-11-30 10:05
2004.12.19
Как установить win98 из winXP (загрузочного компакта нет)