我需要製作一個包含帶有透明區域的PNG圖像的窗體。表格必須是不可見的,而圖片必須保持可見並且透明區域必須保持透明。問題是圖像透明度。在這種情況下,主窗體是透明的,不可見的,而所有的組件/控件保持可見。但是,PNG圖像的透明區域不保持透明度。如何保持透明度?
procedure MakeTransparent;
var
AControl: TControl;
A, Margin, X, Y, CtlX, CtlY: Integer;
begin
Margin := (Width - ClientWidth) div 2;
FullRgn := CreateRectRgn(0, 0, Width, Height);
X := Margin;
Y := Height - ClientHeight - Margin;
ClientRgn := CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight);
CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF);
for A := 0 to ControlCount - 1 do
begin
AControl := Controls[A];
if (AControl is TWinControl) or (AControl is TGraphicControl) then with AControl do
begin
if Visible then
begin
CtlX := X + Left;
CtlY := Y + Top;
CtlRgn := CreateRectRgn(CtlX, CtlY, CtlX + Width, CtlY + Height);
CombineRgn(FullRgn, FullRgn, CtlRgn, RGN_OR);
end;
end;
end;
SetWindowRgn(Handle, FullRgn, True);
end;
procedure UndoTransparency;
begin
FullRgn := CreateRectRgn(0, 0, Width, Height);
CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY);
SetWindowRgn(Handle, FullRgn, True);
end;
只是一捅:-)你確定的圖像是在第一張截圖真正透明? – TLama 2012-04-11 00:42:06
100%透明:) – 2012-04-11 00:44:53
您不是在創建透明表單,而是在更改表單的形狀。而是使用窗體的'Color','TransparentColor'和'TransparentColorValue'屬性,並將png加載到'TImage',就完成了! – 2012-04-11 00:58:48