![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
отловить нажатие на кнопку закрытия формы [D6, WinXP]
avsam © (2005-02-14 19:02:00)Как отловить нажатие на кнопку закрытия формы?
Отловить нужно именно нажатие, а не закрытие, так как форма может быть закрыта и другими способами.
Юрий Зотов (2005-02-14 20:57:00) [1]> begin...end © (14.02.05 20:49) [10]
Этому хелпу сто лет в обед, там много чего нет. Даже в куда более поздних модулях Windows.pas от последних версий Delphi - и то есть не все. Поэтому всегда полезно иметь свежие MSDN и заголовочные файлы из SDK.
begin...end (2005-02-14 20:49:00) [2]> Юрий Зотов © (14.02.05 20:39) [9]
Юрий, Вы не поверите! Я тоже хотел предложить нечто подобное, но в хелпе (Windows SDK), идущим с Delphi 7 (по крайней мере), в описании WM_NCHITTEST нетHTCLOSE! Сейчас проверил на сайте MSDN - есть! Поэтому я и думал, что фокус с WM_NCHITTEST не пройдёт. Теперь всё понятно. Спасибо!
Юрий Зотов (2005-02-14 20:39:00) [3]> begin...end © (14.02.05 20:14) [8]
procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
if Message.CmdType and $FFF0 = SC_CLOSE then
if SendMessage(Handle, WM_NCHITTEST, 0, Message.YPos shl 16 or Message.XPos) = HTCLOSE then
ShowMessage('Угу, крестик')
else
ShowMessage('Ни фига не крестик');
inherited
end;
begin...end (2005-02-14 20:14:00) [4]> Юрий Зотов © (14.02.05 20:07) [7]
А Вы не могли бы привести пример?
Юрий Зотов (2005-02-14 20:07:00) [5]Из обработчика WM_SYSCOMMAND послать WM_NCHITTEST и проверить результат.
begin...end (2005-02-14 19:36:00) [6]> ssk © (14.02.05 19:34) [5]
> на самом деле автор не сказал, какой результат ему
> нужен после сего действия
Думаю, что нас это не должно интересовать. Вопрос есть: "Как отловить нажатие на кнопку закрытия формы?". Мне тоже ничего конкретно по этому вопросу в голову не приходит. Кроме, разве что, извращённых методов.
ssk (2005-02-14 19:34:00) [7]>после Alt-F4 тоже попадём в обработчик
так и есть.
на самом деле автор не сказал, какой результат ему нужен после сего действия:
1. блокировка закрытия окна?
2. запрос на закрытие окна?
3. просто блокировка "крестика"? ( Крестик.Enabled := False )
что?
begin...end (2005-02-14 19:28:00) [8]> ssk © (14.02.05 19:23) [3]
Во-первых, не wParam, а wParam and $FFF0. А во-вторых, после Alt-F4 тоже попадём в обработчик.
ssk (2005-02-14 19:23:00) [9]может так?
type
TForm1 = class(TForm)
.....
protected
procedure WMGETSYSCOMMAND(var Msg :TMessage); message WM_SYSCOMMAND;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WMGETSYSCOMMAND(var Msg :TMessage);
begin
if Msg.wParam = SC_CLOSE then
ShowMessage('press')
else inherited;
end;
begin...end (2005-02-14 19:18:00) [10]> Плохиш © (14.02.05 19:08) [1]
Будут отлавливаться не только нажатия на крестик.
Плохиш (2005-02-14 19:08:00) [11]OnCloseQuery