Прозрачность областей формы в clx средствами WinAPI.
От: Glex  
Дата: 22.01.06 07:30
Оценка:
В общем-то 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 приложении?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.