create shapes at runtime?

I would like to do use something like:

procedure makeShape;
var
  p : TShape;
begin
  P := TShape.Create(ThisForm);

  P.Pen.Width := 2;
  P.Pen.Color := clBlack;
  P.Pen.Mode := pmCopy;
//  etc. for other properties.
    P.Visible := True;
end;

Executes but does not result in displaying the shape in the form.  Is
this impossible to do
(because shapes can only be created at design time) or am I (hopefully)
overlooking
a final step to cause it to display in the form.

TIA

George