Delphi 如何在保持组件可见的同时使窗体透明?
我需要使程序有一个形式,其中包含PNG图像与透明区域。窗体必须不可见,而图像必须保持可见,透明区域必须保持透明。问题是图像的透明度。在这种情况下,主窗体是透明的、不可见的,而所有组件/控件保持可见。但是,PNG图像的透明区域并没有保持透明。如何保持透明度Delphi 如何在保持组件可见的同时使窗体透明?,delphi,transparency,transparent-control,Delphi,Transparency,Transparent Control,我需要使程序有一个形式,其中包含PNG图像与透明区域。窗体必须不可见,而图像必须保持可见,透明区域必须保持透明。问题是图像的透明度。在这种情况下,主窗体是透明的、不可见的,而所有组件/控件保持可见。但是,PNG图像的透明区域并没有保持透明。如何保持透明度 procedure MakeTransparent; var AControl: TControl; A, Margin, X, Y, CtlX, CtlY: Integer; begin Margin
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;
只需在表单中使用按钮删除此代码,您就会看到PNG格式的表单变得透明:
procedure SetTransparent(Aform: TForm; AValue: Boolean);
begin
Aform.TransparentColor := AValue;
Aform.TransparentColorValue := Aform.Color;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
SetTransparent(Self, True);
end;
如果您需要部分透明度,那么TransparentColor/TransparentColorValue不会有帮助 对于NonAero(或DisabledAero)和EnabledAero情况,您需要使用两种完全不同的方法 启用Aero后,您必须使用以下方法: 当Aero被禁用或不存在时,您必须使用某种黑客:
只是戳一下:-)你确定第一张截图上的图像真的是透明的吗?你不是在创建透明表单,而是在更改表单的形状。相反,使用表单的
颜色
、透明颜色
和透明颜色值
属性,并将png加载到图像
,就完成了!