Для решения данной задачи используется т.н. графический путь с его последующей обводкой и/или заполнением.
Ниже приведен код, который достаточно прокомментирован.
procedure TForm1.FormPaint(Sender: TObject);
var
g: TGPGraphics;
path: TGPGraphicsPath;
pen: TGPPen;
brush: TGPSolidBrush;
font_family: TGPFontFamily;
string_format: TGPStringFormat;
text: WideString;
begin
g := TGPGraphics.Create(Canvas.Handle);
path := TGPGraphicsPath.Create(); // создаем графический путь
pen := TGPPen.Create(aclRoyalBlue, 2); // определяем обтравочную линию шириной 2
brush := TGPSolidBrush.Create(aclAqua); // определяем кисть для заполнения контура текста
font_family := TGPFontFamily.Create('Arial'); // определяем шрифт
string_format := TGPStringFormat.Create(); // формат отрисовки
text := 'Йа креветко !';
// добавляем к пути текст:
// шрифт Arial, жирное начертание, размером 50, рисовать начинаем в позиции x:0, y:10
// также можем задать формат отображения текста. К примеру для вертикальной отрисовки:
// string_format := TGPStringFormat.Create(StringFormatFlagsDirectionVertical);
path.AddString(text, -1, font_family, FontStyleBold, 50, MakePoint(0, 10), string_format);
// заполняем контур
g.FillPath(brush, path);
// рисуем контур
g.DrawPath(pen, path);
string_format.Free;
font_family.Free;
pen.Free;
path.Free;
g.Free;
end;

Вывод обведенного (outlined) и заполненного (filled) текста с помощью GDI+
