2) point := CoPoint.Create; should be inside cycle, otherwise all your shapes are using the same point instance, and with each new iteration you overwrite old positions;
3) sf.GenerateLabels(0, lpCentroid, True) makes sense only if you have fields; it's ok to use sf.Labels.Label[].Text = "" but then GenerateLabels isn't necessary;
4) try to check what sf.Extents.ToDebugString() returns;
3) sf.GenerateLabels(0, lpCentroid, True) makes sense only if you have fields; it's ok to use sf.Labels.Label[].Text = "" but then GenerateLabels isn't necessary;
4) try to check what sf.Extents.ToDebugString() returns;