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;
...
{$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