• Dmk © (30.01.16 19:51) [0]
    Всем привет! Если использовать VCL, то при изменении окна в состояние WM_MAXIMIZED данное событие вызывается 2 раза. Если WINAPI, то 1 раз. Вопрос такой: как пропустить в VCL второй раз, т.е. отследить только последнее событие?
    Пробовал изменить параметры анимации окон, но результат тот же. При развороте окна WM_WINDOWPOSCHANGED вызывается 2 раза, а при сворачивании 1 раз.
  • Забыл пароль (31.01.16 19:11) [1]
    В VCL многое не как в API. Частая причина - главное окно и очередь сообщений - это TApplication. А все формы - полу-дочерние.
  • KSergey © (08.02.16 11:52) [2]
    Может у окна есть признак "я максимизировано" - по нему можно понять, что WM_MAXIMIZED пришло уже максимизированному окну, т.е. второй раз?
  • Dmk © (08.02.16 16:20) [3]
    Нету никакого признака. Сразу становится Maximized, еще до полного разворота. Поставил БП на сообщение - получил даже 6 раз!!! изменения размера окна. В VCL окно сначала разворачивается по вертикали, потом еще раз по горизонтали. В промежутках вызывается WM_ERASEBKGND. в WinApi сразу в нужный размер за 1 раз. Если поставить в OnResize, то вызывается 1 раз, но мне не годится это. Мне в сообщении надо. Там перерасчет происходит. Просто моргает много :( Тут видимо либо совсем без VCL, либо только VCL.
  • Dmk © (19.02.16 12:39) [4]
    Если кому интересно, то разобрался. Если главная форма  MDI form, то при наличии Sanken edge у клиентской области, MDI child изменяет размер 2 раза. Если этот край убрать, то 1 раз. Сейчас все стало нормально.
    Код:
          lpExStyle := lpExStyle and not (WS_EX_CLIENTEDGE);
          SetWindowLong(wnd, GWL_EXSTYLE, lpExStyle);

Есть новые Нет новых   [120367   +51][b:0][p:0.001]