You can top-align them (Align := alTop), then you don't have to calculate the coordinates. But note that Lazarus does not add them in the correct order if they are added consecutively and their Top values are equal. Just increment Top to some value higher than the Top assigned to the previously added frame (need not be the "correct" top) - see attached demo which adds runtime-generated frames this way. If you add a frame later set its top to a very large value, e.g. 9999.