Форум: "Основная";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизКак обработать непосредственно нажатие на крестик(закрытие формы) Найти похожие ветки
← →
Zhekson (2005-11-02 10:16) [0]Или нет прямого обработчика??? (словоблудов попрошу не беспокоить)
← →
Slider007 © (2005-11-02 10:18) [1]OnCloseQuery
← →
umbra © (2005-11-02 10:32) [2]
OnClose
← →
Zhekson (2005-11-02 10:54) [3][1] [2]
очень смешно...
Как обработать непосредственно нажатие на крестик(закрытие формы)?
Alt-F4 тоже закрытие, а мне нужно непосредственно нажатие на крестик.
← →
Zhekson (2005-11-02 11:12) [4]нащёл...
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;
закрыли тему.
← →
sniknik © (2005-11-02 11:32) [5]> закрыли тему.
почему?
// Обработка сообщения WM_SYSCOMMAND
....
при таком событии Alt-F4 тоже туда попадает (те. ты не делиш Alt-F4 и "крестик", а сам говориш надо...)
← →
sniknik © (2005-11-02 11:38) [6]незнаю насколько это во всех виндах одиноково, но вроде по LParam можно поделить (по Alt-F4 оно равно 0)
т.е.
if (message.wParam = SC_CLOSE) and (message.LParam > 0)
then Main.Visible := False
else inherited;
тогда это будет только "крестик"
← →
Игорь Шевченко © (2005-11-02 11:57) [7]sniknik © (02.11.05 11:38) [6]
А еще для разминки попробуй отделить нажатие на крестик от закрытия через оконное меню (правой кнопкой на иконке) :) Там lParam тоже не равен нулю.
Для корректного перехвата нажатия именно на крестик, желательно обрабатывать WM_NCLBUTTONDOWN, с wParam (HitTest) = HTCLOSE
← →
sniknik © (2005-11-02 12:08) [8]Игорь Шевченко © (02.11.05 11:57) [7]
да не только это, у меня с таким "разделением" перестает работать Close а также Application.Terminate и Send/PostMessage хотя тут я явно 0 в LParam задаю... т.е. с таким разделением састема тоже не справляется (а вот по Alt-F4 закрывает...)
(не удержался поделал тесты ;))
> Для корректного перехвата нажатия именно на крестик, желательно обрабатывать WM_NCLBUTTONDOWN, с wParam (HitTest) = HTCLOSE
ну да, это наверняка более правильно.
вот теперь можно
> закрыли тему.
(т.е. только теперь вот все логически понятно стало)
← →
Leonid Troyanovsky © (2005-11-02 12:21) [9]
> 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.
← →
Zhekson (2005-11-02 13:03) [10]Leonid Troyanovsky © (02.11.05 12:21) [9]
а, да то так... пример... у меня код вообще другой...
sniknik © (02.11.05 11:32) [8]
так точно!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c