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

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

Мастера, помогите советом! [D6, WinXP]


Barman ©   (2003-01-02 11:08:00) 

С Новым годом всех!

У меня такой вопрос: как сделать так, чтобы по нажатию на кнопку "закрыть" (наверху с крестиком, не знаю как правильно ее назвать...) программа не закрывалась?
Пробовал писать в событии OnCloseQuery вот так:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:= False;
Form1.Hide;
end;

Но тогда Windows не может завершить свою работу, если работает программа! Я понимаю, что надо ловить каким-то образом сообщение о закрытии, но я не знаю как :-(


Mihey   (2003-01-02 22:41:00) [1]

Убрать кнопку нафиг (или ты прикол какой бацаешь?)!

procedure TForm1.Button1Click(Sender: TObject);
var
hwndHandle : THANDLE;
hMenuHandle : HMENU;
begin
hwndHandle := FindWindow(nil, "Untitled - Notepad");
if (hwndHandle <> 0) then begin
hMenuHandle := GetSystemMenu(hwndHandle, FALSE);
if (hMenuHandle <> 0) then
DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
end;
end;


lamachok   (2003-01-02 21:58:00) [2]

вот вот надо обрабатывать onclose


alvin   (2003-01-02 18:31:00) [3]

Попробуй так :
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caNone;
end;

Должно работать


Song   (2003-01-02 17:56:00) [4]

Return Values

If an application can terminate conveniently, it should return TRUE; otherwise, it should return FALSE.


Barman   (2003-01-02 17:22:00) [5]

Хелп посмотрел. Но ничего не понял :-(
Не связывался я с сообщениями никогда, поэтому совета и прошу...


Song   (2003-01-02 15:35:00) [6]

Надо ещё результат от сообщения возвращать. См. в хэлпе что нужно вернуть.


Barman   (2003-01-02 14:45:00) [7]

Все равно не получается. Пишу следующее:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:= False;
Hide;
end;

Procedure TForm1.IsWindowsShutDown(var Message : TMessage);
Begin
Application.Terminate;
End;

Теперь программа закрывается, но толку от этого нет, т.к. Windows работу все равно почему-то не завершает :-( Где я не прав?


Song   (2003-01-02 13:45:00) [8]

Procedure IsWindowsShutDown(Var Msg:TMessage); message WM_QUERYENDSESSION;

и далее пишешь обработчик в процедуре IsWindowsShutDown


Barman   (2003-01-02 12:43:00) [9]

А как? Мне стыдно, но я не умею :-(
Можно пример или ссылку, где можно было бы это посмотреть?


Anatoly Podgoretsky   (2003-01-02 11:13:00) [10]

Обрабатывай сообщение WM_QUERYENDSESSION


Наверх

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