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

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

Как при нажатии на кнопку закрытия свернуть программу вместо выхо [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?


Наверх

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