Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

отловить нажатие на кнопку закрытия формы   Найти похожие ветки 

 
avsam   (2005-02-14 19:02) [0]

Как отловить нажатие на кнопку закрытия формы?
Отловить нужно именно нажатие, а не закрытие, так как форма может быть закрыта и другими способами.


 
Плохиш ©   (2005-02-14 19:08) [1]

OnCloseQuery


 
begin...end ©   (2005-02-14 19:18) [2]

> Плохиш ©   (14.02.05 19:08) [1]

Будут отлавливаться не только нажатия на крестик.


 
ssk ©   (2005-02-14 19:23) [3]

может так?

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:28) [4]

> ssk ©   (14.02.05 19:23) [3]

Во-первых, не wParam, а wParam and $FFF0. А во-вторых, после Alt-F4 тоже попадём в обработчик.


 
ssk ©   (2005-02-14 19:34) [5]

>после Alt-F4 тоже попадём в обработчик

так и есть.

на самом деле автор не сказал, какой результат ему нужен после сего действия:
1. блокировка закрытия окна?
2. запрос на закрытие окна?
3. просто блокировка "крестика"? ( Крестик.Enabled := False )

что?


 
begin...end ©   (2005-02-14 19:36) [6]

> ssk ©   (14.02.05 19:34) [5]

> на самом деле автор не сказал, какой результат ему
> нужен после сего действия

Думаю, что нас это не должно интересовать. Вопрос есть: "Как отловить нажатие на кнопку закрытия формы?". Мне тоже ничего конкретно по этому вопросу в голову не приходит. Кроме, разве что, извращённых методов.


 
Юрий Зотов ©   (2005-02-14 20:07) [7]

Из обработчика WM_SYSCOMMAND послать WM_NCHITTEST и проверить результат.


 
begin...end ©   (2005-02-14 20:14) [8]

> Юрий Зотов ©   (14.02.05 20:07) [7]

А Вы не могли бы привести пример?


 
Юрий Зотов ©   (2005-02-14 20:39) [9]

> 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:49) [10]

> Юрий Зотов ©   (14.02.05 20:39) [9]

Юрий, Вы не поверите! Я тоже хотел предложить нечто подобное, но в хелпе (Windows SDK), идущим с Delphi 7 (по крайней мере), в описании WM_NCHITTEST нет HTCLOSE! Сейчас проверил на сайте MSDN - есть! Поэтому я и думал, что фокус с WM_NCHITTEST не пройдёт. Теперь всё понятно. Спасибо!


 
Юрий Зотов ©   (2005-02-14 20:57) [11]

> begin...end ©   (14.02.05 20:49) [10]

Этому хелпу сто лет в обед, там много чего нет. Даже в куда более поздних модулях Windows.pas от последних версий Delphi -  и то есть не все. Поэтому всегда полезно иметь свежие MSDN и заголовочные файлы из SDK.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.027 c
6-1103490357
JaVa73
2004-12-20 00:05
2005.02.27
Оранизация web-форумов


1-1108028239
Homa_Programer
2005-02-10 12:37
2005.02.27
word (((


1-1108125022
cjbug
2005-02-11 15:30
2005.02.27
ASCI <-> 7-bit


14-1107424133
matt
2005-02-03 12:48
2005.02.27
Visual C++.NET Standart


6-1103032772
MacroDenS
2004-12-14 16:59
2005.02.27
Включение/отключение интернета....





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский