cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
12 déc. 2006 à 22:50
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
14 déc. 2006 à 17:55
bonjour à tous,
Vous prenez un bitmap que vous affichez dans un TImage ou TPaintBox..
Ensuite par programmation, par exemple, vous voulez découper proprement cette image selon une ellipse.
plus simplement dit comment faire un couper coller d'une image en forme d'une ellipse ?
je n'ai pas trouvé d'exemple sur ce thème..
Je sais cela ne présente guère d'intérêt.. car il y a des outils qui le font directement..
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 13 déc. 2006 à 21:53
Salut,
il y a un petit souci dans le code que tu donnes :
- tu ne peux affecter une région que si c'est un descendant de TWinControl et TPaintBox descent de TGraphicControl !
- Supprime le TPaintBox, ... Place un TPanel sur ta fiche donne lui la taille souhaité ... ajoute lui un TPaintBox avec Align à alClient et surtout ne pas oublier de réassigner l'évennement OnPaint du TPaintBox
et pour finir modifier le OnClick du Button1 comme ceci :
procedure TForm1.Button1Click(Sender: TObject);
var hrgn1 : Hrgn;
begin
// CreateEllipticRGN(Left, Top, Right, Bottom)
// Crée une ellipse au centre du panel
hrgn1 := CreateEllipticRgn(Panel1.Width Div 4, Panel1.Height Div 4, Panel1.Width - (Panel1.Width Div 4), Panel1.Height - (Panel1.Height Div 4));
// Et on l'affecte au panel
SetWindowRgn(Panel1.handle, hrgn1, true);
DeleteObject(hrgn1); // Ne pas oublier end;
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 13 déc. 2006 à 14:26
merci foxi,
je viens de comprendre et si je te suis, il faut considérer avoir deux régions
(l'image et l'ellipse) et utiliser une combinaison OR ou XOR ou AND etc..
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 14 déc. 2006 à 00:05
Non c'est pas utile ici mais ça reste tout de même très utile dans la construction de formes plus complexes
Voici une variante qui évite de changer la forme du panel :
Tu mets en commentaire le OnPaint du TPaintBox et tu ajoutes un TButton et tu complètes comme suit :
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin //PaintBox1.Canvas.Draw(0, 0, Bmp1); end;
procedure TForm1.Button2Click(Sender: TObject);
var hrgn1: Hrgn;
I, J : Integer;
begin PaintBox1.Invalidate;
Application.ProcessMessages;
PaintBox1.Canvas.Brush.Bitmap := Bmp1;
J := PaintBox1.Height Div 2;
For I : = J Downto 1 do Begin hrgn1 := CreateEllipticRgn(I, I, Panel1.Width - I, Panel1.Height - I);
FillRgn(PaintBox1.Canvas.Handle, hrgn1, PaintBox1.Canvas.Brush.Handle);
Sleep(5);
DeleteObject(hrgn1);
End ;
end;
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 14 déc. 2006 à 17:55
Je profite d'un peu de vacances pour toucher de la programmation que je ne fais pas sur un plan professionnel et cela m'amuse bcp.. et c'est très intéressant..
Tes dernières formules me plaisent plus car elles abandonnent le panel..
du moins je le crois..et si je veux faire un peu d'animation cela me semble plus léger.
En tout cas merci encore pour ces exemples que je vais étudier avec soin.