Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Рамка окна


Миракл   (23.03.18 11:29

Имеется окно https://c2n.me/3SShEJv
Убираю рамку
SetWindowLong(wnd, GWL_STYLE, GetWindowLong(wnd, GWL_STYLE) and not(WS_CAPTION or WS_THICKFRAME));
получаю https://c2n.me/3SShP19
Что это может значить? Размер окна не изменился, но внутренняя область уменьшилась. По высоте: на высоту шапки + рамки. По ширине: ширина рамка * 2.
Перерисовка окна ничего не дала.
RedrawWindow(wnd, nil, 0, RDW_INVALIDATE or RDW_UPDATENOW);
 InvalidateRect(wnd, nil, True);

Как можно подогнать содержимое под размер окна или наоборот окно под содержимое?


Styx ©   (24.03.18 12:52[1]


> но внутренняя область уменьшилась.

Как я вижу, она не уменьшилась, а как раз увеличилась. А Вы в эту дполнительную область ничего не нарисовали, и там получился мусор. Расскажите подробнее, как Вы рисуете содержимое, тогда можно будет что-то обсуждать...


Миракл   (24.03.18 16:40[2]


> Как я вижу, она не уменьшилась, а как раз увеличилась.

Да, Вы правы https://c2n.me/3SUb8TA
Мусор можно убрать через SetWindowRgn

 R.Width := R.Width  - 16;
 R.Height := R.Height  - 16;

Как программа рисует содержимое не знаю.
Видно, что когда рамки нет, она рисует в окне с учётом этой рамки.


Redmond   (26.03.18 03:15[3]

Не похоже на "учёт рамки". Размер рисуемого кажется изменился? На глаз сложно понять, вроде же да?
Похоже что программа заметила изменение клиентской области, но по какой-то причине неправильно получило новые размеры.


Миракл   (26.03.18 14:16[4]

Или не заметила изменения размера клиентской области и рисует по старым. Буду смотреть.


Rouse_ ©   (26.03.18 16:37[5]

Ну у тебя ж там NC область.
BorderStyle := bsNone не?


Миракл   (26.03.18 17:16[6]

После удаления рамки всё окно заполнила клиентская область. Но программа продолжает рисовать содержимое по старым размерам, а всё что выходит за эти размеры выглядит как рябь или как сказал Styx "мусор".

Как написал с другого форума LoneFast: "окно не заметило что изменился размер клиентской области. И продолжает рисоваться со старыми размерами". "сделайте так чтоб она заметила изменение размера - угадывайте к какому событию это привязано."

Буду ставить хук и ловить
WM_NCCALCSIZE
WM_WINDOWPOSCHANGED
WM_WINDOWPOSCHANGING


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо