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