Ver Mensaje Individual
  #1  
Antiguo 23-05-2012
Avatar de PaulaGV
PaulaGV PaulaGV is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 34
Reputación: 0
PaulaGV Va por buen camino
Post Pilas y tshape

hola!!!les cuento que estoy trabando con una pila y esta pila contiene shape, primero tengo que crear o modificar tantos shape como el usuario quiera(figuras geométricas, color de la figura, borde de la figura), a medida que los crea el programita los apila, luego cuando el usuario lo desee tengo que mostrar esa pila de figuras geométricas en el form.
Mi problema es el siguiente:

1-mi idea al comienzo, era crear una función a la que le envié un shape y que me lo devuelva ya modificado.Pero cuando quise instanciar la función no me deja, es decir en esta parte:
Código Delphi [-]
type
  TForm1 = class(TForm)
    Button1: TButton;
    Shape1: TShape;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    function crearFigura(f:tshape):tshape;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
2-entonces pense otra solucion: en un procedimiento,modificar un shape que ya coloque en el form, insertarlo en la pila, y crear un nuevo shape. Pero tampoco funciona, por que como dije antes no muestra ninguna figura al final:
-----------------------------------------------
//procedimiento que dasapila
Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
figura:TShape;
begin
while pila.Count>0 do
figura:=TShape(pila.pop);
figura.Parent:=Form1;
end;
----------------------------
//procedimiento que modifica la figura
Código Delphi [-]
Procedure TForm1.crearfigura;
begin
with Shape1 do
begin
  Brush.Color:=RGB(Random(255),Random(255),Random(255));
  case Random(6) of
  1:begin
  Shape:= stCircle;
  ListBox1.Items.Add('Circulo');
  end;
  2:begin
  Shape:=stRectangle;
  ListBox1.Items.Add('Rectangulo');
  end;
  3:begin
  Shape:=stSquare;
  ListBox1.Items.Add('cuadrado');
  end;
  4:begin
  Shape:=stRoundRect;
  ListBox1.Items.Add('Rectangulo bordes redondeado');
  end;
  5:begin
   Shape:=stEllipse;
  ListBox1.Items.Add('elipse');
  end;
  6:begin
Shape:=stRoundSquare;
  ListBox1.Items.Add('cuadrado bordes redondeado');
  end;
  end;
  case Random(6) of
  1:Pen.Style:=psSolid;
  2:Pen.Style:=psDash;
  3:Pen.Style:=psDot;
  4:Pen.Style:=psDashDot;
  5:Pen.Style:=psDashDotDot;
  6:Pen.Style:=psClear;
  end;

end;
end;
-----------------------------------------------
//insertar figura en la pila
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
fig:tshape;
begin
crearFigura;
fig:=Shape1;
pila.Push(TObject(fig));
tshape.Create(Shape1);
end;
------------------------------------------------
//creo la pila

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
pila:=tstack.Create;
end;

no se si estoy trabajando bien la manera en que apilo y desapilo, por que no puedo lograr que las figuras aparezcan en el form, así que o no apila nunca, o no desapila, o estoy mostrando de manera incorrecta la pila de figuras.

desde ya muchas gracias!!!
Responder Con Cita