Hola Paula.
Espero haber entendido lo que deseas hacer... de todos modos te pongo un ejemplo que tal vez te sirva de guía:
Código Delphi
[-]
...
implementation
uses Contnrs, TypInfo;
var
Stack: TStack;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
Stack:= TStack.Create;
end;
procedure TForm1.PushShapes(Cant: Integer);
var
Shape: TShape;
i: Integer;
begin
for i:= 1 to Cant do
begin
Shape:= TShape.Create(Self);
Shape.Left:= 300;
Shape.Top := 50;
Shape.Height:= 150;
Shape.Width := 150;
Shape.Brush.Color:= RGB(Random(255),Random(255),Random(255));
Shape.Shape:= TShapeType(Random(7));
Shape.Pen.Style:= TPenStyle(Random(7));
ListBox1.Items.Add(Copy(GetEnumName(TypeInfo(TShapeType),Ord(Shape.Shape)),3,MaxInt));
Stack.Push(Shape);
end;
end;
procedure TForm1.btnPushClick(Sender: TObject);
begin
PushShapes(10);
end;
procedure TForm1.btnPopClick(Sender: TObject);
begin
if Stack.Count > 0 then
begin
TShape(Stack.Pop).Parent:= Self;
ListBox1.Items.Delete(ListBox1.Count-1);
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
i: Integer;
begin
for i:= Stack.Count-1 downto 0 do
Stack.Pop;
Stack.Free;
end;
Para hacer mas reducido el código usé la función
GetEnumNames, pero tiene la contra que pone en el ListBox el nombre de la figura en inglés.
Saludos.