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