Методы Canvas объекта нужно вызывать в перекрытом методе Paint
Код:
type
TShapeEx = class(TShape)
protected
procedure Paint; override;
end;
procedure TShapeEx.Paint;
begin
// Здесь вызываем Canvas.textOut
end;
// И уже новый класс TShapeEx используем для создания объекта
// на форме.