Problema con un PaintBox

Radamanthys
15 de Diciembre del 2008
Saludos:
Tengo un problema con un objeto de tipo PaintBox. Resulta que lo utilizo para pintar cosas sobre el, pero si abro por ejemplo otra ventana o incluso si minimizo y maximizo el programa, me desaparece lo que habia pintado. Se trata de alguna propiedad del objeto?
Gracias por las contestaciones.

Albertinik
15 de Diciembre del 2008
wenas, yo tenía el mismo problema y casi me vuelvo loco con el, la solución es muy sencilla, en lugar de utilizar el objeto PaintBox, utiliza el objeto TImage, funciona igual y no sucede el problema. Deeee nada

Miguel
15 de Diciembre del 2008
Bueno es muy sencillo solo

unit Figuras;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ColorGrd, ExtCtrls,Math, ComCtrls;

type
ArregloR = array of real;

TfrmPrincipal = class(TForm)
Panel2D: TPanel;
Lienzo: TPanel;
PaintBox1: TPaintBox;
ColorGrid1: TColorGrid;
btnLimpiar: TButton;
MainMenu1: TMainMenu;
Graficos3d1: TMenuItem;
Fractales1: TMenuItem;
Graficos3d2: TMenuItem;
LaboratoriosVirtuales1: TMenuItem;
Fondo1: TMenuItem;
Salir1: TMenuItem;
gbxGraficosDinamicos: TGroupBox;
btnSegmentoDinam: TButton;
StatusBar1: TStatusBar;
btnCircunferenciaDinam: TButton;
btnRectanguloDinam: TButton;
cbxTipo: TComboBox;
btnCurva: TButton;
btnPoligono: TButton;
edtNumLados: TEdit;
btnCurvaAjuste: TButton;
btnCurvaBezier: TButton;
btnTapete: TButton;
cbxTipoTapete: TComboBox;
btnCurvaLagrange: TButton;
gbxBanderas: TGroupBox;
btnBandera: TButton;
btnBanderaDegradada: TButton;
btnSalir: TButton;
cbxTipoPaleta: TComboBox;
lblTipoPaleta: TLabel;
GrficosEstticos1: TMenuItem;
mnuVector: TMenuItem;
mnuSegmento: TMenuItem;
mnuCircunferencia: TMenuItem;
mnuRectangulo: TMenuItem;
mnuTriangulo: TMenuItem;
mnuArbol: TMenuItem;
mnuEstrella: TMenuItem;
clgColorFondo: TColorGrid;
gbxColorFondo: TGroupBox;
mnuCubo: TMenuItem;
mnuReloj: TMenuItem;
mnuElipse: TMenuItem;
btnElipseDin: TButton;
btnCurvaRelleno: TButton;
procedure Salir1Click(Sender: TObject);
procedure btnVectorClick(Sender: TObject);
procedure btnSegmentoClick(Sender: TObject);
procedure btnCircunferenciaClick(Sender: TObject);
procedure btnRectanguloClick(Sender: TObject);
procedure btnSegmentoDinamClick(Sender: TObject);
procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure btnCircunferenciaDinamClick(Sender: TObject);
procedure btnRectanguloDinamClick(Sender: TObject);
procedure btnCurvaClick(Sender: TObject);
procedure btnPoligonoClick(Sender: TObject);
procedure btnCurvaAjusteClick(Sender: TObject);
procedure btnLimpiarClick(Sender: TObject);
procedure marca(sx,sy:integer);
procedure btnCurvaBezierClick(Sender: TObject);
procedure btnTapeteClick(Sender: TObject);
procedure btnCurvaLagrangeClick(Sender: TObject);
procedure btnSalirClick(Sender: TObject);
procedure btnBanderaClick(Sender: TObject);
procedure btnBanderaDegradadaClick(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure btnPaletaClick(Sender: TObject);
procedure btnFractalClick(Sender: TObject);
procedure btnArbolClick(Sender: TObject);
procedure mnuVectorClick(Sender: TObject);
procedure mnuSegmentoClick(Sender: TObject);
procedure mnuCircunferenciaClick(Sender: TObject);
procedure mnuRectanguloClick(Sender: TObject);
procedure Arbol1Click(Sender: TObject);
procedure Estrella1Click(Sender: TObject);
procedure mnuTrianguloClick(Sender: TObject);
procedure mnuArbolClick(Sender: TObject);
procedure mnuEstrellaClick(Sender: TObject);
procedure ColorGrid1Click(Sender: TObject);
procedure Fondo1Click(Sender: TObject);
procedure mnuCuboClick(Sender: TObject);
procedure mnuRelojClick(Sender: TObject);
procedure btnElipseDinClick(Sender: TObject);
procedure mnuElipseClick(Sender: TObject);
procedure btnCurvaRellenoClick(Sender: TObject);
procedure btnSegmentoDegradadoClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

//clase libreria Gráfica

TLibreriaG = class
constructor create();
destructor destroy();
procedure pantalla(x,y:real;var Sx,Sy:integer);
procedure real1(Sx,Sy:integer;var x,y:real);
end;

//clase vector

TVector = class(TLibreriaG)
xo,yo:real;
color0:TColor;
constructor create(nxo,nyo:real;ncolor:TColor);
procedure encender();virtual;
procedure apagar();virtual;
end;

//clase Segmento

TSegmento = class(TVector)
xf,yf:real;
constructor create(nxo,nyo,nxf,nyf:real);
procedure encender();override;
end;

//clase circunferencia

TCircunferencia = class(TVector)
radio:real;
constructor create(nxo,nyo,nradio:real);
destructor destroy();
procedure encender();override;
end;

//clase Rectangulo

TRectangulo = class (TSegmento)
constructor create(nxo,nyo,nxf,nyf:real);
destructor destroy();
procedure encender();override;
end;

//clase Curva vectorial

TCurvaV = class(TCircunferencia)
private
tipo:word;
constructor create(nxo,nyo,nr:real);
destructor destroy();
procedure encender();override;
end;

//clase Poligono

TPoligono = class(TCircunferencia)
nlados:word;
constructor create(nxo,nyo,nradio:real;nl:word);
destructor destroy();
procedure encender();override;
end;

//clase Curva de ajuste

TCurvaA = class(TCurvaV)
NDatos:word;
Vx,Vy:ArregloR;
constructor create(nNDatos:word);
destructor destroy();
function lagrange(x:real):real;
procedure bezier(t:real;var Bx,By:real);
function spline(x:real):real;
procedure encender();override;
end;

//clase Tapete
TTapete = class(TCurvaV)
constructor create(ntipo:word);
destructor destroy();
procedure encender();override;
procedure encenderpaleta();
end;

//clase Figuras

TFiguras = class(TList)
constructor create();
destructor destroy();
procedure trazar();
end;

//clase fractal

TFractal = class(TSegmento)
Xm,Ym:real;
constructor create(nXo,nYo,nXf,nYf:real);
destructor destroy();
procedure sierpinsky();
end;

TFractal2= class(TCurvaV)
alfa,beta:real;
constructor create(nXo,nYo,nR:real);
destructor destroy;
procedure arbol;
procedure estrella;
end;

TElipse = class(TCircunferencia)
radio2:real;
constructor create(nxo,nyo,nradio,nradio2:real);
procedure encender;
destructor destroy;
end;

const

Sxmin=0; Sxmax=700;
Symin=0; Symax=360;
Xmin=-35; Xmax=35;
Ymin=-18; Ymax=18;
var
frmPrincipal: TfrmPrincipal;
bandera:word;
base:TLibreriaG;
Pxi,Pyi,Pxf,Pyf:real;
IndexA:word;
Ax,Ay:ArregloR;
Paleta0:array[0..9] of integer;
Paleta1:array[0..9] of integer;
LFiguras:TFiguras;

implementation

{$R *.dfm}

procedure TfrmPrincipal.Salir1Click(Sender: TObject);
begin
application.Terminate;
end;

{ TLibreriaG }

constructor TLibreriaG.create;
begin

end;

destructor TLibreriaG.destroy;
begin

end;

procedure TLibreriaG.pantalla(x, y: real; var Sx, Sy: integer);
begin
Sx:= Trunc((((Sxmin-Sxmax)/(Xmin-Xmax))*(X-Xmax)))+Sxmax;
Sy:= Trunc((((Symin-Symax)/(Ymax-Ymin))*(Y-Ymax)))+Symin;
end;

procedure TLibreriaG.real1(Sx, Sy: integer; var x, y: real);
begin
x:= ((((Sx-Sxmax)*(Xmin-Xmax))/(Sxmin-Sxmax)))+Xmax;
y:= ((((Sy-Symin)*(Ymax-Ymin))/(Symin-Symax)))+Ymax;
end;

{ TVector }

procedure TVector.apagar;
begin
color0:=frmPrincipal.Lienzo.Color;
encender();
end;

constructor TVector.create(nxo, nyo: real; ncolor: TColor);
begin
xo:=nxo;
yo:=nyo;
color0:=ncolor;
end;

procedure TVector.encender;
var
sx,sy:integer;
begin
Pantalla(xo,yo,sx,sy);
frmPrincipal.PaintBox1.Canvas.Pixels[sx,sy]:=color0;
end;

procedure TfrmPrincipal.btnVectorClick(Sender: TObject);
var
p:TVector;
begin
p:=TVector.create(-17.5,9,20);
p.color0:=ColorGrid1.ForegroundColor;
p.encender;

end;

{ TSegmento }

constructor TSegmento.create(nxo, nyo, nxf, nyf: real);
begin
xo:=nxo;
yo:=nyo;
xf:=nxf;
yf:=nyf;
end;

procedure TSegmento.encender;
var
v:TVector;
t,dt:real;
begin
v:=TVector.create(0,0,color0);
t:=0;
dt:=0.001;
repeat
v.xo:=xo*(1-t)+xf*(t);
v.yo:=yo*(1-t)+yf*(t);
//v.color0:=RGB(trunc(125*t),trunc(-125*(t-1)),0);
v.encender;
t:=t+dt;
until (t>=1);
v.destroy;
end;

procedure TfrmPrincipal.btnSegmentoClick(Sender: TObject);
var
s:TSegmento;
begin
s:=TSegmento.create(-30,15,20,-15);
s.color0:=ColorGrid1.ForegroundColor;
s.encender;
sleep(3000);
s.apagar;
end;

{ TCircunferencia }

constructor TCircunferencia.create(nxo, nyo, nradio: real);
begin
xo:=nxo;
yo:=nyo;
radio:=nradio;
end;

destructor TCircunferencia.destroy;
begin

end;

procedure TCircunferencia.encender;
var
v:TVector;
t,dt:real;
begin
v:=TVector.create(0,0,color0);
t:=-pi;
dt:=0.001;
repeat
v.xo:=xo+radio*cos(t);
v.yo:=yo+radio*sin(t);
v.encender;
t:=t+dt;
until (t >= pi);
v.destroy;
end;

procedure TfrmPrincipal.btnCircunferenciaClick(Sender: TObject);
var
c:TCircunferencia;
begin
c:=TCircunferencia.create(10,5,8.5);
c.color0:=ColorGrid1.ForegroundColor;
c.encender;
sleep(1000);
c.apagar;
end;

{ TRectangulo }

constructor TRectangulo.create(nxo, nyo, nxf, nyf: real);
begin
xo:=nxo;
yo:=nyo;
xf:=nxf;
yf:=nyf;
end;

destructor TRectangulo.destroy;
begin

end;

procedure TRectangulo.encender;
var
s:TSegmento;
begin
s:=TSegmento.create(0,0,0,0);
s.xo:=xo; s.xf:=xf;
s.yo:=yo; s.yf:=yo;
s.encender;

s.xo:=xf; s.xf:=xf;
s.yo:=yo; s.yf:=yf;
s.encender;

s.xo:=xf; s.xf:=xo;
s.yo:=yf; s.yf:=yf;
s.encender;

s.xo:=xo; s.xf:=xo;
s.yo:=yf; s.yf:=yo;
s.encender;

s.destroy;
end;

procedure TfrmPrincipal.btnRectanguloClick(Sender: TObject);
var
r:TRectangulo;
begin
r:=TRectangulo.create(-30,15,20,-15);
r.color0:=ColorGrid1.ForegroundColor;
r.encender;

end;

procedure TfrmPrincipal.btnSegmentoDinamClick(Sender: TObject);
begin
bandera:=1;
StatusBar1.Panels[2].Text:='Segmentos';
end;

procedure TfrmPrincipal.PaintBox1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var rx,ry:real;
begin
base.real1(X,Y,rx,ry);
StatusBar1.Panels[0].Text:=FloatToStr(rx);
StatusBar1.Panels[1].Text:=FloatToStr(ry);
end;

procedure TfrmPrincipal.PaintBox1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
s:TSegmento;
c:TCircunferencia;
r:TRectangulo;
cv:TCurvaV;
p:TPoligono;
d,d2,i:real;
numlados:word;
e:TElipse;
begin
base.real1(X,Y,Pxf,Pyf);
d:=sqrt(sqr(Pxi-Pxf)+sqr(Pyi-Pyf));
d2:=(Pxi-PXf)+(Pyi-PYf);
case bandera of
1:
begin
s:=TSegmento.create(Pxi,Pyi,Pxf,Pyf);
s.color0:=ColorGrid1.ForegroundColor;
s.encender;
LFiguras.Add(s);
end;
2:
begin
c:=TCircunferencia.create(Pxi,Pyi,d);
c.color0:=ColorGrid1.ForegroundColor;
c.encender;
LFiguras.Add(c);
end;
3:
begin
r:=TRectangulo.create(Pxi,Pyi,Pxf,Pyf);
r.color0:=ColorGrid1.ForegroundColor;
r.encender;
LFiguras.Add(r);
end;
4:
begin
cv:=TCurvaV.create(Pxi,Pyi,d);
cv.tipo:=frmPrincipal.cbxTipo.ItemIndex;
cv.color0:=ColorGrid1.ForegroundColor;
cv.encender;
LFiguras.Add(cv);

end;
5:
begin
numlados:=StrToInt(frmPrincipal.edtNumLados.Text);
p:=TPoligono.create(Pxi,Pyi,d,numlados);
p.color0:=ColorGrid1.ForegroundColor;
p.encender;
LFiguras.Add(p);
end;
6:
begin
e:=TElipse.create(pxi,pyf,Abs(pxf-pxi),abs(pyi-pyf));
e.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
e.encender;
e.destroy;
end;
7:
begin
cv:=TCurvaV.create(Pxi,Pyi,d);
cv.tipo:=2;
cv.color0:=ColorGrid1.ForegroundColor;
cv.encender;
LFiguras.Add(cv);
i:=0;
while i<d do
begin
cv:=TCurvaV.create(Pxi,Pyi,i);
cv.tipo:=2;
cv.color0:=ColorGrid1.ForegroundColor;
cv.encender;
i:=i+0.05;
end;
end;
end;
end;

procedure TfrmPrincipal.PaintBox1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
base.real1(X,Y,Pxi,Pyi);
inc(IndexA);
setLength(Ax,IndexA);
setLength(Ay,IndexA);
Ax[IndexA-1]:=Pxi;
Ay[IndexA-1]:=Pyi;
marca(X,Y);
end;

procedure TfrmPrincipal.FormCreate(Sender: TObject);
var i:integer;
begin
IndexA:=0;
Paleta0[0]:=clBlack;
Paleta0[1]:=clBlue;
Paleta0[2]:=clRed;
Paleta0[3]:=clGreen;
Paleta0[4]:=clYellow;
Paleta0[5]:=clNavy;
Paleta0[6]:=clLime;
Paleta0[7]:=clMaroon;
Paleta0[8]:=clAqua;
Paleta0[9]:=clWhite;
Lfiguras:=TFiguras.create;
for i:=0 to 9 do
Paleta1[i]:=RGB(trunc((255*i)/9),trunc((255*i)/9),255);


end;

procedure TfrmPrincipal.btnCircunferenciaDinamClick(Sender: TObject);
begin
bandera:=2;
StatusBar1.Panels[2].Text:='Circunferencias';
end;

procedure TfrmPrincipal.btnRectanguloDinamClick(Sender: TObject);
begin
bandera:=3;
StatusBar1.Panels[2].Text:='Rectangulos';
end;

{ TCurvaV }

constructor TCurvaV.create(nxo, nyo, nr: real);
begin
xo:=nxo;
yo:=nyo;
radio:=nr;
end;

destructor TCurvaV.destroy;
begin

end;

procedure TCurvaV.encender;
var
v:TVector;
t,dt:real;
begin
v:=TVector.create(0,0,color0);
dt:=0.001;
case tipo of
0:
begin
t:=0;
repeat
v.xo:=xo+radio*(cos(3*t));
v.yo:=yo+radio*(sin(2*t));
v.encender;
t:=t+dt;
until t >= (2*pi);
v.destroy;
end;
1:
begin
t:=0;
repeat
v.xo:=xo+radio*(power(cos(t),3));
v.yo:=yo+radio*(power(sin(t),3));
v.encender;
t:=t+dt;
until t >= (2*pi);
end;
2:
begin
t:=0;
repeat
v.xo:=Xo+radio*(0.7*cos(4*t)*cos(t));
v.yo:=Yo+radio*(0.7*cos(4*t)*sin(t));
v.encender;
t:=t+dt;
until t >= (2*pi);
v.destroy;
end;
3:
begin
t:=0;
repeat
v.xo:=Xo+radio*((6*cos(t)-cos(6*t))/4);
v.yo:=Yo+radio*((6*sin(t)-sin(6*t))/4);
v.encender;
t:=t+dt;
until t > (2*pi);
v.destroy;
end;
end;
end;

procedure TfrmPrincipal.btnCurvaClick(Sender: TObject);
begin
if (cbxTipo.Text='Tipo Curva')then
Application.MessageBox('Seleccione el tipo de curva','Error',0)
else
StatusBar1.Panels[2].Text:='Curvas';
bandera:=4;
end;

{ TPoligono }

constructor TPoligono.create(nxo, nyo, nradio: real; nl: word);
begin
xo:=nxo;
yo:=nyo;
radio:=nradio;
nlados:=nl;
end;

destructor TPoligono.destroy;
begin

end;

procedure TPoligono.encender;
var
s:TSegmento;
alfa,beta:real;
begin
s:=TSegmento.create(0,0,0,0);
alfa:=2*pi/nlados;
beta:=pi/2;
repeat
s.xo:=xo+radio*cos(beta);
s.yo:=yo+radio*sin(beta);
s.xf:=xo+radio*cos(beta+alfa);
s.yf:=yo+radio*sin(beta+alfa);
// s.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
s.encender;
beta:=beta+alfa;
until beta >= ((5*pi)/2);
s.destroy;
end;

procedure TfrmPrincipal.btnPoligonoClick(Sender: TObject);
begin
if( edtNumLados.Text = '') then
Application.MessageBox('Ingrese el numero de lados','Error',0)
else
StatusBar1.Panels[2].Text:='Poligonos';
bandera:=5;
end;

{ TCurvaA }

procedure TCurvaA.bezier(t: real; var Bx, By: real);
var
Sx,Sy:real;
i:integer;

function fact(n:integer):longint;
begin
if ((n=0)or(n=1))then
fact:=1
else
fact:=fact(n-1)*n;
end;
begin
Sx:=0;Sy:=0;
for i:=0 to NDatos do
begin
Sx:=Sx+(Vx[i]*(fact(NDatos)/(fact(i)*fact(NDatos-i)))*Power(t,i)*Power(1-t,NDatos-i));
Sy:=Sy+(Vy[i]*(fact(NDatos)/(fact(i)*fact(NDatos-i)))*Power(t,i)*Power(1-t,NDatos-i));
end;
Bx:=Sx;
By:=Sy;
end;

constructor TCurvaA.create(nNDatos: word);
begin
NDatos:=nNDatos;
end;

destructor TCurvaA.destroy;
begin

end;

procedure TCurvaA.encender;
var
v:TVector;
s:TSegmento;
t,dt,wx,wy:real;
begin
v:=TVector.create(0,0,color0);
case tipo of
0:
begin
s:=TSegmento.create(0,0,0,0);
end;
1: //lagrange
begin
t:=Vx[0];
dt:=0.001;
repeat
v.xo:=t;
v.yo:=lagrange(t);
v.encender;
t:=t+dt;
until t >= Vx[NDatos];
v.destroy;
end;
2:
begin
t:=0;
dt:=0.001;
repeat
bezier(t,wx,wy);
v.xo:=wx;
v.yo:=wy;
v.encender;
t:=t+dt;
until t>=1;
v.destroy;
end;
end;
end;

function TCurvaA.lagrange(x: real): real;
var
s,p:real;
i,j:word;
begin
s:=0;
for i:=0 to NDatos do
begin
p:=1;
for j:=0 to NDatos do
begin
if (Vx[i]<>Vx[j]) then
p:=p*((x-Vx[j])/(Vx[i]-Vx[j]));
end;
s:=s+Vy[i]*p;
end;
lagrange:=s;
end;

function TCurvaA.spline(x: real): real;
begin

end;

procedure TfrmPrincipal.btnCurvaAjusteClick(Sender: TObject);
var
s:TSegmento;
i:word;
begin
s:=TSegmento.create(Pxi,Pyi,Pxf,Pyf);
for i:=0 to IndexA-2 do
begin
s.xo:=Ax[i];
s.yo:=Ay[i];
s.xf:=Ax[i+1];
s.yf:=Ay[i+1];
s.color0:=ColorGrid1.ForegroundColor;
s.encender;
LFiguras.Add(s);
end;
end;

procedure TfrmPrincipal.btnLimpiarClick(Sender: TObject);
begin
LFiguras.Clear;
PaintBox1.Repaint;
IndexA:=0;

end;

procedure TfrmPrincipal.marca(sx, sy: integer);
begin
frmPrincipal.PaintBox1.Canvas.Pixels[sx,sy]:=clblue;
frmPrincipal.PaintBox1.Canvas.Pixels[sx+1,sy]:=clblue;
frmPrincipal.PaintBox1.Canvas.Pixels[sx-1,sy]:=clblue;
frmPrincipal.PaintBox1.Canvas.Pixels[sx,sy+1]:=clblue;
frmPrincipal.PaintBox1.Canvas.Pixels[sx,sy-1]:=clblue;
end;

procedure TfrmPrincipal.btnCurvaBezierClick(Sender: TObject);
var
cb:TCurvaA;
begin
cb:=TCurvaA.create(IndexA-1);
cb.Vx:=Ax;
cb.Vy:=Ay;
cb.tipo:=2;
cb.color0:=ColorGrid1.ForegroundColor;
cb.encender;
LFiguras.Add(cb);

end;

{ TTapete }

constructor TTapete.create(ntipo: word);
begin
tipo:=ntipo;
end;

destructor TTapete.destroy;
begin

end;

procedure TTapete.encender;
var
i,j:integer;
aux:real;
begin
begin
case tipo of
0:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=((i*i)*(j*j)) mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
1:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(sin(i))*9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
2:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=((i*i*i)*(j*j*j)) mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
3:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(cos(i)+cos(j)) ;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
4:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(tan(i)+tan(j));
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
5:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(sin(i)*sin(j))*9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
6:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc(PI*i*sqrt(j))mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;

end;
7:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i*25)* tan (j*PI*PI))mod 30;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
8:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc(sqrt((378*i)/9))mod 30 + (sqrt((7580*j)/30)+trunc(pi*i*sqrt(j))mod 30);
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
9:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i*25)*tan(j*pi*pi))mod 30;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
10:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i+j)/10)mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;

end;
end;

end;


procedure TTapete.encenderpaleta;
var
i,j:integer;
aux:real;
begin
begin
case tipo of
0:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=((i*i)*(j*j)) mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
1:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(sin(i))*9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
2:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=((i*i*i)*(j*j*j)) mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
3:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(cos(i)+cos(j)) ;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
4:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(tan(i)+tan(j));
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
5:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(sin(i)*sin(j))*9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
6:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc(PI*i*sqrt(j))mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;

end;
7:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i*25)* tan (j*PI*PI))mod 30;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
8:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc(sqrt((378*i)/9))mod 30 + (sqrt((7580*j)/30)+trunc(pi*i*sqrt(j))mod 30);
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
9:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i*25)*tan(j*pi*pi))mod 30;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
10:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i+j)/10)mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
end;
end;

end;

procedure TfrmPrincipal.btnTapeteClick(Sender: TObject);
var
t,tp:TTapete;
tipo:word;
begin
if(cbxTipoPaleta.Text = 'Tipo Paleta')and (cbxTipoTapete.Text='Tipo Tapete')then
Application.MessageBox('Seleccione el tipo de paleta','Error',0)
else
begin
if (cbxTipoPaleta.Text='Paleta 0')then
if (cbxTipoTapete.Text <> 'Tipo Tapete') then
begin
tipo:=cbxTipoTapete.ItemIndex;
t:=TTapete.create(tipo);
t.encender;
LFiguras.Add(t);
end
else
Application.MessageBox('Seleccione el tipo de tapete','Error',0)
else
if(cbxTipoPaleta.Text='Paleta 1')then
if (cbxTipoTapete.Text <> 'Tipo Tapete') then
begin
tipo:=cbxTipoTapete.ItemIndex;
tp:=TTapete.create(tipo);
tp.encenderPaleta;
LFiguras.Add(tp);
end
else
Application.MessageBox('Seleccione el tipo de tapete','Error',0)
end;





end;

procedure TfrmPrincipal.btnCurvaLagrangeClick(Sender: TObject);
var
cl:TCurvaA;
begin
cl:=TCurvaA.create(IndexA-1);
cl.Vx:=Ax;
cl.Vy:=Ay;
cl.tipo:=1;
cl.color0:=ColorGrid1.ForegroundColor;
cl.encender;
LFiguras.Add(cl);
end;

procedure TfrmPrincipal.btnSalirClick(Sender: TObject);
begin
application.Terminate;
end;

procedure TfrmPrincipal.btnBanderaClick(Sender: TObject);
var
i,j:integer;
begin
for i:=0 to 700 do
begin
for j:=0 to 120 do
PaintBox1.Canvas.Pixels[i,j] :=RGB(0,125,0) ;
for j:=120 to 240 do
PaintBox1.Canvas.Pixels[i,j] := RGB(255,255,255);
for j:=240 to 360 do
PaintBox1.Canvas.Pixels[i,j] := RGB(62,124,230);
end;
end;
procedure TfrmPrincipal.btnBanderaDegradadaClick(Sender: TObject);
var
i,j:integer;
begin
for i:=0 to 700 do
begin
for j:=0 to 180 do
begin
PaintBox1.Canvas.Pixels[i,j] := RGB(Trunc(1.417*(j)), trunc(-0.69*(j-180)+1.417*(j)), Trunc(1.417*(j) ));
end;
for j:=180 to 360 do
begin
PaintBox1.Canvas.Pixels[i,j] := RGB(Trunc(-1.417*(j-360)+0.344*(j-180)),trunc(-1.417*(j-360)+0.68*(j-180)), Trunc(-1.417*(j-360)+1.27*(j-180)) );
end;
end;
end;

{ TFiguras }

constructor TFiguras.create;
begin

end;

destructor TFiguras.destroy;
begin

end;

procedure TFiguras.trazar;
var
i:integer;
begin
for i:=0 to Count-1 do //count es atributo de la clase TList
TVector(Items[i]).encender;
end;


//evento q se ejecuta automaticamente cuando el paintbox aparece
procedure TfrmPrincipal.PaintBox1Paint(Sender: TObject);
begin
LFiguras.trazar();

end;

procedure TfrmPrincipal.btnPaletaClick(Sender: TObject);
var
tp:TTapete;
tipo:word;
begin
if (cbxTipoPaleta.Text='Tipo Paleta')then
Application.MessageBox('Seleccione un tipo de Tapete','Error',0)
else
begin
bandera:=8;
tipo:=cbxTipoPaleta.ItemIndex;
tp:=TTapete.create(tipo);
tp.encenderpaleta;
LFiguras.Add(tp);
end;

end;


{ TFractal }

constructor TFractal.create(nXo, nYo, nXf, nYf: real);
begin
Xo:=nXo;
Yo:=nYo;
Xf:=nXf;
Yf:=nYf;
end;

destructor TFractal.destroy;
begin

end;

procedure TFractal.sierpinsky;
var
s:TSegmento;
Tx,Ty,Mx,My,Rx,Ry,aux,pTx,pTy,pMx,pMy,pRx,pRy,pXo,pYo,pXf,pYf,PXm,PYm:real;
begin
s:=TSegmento.create(0,0,0,0);
aux:=abs(Xo-Xf)+abs(Yo-Yf);
if ( aux > 1.5 ) then
begin

Tx:=(Xo+Xm)/2;
Ty:=(Yo+Ym)/2;
Mx:=(Xo+Xf)/2;
My:=(Yo+Yf)/2;
Rx:=(Xm+Xf)/2;
Ry:=(Ym+Yf)/2;

pTx:=Tx;
pTy:=Ty;
pMx:=Mx;
pMy:=My;
pRx:=Rx;
pRy:=Ry;
pXo:=Xo;
pYo:=Yo;
pXf:=Xf;
pYf:=Yf;
pXm:=Xm;
pYm:=Ym;

s.xo:=Tx;
s.yo:=Ty;
s.xf:=Mx;
s.yf:=My;
s.encender;
s.xo:=Rx;
s.yo:=Ry;
s.encender;
s.xf:=Tx;
s.yf:=Ty;
s.encender;
Xo:=pMx;
Yo:=pMy;
Xm:=Rx;
Ym:=Ry;
sierpinsky;
Xo:=pTx;
Yo:=pTy;
Xf:=pRx;
Yf:=pRy;
Xm:=pXm;
Ym:=pYm;
sierpinsky;

Xo:=pXo;
Yo:=pYo;
Xm:=pTx;
Ym:=pTy;
Xf:=pXm;
Yf:=pYm;
sierpinsky;

Xo:=pXo;
Yo:=pYo;
Xf:=pMx;
Yf:=pMy;
Xm:=pTx;
Ym:=pTy;
sierpinsky;


end;


end;

procedure TfrmPrincipal.btnFractalClick(Sender: TObject);
var
s:TSegmento;
sk:TFractal;
begin
s:=TSegmento.create(-15,-10,15,-10);
s.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
s.encender;
s.xo:=0;
s.yo:=15;
s.encender;
s.xf:=-15;
s.yf:=-10;
s.encender;
sk:=TFractal.create(0,15,15,-10);
sk.Xm:=-15;
sk.Ym:=-10;
sk.sierpinsky;
s.destroy;
LFiguras.trazar;

end;

{ TFractal2 }

procedure TFractal2.arbol;
var
s:TSegmento;
Fradio,Falfa:real;fXf,fYf:real;
begin
s:=TSegmento.create(Xo,Yo,1,1);
Falfa:=alfa;
Fradio:=radio;
if (radio > 0.1 ) then
begin
s.color0:=RGB(trunc(-32.27*(radio-8)),255,trunc(-32.27*(radio-8)));
s.xf:=Xo+radio*cos(alfa);
s.yf:=Yo+radio*sin(alfa);
s.encender;

fXf:=s.xf;
fYf:=s.yf;
Xo:=s.xf;
Yo:=s.yf;

alfa:=Falfa-beta;
radio:=Fradio*0.5;
arbol;
Xo:=s.xf;
Yo:=s.yf;
alfa:=Falfa;
radio:=Fradio*0.6;
arbol;
Xo:=fXf;
Yo:=fYf;
alfa:=Falfa+beta;
radio:=Fradio*0.5;
arbol;
end;
end;

procedure TFractal2.estrella;
var
s:TSegmento;
begin
s:=TSegmento.create(Xo,Yo,1,1);
s.color0:=color0;
if ( alfa <= 2*pi ) then
begin
s.xf:=Xo+radio*cos(alfa);
s.yf:=Yo+radio*sin(alfa);
s.encender;
alfa:=alfa+beta;
estrella;
end;
end;

constructor TFractal2.create(nXo, nYo, nR: real);
begin
Xo:=nXo;
Yo:=nYo;
radio:=nR;

end;

destructor TFractal2.destroy;
begin

end;

procedure TfrmPrincipal.btnArbolClick(Sender: TObject);
var
fract:TFractal2;
begin
fract:=TFractal2.create(-10,-15,8);
fract.alfa:=pi/2;
fract.beta:=pi/8;
fract.arbol;
LFiguras.trazar;


end;

procedure TfrmPrincipal.mnuVectorClick(Sender: TObject);
var
p:TVector;
begin
p:=TVector.create(-17.5,9,20);
p.color0:=ColorGrid1.ForegroundColor;
p.encender;
end;

procedure TfrmPrincipal.mnuSegmentoClick(Sender: TObject);
var
s:TSegmento;
begin
s:=TSegmento.create(-30,15,20,-15);
s.color0:=ColorGrid1.ForegroundColor;
s.encender;
sleep(3000);
s.apagar;
end;

procedure TfrmPrincipal.mnuCircunferenciaClick(Sender: TObject);
var
c:TCircunferencia;
begin
c:=TCircunferencia.create(10,5,8.5);
c.color0:=ColorGrid1.ForegroundColor;
c.encender;
sleep(1000);
c.apagar;
end;

procedure TfrmPrincipal.mnuRectanguloClick(Sender: TObject);
var
r:TRectangulo;
begin
r:=TRectangulo.create(-30,15,20,-15);
r.color0:=ColorGrid1.ForegroundColor;
r.encender;
end;

procedure TfrmPrincipal.Arbol1Click(Sender: TObject);
var
fract:TFractal2;
begin
fract:=TFractal2.create(-3,-15,10);
fract.alfa:=pi/2;
fract.beta:=pi/8;
fract.arbol;
LFiguras.trazar;

fract:=TFractal2.create(-22,-15,8);
fract.alfa:=pi/2;
fract.beta:=(5*pi)/10;
fract.arbol;
LFiguras.trazar;

fract:=TFractal2.create(-13,1.5,7);
fract.alfa:=2*pi/3;
fract.beta:=pi/4;
fract.arbol;
LFiguras.trazar;

fract:=TFractal2.create(10,-15,12);
fract.alfa:=pi/2;
fract.beta:=(5*pi)/4;
fract.arbol;
LFiguras.trazar;

fract:=TFractal2.create(25,-3,8);
fract.alfa:=pi/2;
fract.beta:=(7*pi)/5;
fract.arbol;

LFiguras.trazar;


end;

procedure TfrmPrincipal.Estrella1Click(Sender: TObject);
var
fr:TFractal2;
begin
fr:=TFRactal2.create(15,16,0.6);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1.4);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);

fr:=TFRactal2.create(15,16,1.4);
fr.color0:=clblack;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr.destroy;

end;

procedure TfrmPrincipal.mnuTrianguloClick(Sender: TObject);
var
s:TSegmento;
sk:TFractal;
begin
s:=TSegmento.create(-15,-10,15,-10);
s.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
s.encender;
s.xo:=0;
s.yo:=15;
s.encender;
s.xf:=-15;
s.yf:=-10;
s.encender;
sk:=TFractal.create(0,15,15,-10);
sk.Xm:=-15;
sk.Ym:=-10;
sk.sierpinsky;
s.destroy;
LFiguras.trazar;

end;

procedure TfrmPrincipal.mnuArbolClick(Sender: TObject);
var
fract:TFractal2;
begin
fract:=TFractal2.create(-3,-15,10);
fract.alfa:=pi/2;
fract.beta:=pi/8;
fract.arbol;
LFiguras.trazar;

fract:=TFractal2.create(-22,-15,8);
fract.alfa:=pi/2;
fract.beta:=(5*pi)/10;
fract.arbol;
LFiguras.trazar;

fract:=TFractal2.create(-13,1.5,7);
fract.alfa:=pi/2;
fract.beta:=pi/4;
fract.arbol;
LFiguras.trazar;

fract:=TFractal2.create(10,-15,12);
fract.alfa:=pi/2;
fract.beta:=(5*pi)/4;
fract.arbol;
LFiguras.trazar;

fract:=TFractal2.create(25,-3,8);
fract.alfa:=pi/2;
fract.beta:=(7*pi)/5;
fract.arbol;

LFiguras.trazar;

end;

procedure TfrmPrincipal.mnuEstrellaClick(Sender: TObject);
var
fr:TFractal2;
i:integer;
begin
i:=0;
while(i<5)do
begin
fr:=TFRactal2.create(15,16,0.6);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1.4);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);

fr:=TFRactal2.create(-26,5,0.6);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-26,5,1);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-26,5,1.4);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);


fr:=TFRactal2.create(10,16,0.6);
fr.color0:=clGreen;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(10,16,1);
fr.color0:=clGreen;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(10,16,1.4);
fr.color0:=clGreen;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);


fr:=TFRactal2.create(-10,7,0.6);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-10,7,1);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-10,7,1.4);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);

fr:=TFRactal2.create(-25,16,0.6);
fr.color0:=clRed;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-25,16,1);
fr.color0:=clRed;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-25,16,1.4);
fr.color0:=clRed;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);


fr:=TFRactal2.create(28,16,0.6);
fr.color0:=clBlue;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(28,16,1);
fr.color0:=clBlue;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(28,16,1.4);
fr.color0:=clBlue;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);


//apagado

fr:=TFRactal2.create(15,16,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;

fr:=TFRactal2.create(-26,5,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);

fr:=TFRactal2.create(10,16,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);

fr:=TFRactal2.create(-10,7,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);

fr:=TFRactal2.create(-25,16,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);

fr:=TFRactal2.create(28,16,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
i:=i+1;
end;
fr.destroy;
end;

procedure TfrmPrincipal.ColorGrid1Click(Sender: TObject);
begin
frmPrincipal.Lienzo.Color:=frmPrincipal.clgColorFondo.ForegroundColor;
GbxColorFondo.Visible:=false;
clgColorFondo.Visible:=False;
end;

procedure TfrmPrincipal.Fondo1Click(Sender: TObject);
begin
frmPrincipal.clgColorFondo.Visible:=true;
frmPrincipal.gbxColorFondo.Visible:=true;

end;

procedure TfrmPrincipal.mnuCuboClick(Sender: TObject);
var t:TSegmento;
i:integer;
Px,Py:real;
begin
t:=TSegmento.create(0,0,0,0);
t.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
if (IndexA=4) then
begin
Px:=Ax[0];
Py:=Ay[0];
for i:=1 to 3 do
begin
t.xo:=Pxi;
t.yo:=Pyi;
t.xf:=Ax[i];
t.yf:=Ay[i];
t.encender;
Px:=Ax[i];
Py:=Ay[i];
end;
t.xo:=Ax[0];
t.yo:=Ay[0];
t.xf:=Ax[3];
t.yf:=Ay[3];
IndexA:=0;
t.encender;
end;
t.destroy;

end;

procedure TfrmPrincipal.mnuRelojClick(Sender: TObject);
var
t,dt:real;
s:TSegmento;
c:TCircunferencia;
begin
t:=0;
dt:=0.1;
s:=TSegmento.create(0,0,1,1);
c:=TCircunferencia.create(0,0,1);
c.xo:=0;
c.yo:=0;
c.radio:=6;
c.color0:=clblue;
c.encender;
repeat
s.xo:=0;
s.yo:=0;
s.xf:=5*sin(t);
s.yf:=5*cos(t);
s.color0:=clred;
s.encender;
sleep(1000);
t:=t+dt;
s.apagar;
s.encender;
until t>2*pi;
s.destroy;
end;

{ TElipse }

constructor TElipse.create(nxo, nyo, nradio, nradio2: real);
begin
Xo:=nxo;
Yo:=nyo;
radio:=nradio;
radio2:=nradio2;
end;

destructor TElipse.destroy;
begin

end;

procedure TElipse.encender;
var
v:TVector;
t,dt:real;
begin
v:=TVector.create(0,0,1);
t:=0;
dt:=0.001;
repeat
v.xo:=Xo+radio*cos(t);
v.yo:=Yo+radio2*sin(t);
v.encender;
t:=t+dt;
until t >= 2*pi;
v.destroy;
end;

procedure TfrmPrincipal.btnElipseDinClick(Sender: TObject);
begin
bandera:=6;
StatusBar1.Panels[2].Text:='Elipse';

end;

procedure TfrmPrincipal.mnuElipseClick(Sender: TObject);
var
e:TElipse;
begin
e:=TElipse.create(10,5,8,5);
e.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
e.encender;
e.destroy;
end;

procedure TfrmPrincipal.btnCurvaRellenoClick(Sender: TObject);
begin
bandera:=7;

end;

procedure TfrmPrincipal.btnSegmentoDegradadoClick(Sender: TObject);
var
s:TSegmento;
begin


end;

end.