В общем-то subj, но разъясню подробнее:
Никакого AlphaBlendinga мне не нужно. Мне нужно окошко особой формы, где цвет нижнего левого пикселя — цвет прозрачности.
Почему WinAPI? Потому что в Linuxe есть свои средства, в Windows(
{$ifdef}uses Windows, Messages{$endif}) — свои.
Если Вы найдёте универсальный способ придания областям формы определённого цвета прозрачности, это будет сразу и "зачот", и "фдисятке"
----------------
В чём, собственно, трудности. Участок кода Forms, который,
предположительно, отвечает за это дело:
procedure TCustomForm.SetLayeredAttribs;
const
cUseAlpha: array [Boolean] of Integer = (0, LWA_ALPHA);
cUseColorKey: array [Boolean] of Integer = (0, LWA_COLORKEY);
var
AStyle: Integer;
begin
if not (csDesigning in ComponentState) and
(Assigned(SetLayeredWindowAttributes)) and HandleAllocated then
begin
AStyle := GetWindowLong(Handle, GWL_EXSTYLE);
if FAlphaBlend or FTransparentColor then
begin
if (AStyle and WS_EX_LAYERED) = 0 then
SetWindowLong(Handle, GWL_EXSTYLE, AStyle or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, FTransparentColorValue, FAlphaBlendValue,
cUseAlpha[FAlphaBlend] or cUseColorKey[FTransparentColor]);
end
else
begin
SetWindowLong(Handle, GWL_EXSTYLE, AStyle and not WS_EX_LAYERED);
RedrawWindow(Handle, nil, 0, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN);
end;
end;
end;
if (AStyle and WS_EX_LAYERED) = 0 then
SetWindowLong(Handle, GWL_EXSTYLE, AStyle or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, FTransparentColorValue, FAlphaBlendValue,
cUseAlpha[FAlphaBlend] or cUseColorKey[FTransparentColor]);
Это предположительная функция WinAPI, которая за сабж отвечает.
Как ей правильно воспользовоться в clx приложении?