Jak uczynić przezroczystą formę przy zachowaniu widoczności komponentu?
Potrzebuję wykonać program, który ma jeden formularz, który zawiera obraz PNG z przezroczystym obszarem. Formularz musi być niewidoczny, a obraz musi być widoczny, a przezroczysty obszar musi pozostać przezroczysty. Problemem jest przezroczystość obrazu. W takim przypadku główna forma jest przezroczysta, niewidoczna, a wszystkie elementy/elementy sterujące pozostają widoczne. Ale przezroczysty obszar obrazu PNG nie zachowuje przezroczystości. Jak zachować przejrzystość?
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;
Po prostu poke :-) Czy jesteś pewien, że obraz był naprawdę przezroczysty na pierwszym zrzucie ekranu? – TLama
100% przezroczysty :) –
Nie tworzysz przezroczystej formy, zmieniasz kształt formularza. Zamiast tego użyj właściwości 'Color',' TransparentColor' i 'TransparentColorValue' i załaduj png do' TImage' i gotowe! –