1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| procedure TForm1.FormPaint(Sender: TObject);
const
Blend :TBlendFunction = (BlendOp:AC_SRC_OVER; BlendFlags:0; SourceConstantAlpha:50; AlphaFormat:0);
var
i :integer;
Shadow :TBitmap;
ShadowRgn :hRgn;
begin
Shadow := TBitmap.Create;
ShadowRgn := CreateRectRgn(0,0,0,0);
try
Shadow.Width := 1;
Shadow.Height := 1;
Shadow.Canvas.Pixels[0,0] := clBlack;
for i := Low(Cards) to High(Cards) do
begin
//Dessin image
SetBrushOrgEx(Canvas.Handle, Cards[i].Origin.X, Cards[i].Origin.Y, nil);
Canvas.Brush.Bitmap := Cards[i].Image;
PaintRgn(Canvas.Handle, Cards[i].Region);
//Ombre (Région décalée -région originale)
OffsetRgn(Cards[i].Region, -10, 10);
CombineRgn(ShadowRgn, ShadowRgn, Cards[i].Region, RGN_OR);
OffsetRgn(Cards[i].Region, 10, -10);
CombineRgn(ShadowRgn, ShadowRgn, Cards[i].Region, RGN_DIFF);
end;
//Dessin ombre
OffsetRgn(ShadowRgn, 1, -1);
SelectClipRgn(Canvas.Handle, ShadowRgn);
Windows.AlphaBlend(Canvas.Handle, 0, 0, ClientWidth, ClientHeight, Shadow.Canvas.Handle, 0, 0, Shadow.Width, Shadow.Height, Blend);
finally
Shadow.Free;
DeleteObject(ShadowRgn);
end;
end; |
Partager