Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > какое сообщение ловить при нажатии на крестик


Автор: demoded 24.12.2009, 08:22
модальное окно, в цикле while крутится графика, нажатие на контролы обрабатываю 
Application.ProcessMessages;

как поймать сообщения закрытия окна при нажатии на крестик? вот это не срабатывает
Код

    if PeekMessage(msg,0,0,0,PM_NOREMOVE) then
    begin
      if msg.message = WM_SYSCOMMAND then
        if msg.wParam = SC_CLOSE then
          Finish := true;
    end;


Автор: cemick 24.12.2009, 10:01
Цитата(demoded @  24.12.2009,  08:22 Найти цитируемый пост)
if PeekMessage(msg,0,0,0,PM_NOREMOVE) then
    begin
      if msg.message = WM_SYSCOMMAND then
        if msg.wParam = SC_CLOSE then
          Finish := true;
    end;


Где вы это написали? В Этом участке кода ошибки нет.

Автор: demoded 24.12.2009, 10:05
это написано в теле цикла

Автор: cemick 24.12.2009, 10:16
в каком цикле? Может у тебя там написано какой нибудь processMessage и обрабтка сообщений происходит не здесь

Автор: demoded 24.12.2009, 10:25
вот цикл полностью
Код

  while not Finish do
  begin
    DrawScene();

    if PeekMessage(msg,0,0,0,PM_NOREMOVE) then
    begin
      if msg.message = WM_SYSCOMMAND then
        if msg.wParam = SC_CLOSE then
          Finish := true;
    end;
    Application.ProcessMessages;

  end;

Автор: cemick 24.12.2009, 10:54
Цитата(demoded @  24.12.2009,  10:25 Найти цитируемый пост)
Application.ProcessMessages;


отлично:
Application.ProcessMessages;

Я так понимаю, обработка очереди сообщений у тебя происходит где то там TApplication.WndProc. Это значит что все оконныя сообщения из стека выбираются там, а в твоем цикле(Где он написан то?  Что за метод?) PeekMessage'у уже нечего выбирать. 

И если у тебя есть окно, почему бы не установить обработчик на закрытие окна и устанавливать там тот же флаг Finish. Рекомендую книжку Краснова "OpenGL" там просто объяснено как лучше выполнять цикл отрисовки с отловом нужных сообщений.

Автор: demoded 24.12.2009, 11:20
ну в принципе я направление, буду копать. спасибо

Автор: Poseidon 24.12.2009, 14:25
Модальное окно останавливает выполнение кода на команде ShowModal. После закрытия окна код продолжает выполнение. Так что закрытие окна ловить не надо, все что после ShowModal быдет выполнено после закрытия окна.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)