procedure TForm1.GenerateBlocks(const AOwner: TComponent; const AParent: TWinControl);
var
Brows, Bcols, Srows, Scols: Integer;
Lleft, Ltop: Integer;
LTag: Integer;
begin
LTag := 1;
SetLength(FBlocks, FBlocksRow, FBlocksCol, FBlockRow, FBlockCol);
for Brows := 0 to Pred(FBlocksRow) do
for Bcols := 0 to Pred(FBlocksCol) do
for Srows := 0 to Pred(FBlockRow) do
for Scols := 0 to Pred(FBlockCol) do
begin
FBlocks[Brows, Bcols, Srows, Scols] := TShape.Create(AOwner);
try
Lleft := Bcols * (FSpacing + (FBlockCol * FShapeHeight));
Ltop := Brows * (FSpacing + (FBlockRow * FShapeWidth));
FBlocks[Brows, Bcols, Srows, Scols].Parent := AParent;
FBlocks[Brows, Bcols, Srows, Scols].OnMouseUp := @ShapeEvent;
FBlocks[Brows, Bcols, Srows, Scols].Shape := stRectangle;
FBlocks[Brows, Bcols, Srows, Scols].Width := FShapeWidth;
FBlocks[Brows, Bcols, Srows, Scols].Height := FShapeHeight;
FBlocks[Brows, Bcols, Srows, Scols].Left := Lleft + Pred(Scols * FShapeWidth) + FSpacing;
FBlocks[Brows, Bcols, Srows, Scols].Top := Ltop + Pred(Srows * FShapeHeight) + FSpacing;
FBlocks[Brows, Bcols, Srows, Scols].Brush.Color := clRed;
FBlocks[Brows, Bcols, Srows, Scols].Brush.Style := bsSolid;
FBlocks[Brows, Bcols, Srows, Scols].Pen.Color := clBlack;
FBlocks[Brows, Bcols, Srows, Scols].Pen.Style := psSolid;
FBlocks[Brows, Bcols, Srows, Scols].Tag := LTag;
FBlocks[Brows, Bcols, Srows, Scols].Name := 'DynShape' + LTag.ToString;
// FBlocks[Brows, Bcols, Srows, Scols].Hint := 'DynShape' + LTag.ToString;
// FBlocks[Brows, Bcols, Srows, Scols].ShowHint := True;
Inc(LTag);
finally
FBlocks[Brows, Bcols, Srows, Scols].Visible := True;
end;
end;
end;