This code will get you started.  I am sure you will have to make some adjustments, but the object positions and relative size is similar to what your images show.  Each time you click on the button an object is added and all existing buttons are repositioned and resized accordingly.
procedure TForm1.Add1Click(Sender: TObject);
var
  ihObj: integer;
  iObjectCount: integer;
  iLeft: integer;
  iTop: integer;
  iWidth: integer;
  iHeight: integer;
begin
  ImageEnVect1.MouseInteractVt := [miPutBox];
  ImageEnVect1.ObjKind[IEV_NEXT_INSERTED_OBJECT] := iekBOX;
  ImageEnVect1.ObjPenWidth[IEV_NEXT_INSERTED_OBJECT] := 1;
  ImageEnVect1.ObjPenColor[IEV_NEXT_INSERTED_OBJECT] := clBlack;
  ImageEnVect1.ObjBrushColor[IEV_NEXT_INSERTED_OBJECT] := clBlue;
  ImageEnVect1.ObjBrushStyle[IEV_NEXT_INSERTED_OBJECT] := bsSolid;
  ihObj := ImageEnVect1.AddNewObject;
  iObjectCount := ImageEnVect1.ObjectsCount;
  case ihObj of
    0: begin {1 object}
         iLeft := AObjSpacing;
         iTop := AObjSpacing;
         iWidth := ImageEnVect1.ExtentX - AObjSpacing;
         iHeight := ImageEnVect1.ExtentY - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj] := iLeft;
         ImageEnVect1.ObjTop[ihObj] := iTop;
         ImageEnVect1.ObjWidth[ihObj] := iWidth;
         ImageEnVect1.ObjHeight[ihObj] := iHeight;
    end;
    1: begin {2 objects}
         iLeft := AObjSpacing;
         iTop := AObjSpacing;
         iWidth := (ImageEnVect1.ExtentX div 2) - AObjSpacing;
         iHeight := ImageEnVect1.ExtentY - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-1] := iLeft;
         ImageEnVect1.ObjTop[ihObj-1] := iTop;
         ImageEnVect1.ObjWidth[ihObj-1] := iWidth;
         ImageEnVect1.ObjHeight[ihobj-1] := iHeight;
         iLeft := ImageEnVect1.ObjLeft[ihObj-1] + ImageEnVect1.ObjWidth[ihObj-1] + AObjSpacing;
         iTop := ImageEnVect1.ObjTop[ihObj-1];
         ImageEnVect1.ObjLeft[ihObj] := iLeft;
         ImageEnVect1.ObjTop[ihObj] := iTop;
         ImageEnVect1.ObjWidth[ihObj] := iWidth;
         ImageEnVect1.ObjHeight[ihObj] := iHeight;
    end;
    2: begin {3 objects}
         iLeft := AObjSpacing;
         iTop := AObjSpacing;
         iWidth := (ImageEnVect1.ExtentX div 2) - AObjSpacing;
         iHeight := ImageEnVect1.ExtentY - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-2] := iLeft;
         ImageEnVect1.ObjTop[ihObj-2] := iTop;
         ImageEnVect1.ObjWidth[ihObj-2] := iWidth;
         ImageEnVect1.ObjHeight[ihobj-2] := iHeight;
         iLeft := ImageEnVect1.ObjLeft[ihObj-2] + ImageEnVect1.ObjWidth[ihObj-2] + AObjSpacing;
         iTop := AObjSpacing;
         iHeight := (ImageEnVect1.ExtentY div 2) - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-1] := iLeft;
         ImageEnVect1.ObjTop[ihObj-1] := iTop;
         ImageEnVect1.ObjWidth[ihObj-1] := iWidth;
         ImageEnVect1.ObjHeight[ihObj-1] := iHeight;
         iTop := (ImageEnVect1.ExtentY div 2) + AObjSpacing;
         iHeight := (ImageEnVect1.ExtentY div 2) - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj] := iLeft;
         ImageEnVect1.ObjTop[ihObj] := iTop;
         ImageEnVect1.ObjWidth[ihObj] := iWidth;
         ImageEnVect1.ObjHeight[ihObj] := iHeight;
    end;
    3: begin {4 objects}
         iLeft := AObjSpacing;
         iTop := AObjSpacing;
         iWidth := (ImageEnVect1.ExtentX div 2) - AObjSpacing;
         iHeight := (ImageEnVect1.ExtentY div 2) - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-3] := iLeft;
         ImageEnVect1.ObjTop[ihObj-3] := iTop;
         ImageEnVect1.ObjWidth[ihObj-3] := iWidth;
         ImageEnVect1.ObjHeight[ihobj-3] := iHeight;
         iLeft := AObjSpacing;
         iTop := (ImageEnVect1.ExtentY div 2) + AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-2] := iLeft;
         ImageEnVect1.ObjTop[ihObj-2] := iTop;
         ImageEnVect1.ObjWidth[ihObj-2] := iWidth;
         ImageEnVect1.ObjHeight[ihObj-2] := iHeight;
         iLeft := ImageEnVect1.ObjLeft[ihObj-2] + ImageEnVect1.ObjWidth[ihObj-2] + AObjSpacing;
         iTop := AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-1] := iLeft;
         ImageEnVect1.ObjTop[ihObj-1] := iTop;
         ImageEnVect1.ObjWidth[ihObj-1] := iWidth;
         ImageEnVect1.ObjHeight[ihObj-1] := iHeight;
         iTop := ImageEnVect1.ObjTop[ihObj-1] + ImageEnVect1.ObjHeight[ihObj-1] + AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj] := iLeft;
         ImageEnVect1.ObjTop[ihObj] := iTop;
         ImageEnVect1.ObjWidth[ihObj] := iWidth;
         ImageEnVect1.ObjHeight[ihObj] := iHeight;
       end;
    4: begin {5 objects}
         {Object 0}
         iLeft := AObjSpacing;
         iTop := AObjSpacing;
         iWidth := (ImageEnVect1.ExtentX div 2) - AObjSpacing;
         iHeight := (ImageEnVect1.ExtentY div 2) - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-4] := iLeft;
         ImageEnVect1.ObjTop[ihObj-4] := iTop;
         ImageEnVect1.ObjWidth[ihObj-4] := iWidth;
         ImageEnVect1.ObjHeight[ihobj-4] := iHeight;
         {Object 1}
         iLeft := AObjSpacing;
         iTop := (ImageEnVect1.ExtentY div 2) + AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-3] := iLeft;
         ImageEnVect1.ObjTop[ihObj-3] := iTop;
         ImageEnVect1.ObjWidth[ihObj-3] := iWidth;
         ImageEnVect1.ObjHeight[ihObj-3] := iHeight;
         {Object 2}
         iLeft := ImageEnVect1.ObjLeft[ihObj-4] + ImageEnVect1.ObjWidth[ihObj-4] + AObjSpacing;
         iTop := AObjSpacing;
         iWidth := (ImageEnVect1.ExtentX div 2) - AObjSpacing;
         iHeight := (ImageEnVect1.ExtentY div 2) - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-2] := iLeft;
         ImageEnVect1.ObjTop[ihObj-2] := iTop;
         ImageEnVect1.ObjWidth[ihObj-2] := iWidth;
         ImageEnVect1.ObjHeight[ihObj-2] := iHeight;
         {Object 3}
         iLeft := ImageEnVect1.ObjLeft[ihObj-2];
         iTop := (ImageEnVect1.ExtentY div 2) + AObjSpacing;
         iWidth := (ImageEnVect1.ExtentX div 4) - AObjSpacing;
         iHeight := (ImageEnVect1.ExtentY div 2) - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-1] := iLeft;
         ImageEnVect1.ObjTop[ihObj-1] := iTop;
         ImageEnVect1.ObjWidth[ihObj-1] := iWidth;
         ImageEnVect1.ObjHeight[ihObj-1] := iHeight;
         {Object 4}
         iLeft := ImageEnVect1.ObjLeft[ihObj-1] + ImageEnVect1.ObjWidth[ihObj-1] + AObjSpacing;
         iTop := ImageEnVect1.ObjTop[ihObj-1];
         iWidth := (ImageEnVect1.ExtentX div 4) - AObjSpacing;
         iHeight := (ImageEnVect1.ExtentY div 2) - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj] := iLeft;
         ImageEnVect1.ObjTop[ihObj] := iTop;
         ImageEnVect1.ObjWidth[ihObj] := iWidth;
         ImageEnVect1.ObjHeight[ihObj] := iHeight;
    end;
    5: begin {6 objects}
         {Object 0}
         iLeft := AObjSpacing;
         iTop := AObjSpacing;
         iWidth := (ImageEnVect1.ExtentX div 5) - AObjSpacing;
         iHeight := (ImageEnVect1.ExtentY div 2) - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-5] := iLeft;
         ImageEnVect1.ObjTop[ihObj-5] := iTop;
         ImageEnVect1.ObjWidth[ihObj-5] := iWidth;
         ImageEnVect1.ObjHeight[ihobj-5] := iHeight;
         {Object 1}
         iLeft := ImageEnVect1.ObjLeft[ihObj-5] + ImageEnVect1.ObjWidth[ihObj-5] + AObjSpacing;
         iTop := AObjSpacing;
         iWidth := (ImageEnVect1.ExtentX div 5) - AObjSpacing;
         iHeight := (ImageEnVect1.ExtentY div 2) - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-4] := iLeft;
         ImageEnVect1.ObjTop[ihObj-4] := iTop;
         ImageEnVect1.ObjWidth[ihObj-4] := iWidth;
         ImageEnVect1.ObjHeight[ihObj-4] := iHeight;
         {Object 2}
         iLeft := ImageEnVect1.ObjLeft[ihObj-4] + ImageEnVect1.ObjWidth[ihObj-4] + AObjSpacing;
         iTop := AObjSpacing;
         iWidth := (ImageEnVect1.ExtentX div 5) - AObjSpacing;
         iHeight := (ImageEnVect1.ExtentY div 2) - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-3] := iLeft;
         ImageEnVect1.ObjTop[ihObj-3] := iTop;
         ImageEnVect1.ObjWidth[ihObj-3] := iWidth;
         ImageEnVect1.ObjHeight[ihObj-3] := iHeight;
         {Object 3}
         iLeft := AObjSpacing;
         iTop := (ImageEnVect1.ExtentY div 2) + AObjSpacing;
         iWidth := (ImageEnVect1.ObjWidth[ihObj-5] * 2) - (AObjSpacing * 3);
         iHeight := (ImageEnVect1.ExtentY div 2) - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-2] := iLeft;
         ImageEnVect1.ObjTop[ihObj-2] := iTop;
         ImageEnVect1.ObjWidth[ihObj-2] := iWidth;
         ImageEnVect1.ObjHeight[ihObj-2] := iHeight;
         {Object 4}
         iLeft := ImageEnVect1.ObjLeft[ihObj-5] + ImageEnVect1.ObjLeft[ihObj-4] + ImageEnVect1.ObjLeft[ihObj-3] - AObjSpacing*2;
         iTop := AObjSpacing;
         iWidth := (ImageEnVect1.ExtentX div 2) - (AObjSpacing * 5);
         iHeight := (ImageEnVect1.ExtentY div 2) - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj-1] := iLeft;
         ImageEnVect1.ObjTop[ihObj-1] := iTop;
         ImageEnVect1.ObjWidth[ihObj-1] := iWidth;
         ImageEnVect1.ObjHeight[ihObj-1] := iHeight;
         {Object 5}
         iLeft := ImageEnVect1.ObjLeft[ihObj-1] - AObjSpacing * 6;
         iTop := ImageEnVect1.ObjTop[ihObj-2];
         iWidth := (ImageEnVect1.ExtentX div 2) + (AObjSpacing);
         iHeight := (ImageEnVect1.ExtentY div 2) - AObjSpacing;
         ImageEnVect1.ObjLeft[ihObj] := iLeft;
         ImageEnVect1.ObjTop[ihObj] := iTop;
         ImageEnVect1.ObjWidth[ihObj] := iWidth;
         ImageEnVect1.ObjHeight[ihObj] := iHeight;
    end
    else
    begin
    end;
  end;
  ImageEnVect1.MouseInteractVt := [miObjectSelect];
end;
Bill Miller
Adirondack Software & Graphics
Email: w2m@hughes.net
EBook: http://www.imageen.com/ebook/
Custom Commercial ImageEn Development