Comment faire une fiche transparente tout en gardant la composante visible?
J'ai besoin de faire le programme qui ont un formulaire qui contient des image PNG avec transparence. Le formulaire doit être invisible, alors que l'image doit rester visible et transparente de la zone doit rester transparent. Le problème, c'est de la transparence des images. Dans ce cas, le formulaire principal est transparent, invisible, tandis que tous les composants/contrôles reste visible. Mais, la zone transparente de l'image au format PNG permet de ne pas garder la transparence. Comment faire pour 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 poke 🙂 vous Êtes-vous sûr que l'image était vraiment transparent sur la première capture d'écran ?
100% transparente 🙂
Vous n'êtes pas créer un transparent de forme, vous êtes à la modification de la forme de la forme. Au lieu d'utiliser le formulaire de
100% transparente 🙂
Vous n'êtes pas créer un transparent de forme, vous êtes à la modification de la forme de la forme. Au lieu d'utiliser le formulaire de
Color
, TransparentColor
et TransparentColorValue
propriétés et chargement d'un png à une TImage
et vous avez terminé!OriginalL'auteur Srdjan Vukmirica | 2012-04-11
Vous devez vous connecter pour publier un commentaire.
Il suffit de déposer ce code avec un bouton dans votre Formulaire et vous verrez votre Formulaire avec votre PNG devenir transparent:
OriginalL'auteur François
Si vous avez besoin d'une transparence partielle, puis la zone couleur transparente/TransparentColorValue ne va pas aider.
Vous aurez besoin d'utiliser deux méthodes différentes pour NonAero (ou DisabledAero) et EnabledAero situations.
Lorsque Aero est activé, vous devrez utiliser de telles méthodes: http://delphihaven.wordpress.com/category/glass/
Lorsque Aero est désactivé ou n'est pas présent, alors vous aurez à utiliser une sorte de hack:
OriginalL'auteur Torbins