I don't think there is a simple way to do such a function. However you can do that by defining the path of the outline after drawing the shape (and by setting the boolean whether the mouse is hovering before calling redraw):
procedure TForm1.BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
var
center: TPointF;
begin
content := TBGRABitmap.Create(Bitmap.Width, Bitmap.Height, BGRAPixelTransparent);
ctx := content.Canvas2D;
ctx.antialiasing := True;
ctx.pixelCenteredCoordinates := True;
//Draw
center := pointf(ctx.Width / 2, ctx.Height / 2);
ctx.translate(center.X, center.Y);
ctx.save();
ctx.scale(4, 4);
ctx.strokeStyle('rgba(0,0,0,0)');
ctx.miterLimit := 4;
ctx.save();
ctx.beginPath();
ctx.moveTo(37.324, 10.004);
ctx.bezierCurveTo(31.802, 0.43799999999999883, 19.569, -2.84, 10.003999999999998, 2.6839999999999993);
ctx.bezierCurveTo(0.438, 8.206, -2.84, 20.438, 2.684, 30.004);
ctx.bezierCurveTo(8.206, 39.569, 20.438000000000002, 42.847, 30.004, 37.324);
ctx.bezierCurveTo(39.569, 31.801, 42.848, 19.569, 37.324, 10.004);
ctx.closePath();
ctx.moveTo(28.004, 33.859);
ctx.bezierCurveTo(20.352, 38.278, 10.566000000000003, 35.656, 6.148, 28.003);
ctx.bezierCurveTo(1.729, 20.351, 4.351999999999999, 10.565000000000001, 12.004, 6.148);
ctx.bezierCurveTo(19.656, 1.729, 29.442, 4.351, 33.86, 12.004);
ctx.bezierCurveTo(38.278, 19.656, 35.656, 29.441, 28.004, 33.859);
ctx.closePath();
ctx.moveTo(27.204, 19.191);
ctx.lineTo(16.731, 13.082999999999998);
ctx.bezierCurveTo(15.777000000000001, 12.525999999999998, 15.007000000000001, 12.970999999999998, 15.012000000000002, 14.075);
ctx.lineTo(15.066000000000003, 26.198999999999998);
ctx.bezierCurveTo(15.071000000000003, 27.302999999999997, 15.850000000000003, 27.752, 16.807000000000002, 27.198999999999998);
ctx.lineTo(27.200000000000003, 21.198999999999998);
ctx.bezierCurveTo(28.156, 20.647, 28.158, 19.748, 27.204, 19.191);
ctx.closePath();
if b then ctx.fillStyle('#F26767') else ctx.fillStyle('#3f5e99');
ctx.fill();
ctx.beginPath();
ctx.moveTo(37.324, 10.004);
ctx.bezierCurveTo(31.802, 0.43799999999999883, 19.569, -2.84, 10.003999999999998, 2.6839999999999993);
ctx.bezierCurveTo(0.438, 8.206, -2.84, 20.438, 2.684, 30.004);
ctx.bezierCurveTo(8.206, 39.569, 20.438000000000002, 42.847, 30.004, 37.324);
ctx.bezierCurveTo(39.569, 31.801, 42.848, 19.569, 37.324, 10.004);
ctx.closePath();
ctx.restore();
Bitmap.PutImage(0, 0, content, dmDrawWithTransparency);
// content.Free;
end;
procedure TForm1.BGRAVirtualScreen1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer);
begin
mx := X;
my := Y;
if ctx <> nil then
if ctx.isPointInPath(X+0.5, Y+0.5) then
begin
if not b then
begin
b := True;
BGRAVirtualScreen1.RedrawBitmap;
end;
end
else
begin
if b then
begin
b := False;
BGRAVirtualScreen1.RedrawBitmap;
end;
end;
end;