I need to make the program which have one form that contains PNG image with transparent area. Form must be invisible, while image must stay visible and transparent area must stay transparent. The problem is image transparency. In this case, main form is transparent, invisible, while all components/controls stays visible. But, transparent area of PNG image doesn't keep transparency. How to keep transparency?
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;
If you need partial transparency, then TransparentColor/TransparentColorValue won't help.
You will need to use two completely different methods for NonAero (or DisabledAero) and EnabledAero situations.
When Aero is enabled, you will have to use such methods: http://delphihaven.wordpress.com/category/glass/
When Aero is disabled or not present, then you will have to use some sort of hack:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With