nesco, да это очередная недоработка от MS. Какого фига при при нулевых значениях ректа он отключает тень
Этот топик читают: Гость
Ответов: 5227
Рейтинг: 587
|
|||
карма: 4 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Еще можно попробовать устанавливать размеры margins в -1, но результат мне не понравился, может тебя устроит.
|
|||
карма: 22 |
|
Ответов: 5227
Рейтинг: 587
|
|||
Эти опции для стекла. Я их пробовал, фигня какая то...
|
|||
карма: 4 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
andrestudio писал(а): Эти опции для стекла. Я их пробовал, фигня какая то...Вот и я про то же. А знаешь, почему граница как бы белая, а потому, что она не белая. Это альфа наложение цвета твоего окна на тень в режиме не альфа отрисовки. На любом цвете видно, что эта граница отличается по оттенку. Ты наверное видел, как картинка pf24bit отображается на контексте с альфа каналом, вот тут тоже самое. Так что закрасить средствами не GDI+ тоже не получится, тк перо обычного GDI не поддерживает альфа наложение. Но не лепить же в форму еще и графику на GDI+. --- Добавлено в 2022-02-04 16:26:55 Короче, вот как отрисовывает у меня WM_NCPAINT:
А в конце метода _work_doShadow вызываю WM_NCPAINT
--- Добавлено в 2022-02-04 16:34:31 P.S. А с цветом там действительно полная задница творится -- https://docs.microsoft.com/en-us/windows/win32/dwm/composition-ovw#controlling-non-client-region-rendering Редактировалось 5 раз(а), последний 2022-02-04 16:34:31 |
|||
карма: 22 |
|
Ответов: 5227
Рейтинг: 587
|
|||
nesco, не, GDI+ там без надобности. Я тоже самое почти проделал, но пока отложил я с прорисовкой...
|
|||
карма: 4 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
andrestudio писал(а): не, GDI+ там без надобности.А вот и не совсем. Похоже, друже, нам без альфа наложения не обойтись. Вот что я получил альфа наложением на эту область 1-но пиксельного прямоугольника с чистым фоном (там только перо работает) в DTM (в этом режиме GDI+ рисует), правда, через буфер, но все в альфа-режиме: Думаю, что напрямую тоже можно отрисовать с тем же результатом. --- Добавлено в 2022-02-04 18:26:14 P.S. Плохо другое WM_NCPAINT работает только один раз при отрисовке тени, а так это остается клиентской областью, и туда можно залезть, нарушив целостность отрисовки. Тч, остается в силе попытка срезать клиентскую область на величину этого прямоугольника, чтобы туда нельзя было залезть. Редактировалось 4 раз(а), последний 2022-02-04 18:26:14 |
|||
карма: 22 |
|
Ответов: 5227
Рейтинг: 587
|
|||
nesco, рисовать то он рисует но это всё равно будет бордюр
|
|||
карма: 4 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
andrestudio писал(а): рисовать то он рисует но это всё равно будет бордюрА что нам делать, если система отгрызла у нас кусок прямоугольника (или линии), не перерисовывать же весь контекст на каждый чих? А так, да -- это бордюр, но цветом фона, все же лучше, чем прямоугольник (линия) непонятного цвета. А что, твои контролы не перекрывают этот прямоугольник (линию), ведь это же клиентская область? |
|||
карма: 22 |
|
Ответов: 5227
Рейтинг: 587
|
|||
nesco писал(а): А что, твои контролы не перекрывают этот прямоугольник (линию), ведь это же клиентская область?да почему, должны. блин так и не догоню что не так. GDI+ рисует нормально. Видать из за альфы которой в KOL нет Редактировалось 1 раз(а), последний 2022-02-04 20:19:03 |
|||
карма: 4 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
andrestudio писал(а): Видать из за альфы которой в KOL нетА я тебе про что толкую? Именно из-за альфы GDI+ предпочтительней. Или будет такой гемор по преобразованию обычного контекста в альфу, там же альфа канал надо наложить, а это дополнительные ресурсы производительности. Не, но для обычной формы брушевую заливку контекста жирно как-то применять, проще пером нарисовать нужный прямоугольник, там даже антиальясинг не нужен. Но как это все себя поведет в мультислойной форме, я пока не знаю. Редактировалось 1 раз(а), последний 2022-02-04 20:04:53 |
|||
карма: 22 |
|
Ответов: 5227
Рейтинг: 587
|
|||
nesco, понял. Мне видать фон нужно с альфа-каналом рисовать
Отрисовал панельку в Align = caTop Всё нормально моржа по умолчанию как у тебя margins.cxLeftWidth := 1; margins.cxRightWidth := 1; margins.cyBottomHeight := 1; margins.cyTopHeight := 1; |
|||
карма: 4 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
andrestudio писал(а): Всё нормальноНу вот и отлично, мы оказались на правильном пути. |
|||
карма: 22 |
|
Ответов: 5227
Рейтинг: 587
|
|||
nesco, что предлагаешь тогда
OnEraseBkgnd перекрыть или в WM_ERASEBKGND подпилить или на... всё это нужно --- Добавлено в 2022-02-04 20:56:35 хотя 52 кисточки не лишние будут, согласись Редактировалось 1 раз(а), последний 2022-02-04 20:56:35 |
|||
карма: 4 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
andrestudio писал(а): что предлагаешь тогдаЯ тут вообще не понял -- что подпилить предполагается, какой элемент? andrestudio писал(а): хотя 52 кисточки не лишние будут52 кисточки -- это здорово, но как их выбирать? Как ты представляешь себе список из 52 кисточек? |
|||
карма: 22 |
|
Ответов: 5227
Рейтинг: 587
|
|||
nesco писал(а): Я тут вообще не понял -- что подпилить предполагается, какой элемент?win.pas nesco писал(а): 52 кисточки -- это здорово, но как их выбирать? Как ты представляешь себе список из 52 кисточек?ID достаточно 0..52 integer сделать ветку ##=BrushStyle Color1 Color2 IDBrush ## Редактировалось 1 раз(а), последний 2022-02-04 21:47:57 |
|||
карма: 4 |
|