¿Cómo hacer que la forma sea transparente mientras se mantiene el componente visible?
Necesito hacer el programa que tiene un formulario que contiene una imagen PNG con área transparente. El formulario debe ser invisible, mientras que la imagen debe permanecer visible y el área transparente debe permanecer transparente. El problema es la transparencia de la imagen. En este caso, la forma principal es transparente, invisible, mientras que todos los componentes/controles permanecen visibles. Pero, el área transparente de la imagen PNG no mantiene la transparencia. ¿Cómo mantener la transparencia?
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;
Solo un poke :-) ¿Estás seguro de que la imagen fue realmente transparente en la primera captura de pantalla? – TLama
100% transparente :) –
No está creando un formulario transparente, está cambiando la forma del formulario. En su lugar, use las propiedades 'Color',' TransparentColor' y 'TransparentColorValue' del formulario y cargue un png en' TImage' y ¡listo! –