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

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

hide and shutdown [D5, Win2k]


velsi ©   (2003-04-29 16:53:00) 

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

У меня сейчас сделано так.

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

Но это позволяет только прятать форму, а сама прога не хочет закрываться при Log Off или ShutDown


velsi   (2003-04-30 11:07:00) [1]

Спасибо за помощь !!!


Shurik   (2003-04-30 01:11:00) [2]

Попробуй ещё и это:
TForm1 = class(TForm)
...
private
Ok2Shutdown: Boolean; // присвой :=False, где-нить в OnCreate
procedure WMGetSysCommand (var Message :TMessage); message WM_SYSCOMMAND;
procedure QuerySession (var Message : TMessage); message WM_QUERYENDSESSION;
end;

...

procedure TForm1.WMGetSysCommand (var Message: TMessage);
begin
case Message.WParam of
SC_CLOSE: // Здесь можно не только SC_CLOSE, вообще любую константу SC_XXX
begin
if Ok2Shutdown then
inherited
else
Form1.Minimize; // или Hide/Close, вообще, что угодно
end
else
inherited;
end;
end;

procedure TForm1.QuerySession(var Message: TMessage);
begin
Ok2Shutdown:=True;
end;


jack128   (2003-04-29 17:31:00) [3]

по хорошему надо вот так
procedure TForm1.QuerySession(var Message: TMessage);
begin
f:= true;
inherited;
end;


jack128   (2003-04-29 17:11:00) [4]

TForm1 = class(TForm)
private
{ Private declarations }
f : boolean;
procedure QuerySession(var Message : TMessage); message WM_QUERYENDSESSION;
public
{ Public declarations }
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Visible and not f then begin
CanClose := False;
Hide;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
f := false;
end;

procedure TForm1.QuerySession(var Message: TMessage);
begin
f:= true;
end;


Наверх

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