![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;