Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.004 c
1-36161
wam
2002-12-03 21:42
2002.12.12
Рисование кривых методом сеток


14-36396
Rand
2002-11-21 18:29
2002.12.12
Экспресс-анкета


14-36338
Snake2000
2002-11-20 15:11
2002.12.12
Интересная задачка


14-36399
MBo
2002-11-21 10:03
2002.12.12
Очередная несложная задачка для разминки;)


1-36234
dim-
2002-12-01 19:26
2002.12.12
Модальная форма в DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский