Главная страница
    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.038 c
1-1108024369
leonidus
2005-02-10 11:32
2005.02.27
Как сделать "плавающий" ToolBar


1-1108512891
KOLIG
2005-02-16 03:14
2005.02.27
Вставка текста в RichEdit


14-1107779407
Sandman25
2005-02-07 15:30
2005.02.27
Исключенное третье


3-1106850647
sergeymist
2005-01-27 21:30
2005.02.27
добавление записи в таблицу


14-1107851666
Vlad Oshin
2005-02-08 11:34
2005.02.27
Поставлю памятник автору Radminов! и Вопрос





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