Вверх ↑
Этот топик читают: Гость
Ответов: 5227
Рейтинг: 587
#166: 2022-02-04 15:30:25 ЛС | профиль | цитата
nesco, да это очередная недоработка от MS. Какого фига при при нулевых значениях ректа он отключает тень
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 26103
Рейтинг: 2124
#167: 2022-02-04 15:31:26 ЛС | профиль | цитата
Еще можно попробовать устанавливать размеры margins в -1, но результат мне не понравился, может тебя устроит.
карма: 22

0
Ответов: 5227
Рейтинг: 587
#168: 2022-02-04 15:42:07 ЛС | профиль | цитата
Эти опции для стекла. Я их пробовал, фигня какая то...
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 26103
Рейтинг: 2124
#169: 2022-02-04 16:11:41 ЛС | профиль | цитата
andrestudio писал(а):
Эти опции для стекла. Я их пробовал, фигня какая то...

Вот и я про то же. А знаешь, почему граница как бы белая, а потому, что она не белая. Это альфа наложение цвета твоего окна на тень в режиме не альфа отрисовки. На любом цвете видно, что эта граница отличается по оттенку. Ты наверное видел, как картинка pf24bit отображается на контексте с альфа каналом, вот тут тоже самое. Так что закрасить средствами не GDI+ тоже не получится, тк перо обычного GDI не поддерживает альфа наложение. Но не лепить же в форму еще и графику на GDI+.

--- Добавлено в 2022-02-04 16:26:55

Короче, вот как отрисовывает у меня WM_NCPAINT:

...
var
...
DC: HDC;
aRect: TRect;
Pen: HPen;
OldPen: HPen;
OldBrush: HBrush;
...
WM_NCPAINT:
begin
GetWindowRect(Control.Handle, aRect);
OffsetRect(aRect, -aRect.Left, -aRect.Top);
DC := GetWindowDC(Control.Handle);
CNS_NC_SIZE := 1;
Pen := CreatePen(PS_SOLID, CNS_NC_SIZE*2-1, RGB(255, 0, 0));
OldPen := SelectObject(DC, Pen);
OldBrush := SelectObject(DC, GetStockObject(NULL_BRUSH));
Rectangle(DC, aRect.left, aRect.Top, aRect.Right, aRect.Bottom);
SelectObject(DC, OldBrush);
SelectObject(DC, OldPen);
DeleteObject(Pen);
end;
...
Константа CNS_NC_SIZE прописана вот так, чтобы можно было с ней экспериментировать по ходу пьесы

{$WRITEABLECONST ON}
const
CNS_NC_SIZE: Integer = 4;

А в конце метода _work_doShadow вызываю WM_NCPAINT

...
FreeLibrary(Hdwmapi);
end;
Control.Perform(WM_NCPAINT, 0, 0);
...
Короче, все эти эксперименты ни к чему хорошему пока не привели.

--- Добавлено в 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

0
Ответов: 5227
Рейтинг: 587
#170: 2022-02-04 16:48:07 ЛС | профиль | цитата
nesco, не, GDI+ там без надобности. Я тоже самое почти проделал, но пока отложил я с прорисовкой...
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 26103
Рейтинг: 2124
#171: 2022-02-04 18:15:06 ЛС | профиль | цитата
andrestudio писал(а):
не, GDI+ там без надобности.

А вот и не совсем. Похоже, друже, нам без альфа наложения не обойтись. Вот что я получил альфа наложением на эту область 1-но пиксельного прямоугольника с чистым фоном (там только перо работает) в DTM (в этом режиме GDI+ рисует), правда, через буфер, но все в альфа-режиме:



Думаю, что напрямую тоже можно отрисовать с тем же результатом.

--- Добавлено в 2022-02-04 18:26:14

P.S. Плохо другое WM_NCPAINT работает только один раз при отрисовке тени, а так это остается клиентской областью, и туда можно залезть, нарушив целостность отрисовки. Тч, остается в силе попытка срезать клиентскую область на величину этого прямоугольника, чтобы туда нельзя было залезть.

Редактировалось 4 раз(а), последний 2022-02-04 18:26:14
карма: 22

0
Ответов: 5227
Рейтинг: 587
#172: 2022-02-04 18:58:40 ЛС | профиль | цитата
nesco, рисовать то он рисует но это всё равно будет бордюр
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 26103
Рейтинг: 2124
#173: 2022-02-04 19:16:34 ЛС | профиль | цитата
andrestudio писал(а):
рисовать то он рисует но это всё равно будет бордюр

А что нам делать, если система отгрызла у нас кусок прямоугольника (или линии), не перерисовывать же весь контекст на каждый чих? А так, да -- это бордюр, но цветом фона, все же лучше, чем прямоугольник (линия) непонятного цвета. А что, твои контролы не перекрывают этот прямоугольник (линию), ведь это же клиентская область?
карма: 22

0
Ответов: 5227
Рейтинг: 587
#174: 2022-02-04 19:53:34 ЛС | профиль | цитата
nesco писал(а):
А что, твои контролы не перекрывают этот прямоугольник (линию), ведь это же клиентская область?

да почему, должны.

блин так и не догоню что не так. GDI+ рисует нормально. Видать из за альфы которой в KOL нет

Редактировалось 1 раз(а), последний 2022-02-04 20:19:03
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 26103
Рейтинг: 2124
#175: 2022-02-04 20:01:36 ЛС | профиль | цитата
andrestudio писал(а):
Видать из за альфы которой в KOL нет

А я тебе про что толкую? Именно из-за альфы GDI+ предпочтительней. Или будет такой гемор по преобразованию обычного контекста в альфу, там же альфа канал надо наложить, а это дополнительные ресурсы производительности. Не, но для обычной формы брушевую заливку контекста жирно как-то применять, проще пером нарисовать нужный прямоугольник, там даже антиальясинг не нужен. Но как это все себя поведет в мультислойной форме, я пока не знаю.

Редактировалось 1 раз(а), последний 2022-02-04 20:04:53
карма: 22

0
Ответов: 5227
Рейтинг: 587
#176: 2022-02-04 20:07:16 ЛС | профиль | цитата
nesco, понял. Мне видать фон нужно с альфа-каналом рисовать
Отрисовал панельку в Align = caTop
Всё нормально моржа по умолчанию как у тебя
margins.cxLeftWidth := 1;
margins.cxRightWidth := 1;
margins.cyBottomHeight := 1;
margins.cyTopHeight := 1;

карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 26103
Рейтинг: 2124
#177: 2022-02-04 20:09:14 ЛС | профиль | цитата
andrestudio писал(а):
Всё нормально

Ну вот и отлично, мы оказались на правильном пути.
карма: 22

0
Ответов: 5227
Рейтинг: 587
#178: 2022-02-04 20:54:52 ЛС | профиль | цитата
nesco, что предлагаешь тогда
OnEraseBkgnd перекрыть или в WM_ERASEBKGND подпилить или на... всё это нужно

--- Добавлено в 2022-02-04 20:56:35

хотя 52 кисточки не лишние будут, согласись

Редактировалось 1 раз(а), последний 2022-02-04 20:56:35
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 26103
Рейтинг: 2124
#179: 2022-02-04 21:27:37 ЛС | профиль | цитата
andrestudio писал(а):
что предлагаешь тогда

Я тут вообще не понял -- что подпилить предполагается, какой элемент?
andrestudio писал(а):
хотя 52 кисточки не лишние будут

52 кисточки -- это здорово, но как их выбирать? Как ты представляешь себе список из 52 кисточек?
карма: 22

0
Ответов: 5227
Рейтинг: 587
#180: 2022-02-04 21:44:39 ЛС | профиль | цитата
nesco писал(а):
Я тут вообще не понял -- что подпилить предполагается, какой элемент?

win.pas
nesco писал(а):
52 кисточки -- это здорово, но как их выбирать? Как ты представляешь себе список из 52 кисточек?

ID достаточно 0..52 integer

сделать ветку
##=BrushStyle
Color1
Color2
IDBrush
##

Редактировалось 1 раз(а), последний 2022-02-04 21:47:57
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)