2d массив не пошел. Было бы понятнее.
Можно большой массив разделить на две части(фигура и служебные)
На счет правильности оригинальных суффиксов не уверен.
var
...
arrSX : Array[0..9] of string = ['_TL','_TR','_BL','_BR','_HR','_VR','_TP','_BT','_LF','_RG'];
arrParam: Array[0..89] of integer = [5,1,2,0,0,0,0,RP_SIZE,RP_SIZE,
5,0,2,4,0,AMemo.Width-RP_SIZE,0,RP_SIZE,RP_SIZE,
5,1,0,0,8,0,AMemo.Height-RP_SIZE,RP_SIZE,RP_SIZE,
5,0,0,4,8,AMemo.Width-RP_SIZE,AMemo.Height-RP_SIZE,RP_SIZE,RP_SIZE,
0,1,2,4,8,0,RP_SIZE div 2,AMemo.Width,AMemo.Height-RP_SIZE,
0,1,2,4,8,RP_SIZE div 2,0,AMemo.Width-RP_SIZE,AMemo.Height,
0,1,2,4,0,RP_SIZE div 2,0,AMemo.Width-RP_SIZE,1,
0,1,0,4,8,RP_SIZE div 2,AMemo.Height-1,AMemo.Width-RP_SIZE,1,
0,1,2,0,8,0,RP_SIZE div 2,1,AMemo.Height-RP_SIZE,
0,0,2,4,8,AMemo.Width-1,RP_SIZE div 2,1,AMemo.Height-RP_SIZE];
//(Shape,akLeft,akTop,akRight,akBottom,Left,Top,Width,Height)
begin
...
while i <= 89 do
begin
s := TShape.Create(tmpForm);
s.Name := T_SHAPE + tmpName + arrSX[i div 9];
s.Parent := tmpPanel;
s.Shape := arrParam[i];
s.SetBounds(arrParam[i+5],arrParam[i+6],arrParam[i+7],arrParam[i+8]);
s.Anchors := arrParam[i+1]+arrParam[i+2]+arrParam[i+3]+arrParam[i+4];
i := i + 9;
end;
...