Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как обработать непосредственно нажатие на крестик(закрытие формы) [D7, WinXP]


Zhekson ©   (2005-11-02 10:16:00) 

Или нет прямого обработчика??? (словоблудов попрошу не беспокоить)


Zhekson   (2005-11-02 13:03:00) [1]

Leonid Troyanovsky ©   (02.11.05 12:21) [9]
а, да то так... пример... у меня код вообще другой...

sniknik ©   (02.11.05 11:32) [8]
так точно!


Leonid Troyanovsky   (2005-11-02 12:21:00) [2]


> Zhekson   (02.11.05 11:12) [4]

>  if (message.wParam = SC_CLOSE) then
>    Main.Visible := False


 if (message.WParam and $FFF0 = SC_CLOSE) then
   Visible := False; // не должно быть никакого Main.

--
Regards, LVT.


sniknik   (2005-11-02 12:08:00) [3]

Игорь Шевченко ©   (02.11.05 11:57) [7]
да не только это, у меня с таким "разделением" перестает работать Close а также Application.Terminate и Send/PostMessage хотя тут я явно 0 в LParam задаю... т.е. с таким разделением састема тоже не справляется (а вот по Alt-F4 закрывает...)
(не удержался поделал тесты ;))

> Для корректного перехвата нажатия именно на крестик, желательно обрабатывать WM_NCLBUTTONDOWN, с wParam (HitTest) = HTCLOSE
ну да, это наверняка более правильно.
вот теперь можно
> закрыли тему.
(т.е. только теперь вот все логически понятно стало)


Игорь Шевченко   (2005-11-02 11:57:00) [4]

sniknik ©   (02.11.05 11:38) [6]

А еще для разминки попробуй отделить нажатие на крестик от закрытия через оконное меню (правой кнопкой на иконке) :) Там lParam тоже не равен нулю.

Для корректного перехвата нажатия именно на крестик, желательно обрабатывать WM_NCLBUTTONDOWN, с wParam (HitTest) = HTCLOSE


sniknik   (2005-11-02 11:38:00) [5]

незнаю насколько это во всех виндах одиноково, но вроде по LParam можно поделить (по Alt-F4 оно равно 0)
т.е.
if (message.wParam = SC_CLOSE) and (message.LParam > 0)
 then Main.Visible := False
 else inherited;
тогда это будет только "крестик"


sniknik   (2005-11-02 11:32:00) [6]

> закрыли тему.
почему?

// Обработка сообщения WM_SYSCOMMAND
....
при таком событии Alt-F4 тоже туда попадает (те. ты не делиш Alt-F4 и "крестик", а сам говориш надо...)


Zhekson   (2005-11-02 11:12:00) [7]

нащёл...

type
 TMain = class(TForm)
 protected
   procedure WMGetSysCommand(var message : TMessage);
   message WM_SYSCOMMAND;
end;
...

// Обработка сообщения WM_SYSCOMMAND
procedure TMain.WMGetSysCommand(var message : TMessage) ;
begin
 if (message.wParam = SC_CLOSE) then
   Main.Visible := False
 else
   inherited;
end;


закрыли тему.


Zhekson   (2005-11-02 10:54:00) [8]

[1] [2]
очень смешно...
Как обработать непосредственно нажатие на крестик(закрытие формы)?

Alt-F4 тоже закрытие, а мне нужно непосредственно нажатие на крестик.


umbra   (2005-11-02 10:32:00) [9]

OnClose


Slider007   (2005-11-02 10:18:00) [10]

OnCloseQuery


Наверх

Титульная страница Поиск, карта сайта Написать письмо