![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обработать непосредственно нажатие на крестик(закрытие формы) [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