Comment rendre la forme transparente tout en gardant le composant visible?
Je dois faire le programme qui a une forme qui contient l'image PNG avec la zone transparente. Le formulaire doit être invisible, tandis que l'image doit rester visible et la zone transparente doit rester transparente. Le problème est la transparence de l'image. Dans ce cas, la forme principale est transparente, invisible, alors que tous les composants/contrôles restent visibles. Mais, la zone transparente de l'image PNG ne conserve pas la transparence. Comment garder la transparence?
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;
Juste un coup de pouce :-) Êtes-vous sûr que l'image était vraiment transparente sur la première capture d'écran? – TLama
100% transparent :) –
Vous ne créez pas de formulaire transparent, vous modifiez la forme du formulaire. Utilisez plutôt les propriétés 'Color',' TransparentColor' et 'TransparentColorValue' du formulaire et chargez un png dans un' TImage' et vous avez terminé! –