Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pasar de un Stringgrid a Shape (https://www.clubdelphi.com/foros/showthread.php?t=72408)

teto89 17-02-2011 02:50:38

Pasar de un Stringgrid a Shape
 
hola, hice mi programa en delphi 7 con un stringgrid pero quiero utilizar un Shape, que diferencias hay entre uno y el otro? que debo cambiar del codigo?

dejo parte de codigo, espero puedan orientarme un poco. gracias

Código:

form1.StringGrid1.Visible:=true;

//por ahi despues pongo el visible al final
form1.stringGrid1.Cells[1,0]:='Inicio';
form1.stringGrid1.cells[2,0]:='Fin';
form1.stringGrid1.Cells[3,0]:='fi';
form1.stringGrid1.Cells[4,0]:='frel';
form1.stringGrid1.cells[5,0]:='facum';
form1.stringGrid1.Cells[6,0]:='Xi';
form1.stringGrid1.cells[7,0]:='(Xi*Fi)';
form1.stringGrid1.Cells[8,0]:='(Xi-X)';
form1.stringGrid1.Cells[9,0]:='((Xi-X)*Fi';
form1.stringgrid1.Cells[10,0]:='((Xi-X)²';
form1.stringGrid1.Cells[11,0]:='((Xi-X)²*Fi';

//pongo en 0 todos los valores de los intervalos
for i:=1 to form1.stringGrid1.RowCount do
begin
form1.stringGrid1.Cells[1,i]:=inttostr(0);
form1.stringGrid1.Cells[2,i]:=inttostr(0);
end;

//stringGrid1.Cells[0,i]:=inttostr(0);
//cargo los valores correspondientes a la primer fila
form1.stringGrid1.Cells[1,1]:=inttostr(strtoint(form1.edit3.Text));
form1.stringGrid1.Cells[2,1]:=inttostr(strtoint(form1.stringGrid1.Cells[1,1])+ strtoint(form1.edit6.Text)-1);

//inicializa en 0 el campo correspondiente a la frecuencia absoluta
for i:=1 to form1.stringGrid1.RowCount -1 do
begin
form1.stringGrid1.Cells[3,i]:=inttostr(0);
end;

//dimensiono el arraycito
setlength(vectorcito,form6.listbox1.Items.Count);


//inicializo a 0 y despues cargo un vector con los datos correspondientes al listbox1
for i:=0 to form6.listbox1.Count -1 do
begin
vectorcito[i]:=0;
vectorcito[i]:=strtoint(form6.listbox1.Items[i]);
end;

//es un ciclo con 2 if anidados, lo que pretendemos aca es verificar que los datos del listbox(ahora en un vector) esten en el intervalo definido,
//y contar las coincidencias, que finalmente seran las frecuencias absolutas

for i:=0 to form6.listbox1.Count -1 do
begin
if vectorcito[i] >= strtoint(form1.stringGrid1.cells[1,1]) then
    if vectorcito[i] <= strtoint(form1.stringGrid1.cells[2,1]) then
      form1.stringGrid1.Cells[3,1]:=inttostr(strtoint(form1.stringGrid1.cells[3,1])+1);
end;

//pongo en 0 todas las celdas correspondientes a la frecuencia relativa
for i:=1 to form1.stringGrid1.RowCount -1 do
begin
form1.stringGrid1.Cells[4,i]:=inttostr(0);
end;

//calculo las frecuencias relativas
for i:=1 to form1.stringGrid1.RowCount -1 do
begin
form1.stringGrid1.Cells[4,i]:=floattostr(strtoint(form1.stringGrid1.Cells[3,i])/strtoint(form1.edit1.Text));
end;

//inicializa en 0 el campo correspondiente a la frecuencia acumulada
for i:=1 to form1.stringGrid1.RowCount -1 do
begin
form1.stringGrid1.Cells[5,i]:=inttostr(0);
end;

//calcula la frecuencia acumulada
for i:=1 to form1.stringGrid1.RowCount  -1 do
begin
form1.stringGrid1.Cells[5,i]:=inttostr(strtoint(form1.stringGrid1.Cells[5,i])+strtoint(form1.stringGrid1.Cells[3,i]));
end;

//inicializa en 0 el campo correspondiente a punto medio o Xi
for i:=1 to form1.stringGrid1.RowCount -1 do
begin
form1.stringGrid1.Cells[6,i]:=inttostr(0);
end;

//calcula el punto medio o Xi
for i:=1 to form1.stringGrid1.RowCount -1  do
begin
form1.stringGrid1.Cells[6,i]:=floattostr((strtoint(form1.stringGrid1.Cells[1,i])+strtoint(form1.stringGrid1.Cells[2,i]))/2);
end;

//inicializa en 0 el campo el intervalo de inicio
for i:=2 to form1.stringGrid1.RowCount  do
begin
form1.stringGrid1.Cells[1,i]:=inttostr(0);
form1.stringGrid1.Cells[2,i]:=inttostr(0);
end;

//calcula los intervalos inicio del resto de las filas
for i:=2 to form1.stringGrid1.RowCount  do
begin
form1.stringGrid1.Cells[1,i]:=inttostr(strtoint(form1.stringGrid1.Cells[1,i-1])+strtoint(form1.edit6.Text));
end;

//calculo de los intervalos fin del resto de las filas
for i:=2 to form1.stringGrid1.RowCount  do
begin
form1.stringGrid1.Cells[2,i]:=inttostr(strtoint(form1.stringGrid1.Cells[1,i])+strtoint(form1.edit6.Text)-1);
end;

//calculo de la frecuencia absoluta
for i:=0 to form6.listbox1.Count -1 do
begin
vectorcito[i]:=0;
vectorcito[i]:=strtoint(form6.listbox1.Items[i]);
end;

//inicializa en 0 el campo correspondiente a la frecuencia absoluta
for i:=2 to form1.stringGrid1.RowCount  do
begin
form1.stringGrid1.Cells[3,i]:=inttostr(0);
end;
//es un ciclo con 2 if anidados, lo que pretendemos aca es verificar que los datos del listbox(ahora en un vector) esten en el intervalo definido,
//y contar las coincidencias, que finalmente seran las frecuencias absolutas

for i:=2 to form1.stringGrid1.RowCount  do
begin
  for j:=0 to form6.listbox1.Count -1 do
    begin
      if vectorcito[j] >= strtoint(form1.stringGrid1.cells[1,i]) then
        if vectorcito[j] <= strtoint(form1.stringGrid1.cells[2,i]) then
          form1.stringGrid1.Cells[3,i]:=inttostr(strtoint(form1.stringGrid1.Cells[3,i])+1);
    end;
end;

//calculo de la frecuencia relativa
for i:=2 to form1.stringGrid1.RowCount  do
begin
form1.stringGrid1.Cells[4,i]:=floattostr(strtoint(form1.stringGrid1.Cells[3,i])/strtoint(form1.edit1.Text));
end;

//calculo de la frecuencia acumulada

for i:=2 to form1.stringGrid1.RowCount do
begin
form1.stringGrid1.Cells[5,i]:=inttostr(0);
end;

for i:=2 to form1.stringGrid1.RowCount  do
begin
form1.stringGrid1.Cells[5,i]:=inttostr(strtoint(form1.stringGrid1.Cells[5,i-1])+strtoint(form1.stringGrid1.Cells[3,i]));
end;

//calculo de los puntos medios o xi´s
for i:=2 to form1.stringGrid1.RowCount do
begin
form1.stringGrid1.Cells[6,i]:=floattostr((strtofloat(form1.stringGrid1.Cells[1,i])+strtofloat(form1.stringGrid1.Cells[2,i]))/2);
end;

//calculo de xi * fi
for i:=1 to form1.stringGrid1.RowCount do
begin
form1.stringGrid1.Cells[7,i]:=inttostr(0);
form1.stringGrid1.Cells[7,i]:=floattostr((strtofloat(form1.stringGrid1.Cells[6,i])*strtofloat(form1.stringGrid1.Cells[3,i])));
end;

//calculo de la media aritmetica
acumulador:=0;
for i:=1 to form1.stringGrid1.RowCount -1 do
begin
acumulador:=acumulador+strtofloat(form1.stringGrid1.Cells[7,i]);
end;
form1.edit7.Text:=floattostr((acumulador)/(strtofloat(form1.edit1.Text)));

//calculo del desvio medio
acumulador:=0;
for i:=1 to form1.stringGrid1.RowCount do
begin
form1.stringgrid1.cells[8,i]:=floattostr(abs((strtofloat(form1.stringGrid1.cells[6,i])-strtofloat(form1.edit7.text))));
form1.stringgrid1.cells[9,i]:=floattostr(abs((strtofloat(form1.stringGrid1.cells[8,i])*strtofloat(form1.stringGrid1.cells[3,i]))));
acumulador:=acumulador+strtofloat(form1.stringGrid1.Cells[9,i]);
end;
form1.edit12.Text:=floattostr(acumulador / strtofloat(form1.edit1.Text));

//calculo del desvio standar
acumulador:=0;
for i:=1 to form1.stringGrid1.RowCount do
begin
form1.stringGrid1.cells[10,i]:=inttostr(0);
form1.stringGrid1.cells[11,i]:=inttostr(0);
end;

for i:=1 to form1.stringGrid1.RowCount do
begin
form1.stringGrid1.cells[10,i]:=floattostr(power(strtofloat(form1.stringGrid1.Cells[8,i]),2));
form1.stringGrid1.Cells[11,i]:=floattostr(strtofloat(form1.stringGrid1.cells[10,i])*strtofloat(form1.stringgrid1.cells[3,i]));
acumulador:=acumulador+strtofloat(form1.stringGrid1.Cells[11,i]);
end;
form1.edit11.Text:=floattostr(power(acumulador/strtofloat(form1.edit1.text),1/2));

//CALCULO VARIANZA
//Potencia := Exp(Exponente * Ln(Base));
form1.edit13.text:=floattostr(power(strtofloat(form1.edit11.text),2));


//calculo de la mediana
val_intervalo:=0;
frec_acum_menor:=0;
frec_acum_mayor:=0;
x:=0;
orden_mediana:=((strtofloat(form1.edit1.Text)+1)/2);
form1.edit10.Text:=floattostr(orden_mediana);
val_intervalo:=strtofloat(form1.edit6.Text);
intervalo_mayor:=0;

//busqueda de frecuencias mayores y menores
//copio todo en un vector
//dimensiono el array
tamanio:=form1.stringGrid1.RowCount;
setlength(vec_frec_acumulada,tamanio);

for i:=1 to form1.stringGrid1.RowCount  do
begin
vec_frec_acumulada[i]:=0;
end;

for i:=1 to form1.stringGrid1.RowCount  do
begin
vec_frec_acumulada[i]:=strtoint(form1.stringGrid1.cells[5,i]);
end;

for i:=1 to form1.stringGrid1.RowCount -1 do
begin
if vec_frec_acumulada[i] >= orden_mediana then
begin
frec_acum_mayor:=vec_frec_acumulada[i];
frec_acum_menor:=vec_frec_acumulada[i-1];

break;
end
end;

//busco el intervalo mayor en el cuadro
for i:=1 to form1.stringGrid1.RowCount do
begin
if frec_acum_mayor=strtoint(form1.stringGrid1.Cells[5,i]) then
begin
intervalo_mayor:=strtoint(form1.stringGrid1.Cells[1,i]);
break;
end
end;

if((frec_acum_mayor-frec_acum_menor)>0) then
begin
x:=((val_intervalo/(frec_acum_mayor-frec_acum_menor))*(orden_mediana-frec_acum_menor));
mediana:=x+intervalo_mayor;
end
else
begin
//showmessage('Los valores Ingresados son muy dispares por lo que no se puede calcular la mediana');
muestra:=form6.listbox1.Items.Count;
muestra_dividido_dos:=muestra div 2;
//showmessage(inttostr(muestra_dividido_dos));
form6.listbox1.Sorted:=true;
mediana:=strtoint(form6.listbox1.Items.Strings[muestra_dividido_dos]);
end;
form1.edit9.Text := floattostr(round(mediana));



//------------------//
//CALCULO DE LA MODA//
//------------------//

{frecmay:=strtoint(form1.stringgrid1.Cells[2,1]);
for f:=1 to strtoint(form1.edit3.text) do
if frecmay<=strtoint(form1.stringgrid1.Cells[2,f]) then
begin
frecmay:=strtoint(form1.stringgrid1.Cells[2,f]);
intermay:=strtoint(form1.stringgrid1.Cells[0,f]);
//ff:=0;
ff:=f;
end;

if ff<>1 then
interpolar3:=strtoint(form1.stringgrid1.Cells[3,ff])/(strtoint(form1.stringgrid1.Cells[3,ff])+strtoint(form1.stringgrid1.Cells[3,ff-1]))
else
interpolar3:=strtoint(form1.stringgrid1.Cells[3,ff])/(strtoint(form1.stringgrid1.Cells[3,ff]));
interpolar4:=interpolar3*strtoint(form1.edit2.text);

//edit8 =resultado de la moda
form1.edit8.text:=formatfloat('0.00',intermay+interpolar4);

//Guardo:=False;
end
else
begin
application.MessageBox('Casillero Intervalos o Números por intervalo, vacio','Error', mb_iconerror);

end;  }

form6.ListBox1.Sorted:=true;
flag:=false;
i:=0;
    while not(flag) do begin
        val:=form6.ListBox1.Items[i];
        inc(i);
        j:=1;

while (i<form6.ListBox1.Items.Count) and (val = form6.ListBox1.Items[i]) do begin
inc(i);
inc(j);
end;

flag := i=form6.ListBox1.Items.Count;

if length(moda)>0 then begin
if moda[0,2]=j then begin
SetLength(moda, length(moda)+1);
moda[length(moda)-1,1]:=strtoint(val);
moda[length(moda)-1,2]:=j;
end
else
if moda[0,2]<j then begin
SetLength(moda, 1);
moda[length(moda)-1,1]:=strtoint(val);
moda[length(moda)-1,2]:=j;
end;
end
else
begin
SetLength(moda, length(moda)+1);
moda[length(moda)-1,1]:=strtoint(val);
moda[length(moda)-1,2]:=j;
end;
end;
val:='';
for i:=0 to length(moda)-1 do
val:= val + inttostr(moda[i,1])+', ';

//ShowMessage('Moda: '+val+' con '+inttostr(moda[0,2])+' incidencias');
//edit8.text:='Moda: '+val+' con '+inttostr(moda[0,2])+' repeticiones';
form1.edit8.text:=val;
form1.label15.Caption :=' Con '+inttostr(moda[0,2])+' repeticiones';

for i:=1 to form1.stringGrid1.RowCount -1 do
begin
if strtoint(form1.stringGrid1.Cells[3,i])=0 then
  begin
  showmessage('Existen frecuencias absolutas iguales a 0, esto puede deberse a que haya valores fuera de rango o que la muestra no es demasiado significativa');
  break;
  end;
end;

form1.Show;
Form6.Hide;
end;
end;


ecfisa 17-02-2011 03:38:16

Hola.

A grandes rasgos: El TShape es un componente que permite dibujar formas geométricas simples en el Form, mientras que el TStringGrid es un componente que permite el manejo de datos que se representan en columnas y filas (formato tabular).



Un saludo.

Neftali [Germán.Estévez] 17-02-2011 11:54:52

Pues estoy con ecfisa. Un TShape y un TStringGrid se parecen, como el tocino y la velocidad...:confused::confused:
O te has equivocado en el nombre del componente o no me explico cómo vas meter el contenido de un TStringGrid en un TShape. :o


La franja horaria es GMT +2. Ahora son las 07:40:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi