Форум: "Основная";
Текущий архив: 2002.12.12;
Скачать: [xml.tar.bz2];
ВнизЗакрытие формы Найти похожие ветки
← →
smok_er (2002-11-29 23:30) [0]Мастера, как сделать так, чтобы при закрытии формы происходило ее сворачивание, как например в программе FlashGet по умолчанию?
Понимаю, что вопрос довольно таки распространенный, но никак не могу найти ответ :(
← →
Юрий Зотов (2002-11-30 00:04) [1]Обрабатывайте WM_SYSCOMMAND с SC_CLOSE - и там делайте с формой что хотите, хоть сворачивайте, хоть прячьте, хоть красьте в зеленый цвет.
Вероятно, придется обработать еще и WM_QUERYENDSESSION, чтобы через логический флаг разрешить закрытие окна. Иначе программа может помешать завершению работы системы.
← →
smok_er (2002-11-30 00:47) [2]Не работает :(
Привожу код:
procedure TfrMain.WMSYSCOMMAND(var Message: WMSysCommand);
begin
inherited;
if Message.CmdType = SC_CLOSE then
Message.CmdType := SC_MINIMIZE; // Выполняется, но приложение все равно закрывается
end;
← →
Diamond Cat (2002-11-30 02:21) [3]не совсем понятно, надо чтоб форму просто нельзя было закрыть, или чтоб при нажатии на "х" форма сворачивалась
если последний вариант то можно так
public
procedure cl(var m:Tmessage);message wm_close;
end;
.......
procedure Tform1.cl(var m:Tmessage);
begin
m.result:=0;
application.minimize;
end;
или если так больше нравится то так
procedure WMSYSCOMMAND(var Message: TWMSysCommand);message wm_syscommand;
end;
.....
procedure TForm1.WMSYSCOMMAND(var Message: TWMSysCommand);
begin
if Message.CmdType = SC_CLOSE then
Message.CmdType := SC_MINIMIZE; inherited;
end;
← →
smok_er (2002-12-01 00:50) [4]Огромное спасибо!
Я просто не там inherited написал :(
Сейчас все ОК!
← →
Юрий Зотов (2002-12-01 01:38) [5]Код не вполне точен. Обратите внимание на вырезку из хелпа:
"In WM_SYSCOMMAND messages, the four low-order bits of the uCmdType parameter are used internally by Windows. To obtain the correct result when testing the value of uCmdType, an application must combine the value 0xFFF0 with the uCmdType value by using the bitwise AND operator".
То есть:
with Message do
if CmdType and $FFF0 = SC_CLOSE then
CmdType := CmdType and $F or SC_MINIMIZE;
← →
Song (2002-12-01 11:13) [6]Ребят, Вы в дебри полезли...
procedure TForm1.Form1Close(Sender: TObject; Var Action: TCloseAction);
Begin
Action:=caMinimize;
End;
Этого достаточно.
← →
smok_er (2002-12-02 19:17) [7]2 Song
Нет, к сожалению, Ваша версия меня не устраивает :(
Ведь получается, что в таком случае закрыть приложение вообзе будет невозможно :(
Я сделал так, чтобы приложение при закрытии даже не минимизировалось, а просто исчезало, т.е. Form1.Visible := False;
а при определнных действиях над иконкой в систрее этому свойству присваивается True.
2 Юрий Зотов
Интересно, а для чего это надо? Ведь и так все работает...
← →
Юрий Зотов (2002-12-02 19:48) [8]Работает. До тех пор, пока система выставляет в нули младщие 4 бита. А как только она выставит их не в нули - так тут же и перестанет работать. Причем это может произойти в любой момент, а может и не произойти вовсе. Поэтому эти 4 бита надо просто отсечь - тогда будет надежно.
← →
smok_er (2002-12-02 19:57) [9]Огромное спасибо!
Сделаю именно так!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c