Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda StringGrid (https://www.clubdelphi.com/foros/showthread.php?t=91823)

Franceszco 08-05-2017 07:12:46

Ayuda StringGrid
 
1 Archivos Adjunto(s)
Hola buenas noches, Alguien puede ayudarme con lo siguiente:

Como colocar los números iniciando como en la imagen...

Como hacer la suma de 2 StringGrid, o seria desde el edit?

De ante mano gracias!

Casimiro Notevi 08-05-2017 09:53:29

No se entiende qué problema tienes ni lo que quieres conseguir.

MAXIUM 08-05-2017 14:39:16

Has la suma usando los datos de los Edit con un cast o StrToInt(Editx.Text) . Luego presenta esos valores en el StringGrid descomponiendo los datos en unidades, decenas, centenas, etc. Dividiendo por 10, 100, 1000, etc. convirtiéndolos en String IntToStr(valor).

Franceszco 08-05-2017 17:49:15

Cita:

Empezado por Casimiro Notevi (Mensaje 516341)
No se entiende qué problema tienes ni lo que quieres conseguir.



Mira hasta aqui llevo mi ejercicio y lo unico que me falta es que el string grid este del lado derecho asi como en la imagen que puse en el post

procedure TForm1.Button1Click(Sender: TObject);
var x,y:integer;
suma:integer;

begin
suma:=0;
suma:=strtoint(LabeledEdit1.Text)+strtoint(LabeledEdit2.Text);
LabeledEdit3.Text:=inttostr(suma);
StringGrid1.Colcount:=Length(LabeledEdit1.Text);
StringGrid2.Colcount:=Length(LabeledEdit2.Text);
StringGrid3.Colcount:=Length(LabeledEdit3.Text);

begin
with StringGrid1 do
for x:=0 to Colcount -1 do
for y:=0 to RowCount -1 do
begin
Cells[x,y]:=LabeledEdit1.Text[x+1];
end;
end;
begin
with StringGrid2 do
for x:=0 to Colcount -1 do
for y:=0 to RowCount -1 do
begin
Cells[x,y]:=LabeledEdit2.Text[x+1];
end;
end;
begin
with StringGrid3 do
for x:=0 to Colcount -1 do
for y:=0 to RowCount -1 do
begin
Cells[x,y]:=LabeledEdit3.Text[x+1];
end;
end;


end;

AgustinOrtu 08-05-2017 20:52:41

Hola Franceszco, bienvenido a Club Delphi. Recuerda leer la guia de estilo y utiliza etiquetas cuando publiques codigo:


Franceszco 09-05-2017 00:29:17

StringGird
 
1 Archivos Adjunto(s)
Buenas! la vez pasada no me explique bien

Como puedo hacer esto como se muestra en la imagen

el numero ingresado en el stringgrid corra de derecha a izquierda

ecfisa 09-05-2017 02:31:35

Hola.

Por favor si no te responden, no crees un nuevo hilo con la misma consulta (punto 13 de la Guía de estilo), continua preguntando en el hilo inicial y este pasará a la cabecera de la lista. Como tienes pocos mensajes, combiné ambos en el hilo inicial.

¿ Por que tres StringGrids? ¿ No puede ser uno sólo con tres filas ?, lo que te sugiero es mas o menos así:
  1. Definir tres filas en el StringGrid
  2. Verificar que lo ingresado en LabeledEdit1 y LabeledEdit2 son números enteros válidos. Si no lo son abortar, de otro modo sumarlos y convertir el valor suma a cadena.
  3. Darle al StringGrid tantas columnas como dígitos tiene la suma (obviamente los sumandos tendrán igual o menos dígitos que la suma).
  4. Pasar los dígitos (caracteres) para cada número y la suma.
1.
Código Delphi [-]
  StringGrid1.RowCount := 3
2.
Código Delphi [-]
  if not TryStrToInt( LabeledEdit1.Text, a) then
    raise Exception.Create('El primer número es inválido');

  if not TryStrToInt( LabeledEdit2.Text, b) ...
  ...

  LabeledEdit3.Text := IntToStr( a + b );
3.
Código Delphi [-]
  StringGrid1.Colcount := Length( LabeledEdit3.Text );
4.
Código Delphi [-]
  for i := 1 to Length(LabeledEdit1.Text) do
    StringGrid1.Cells[StringGrid1.ColCount-i, 0] := LabeledEdit1.Text[ Length( LabeledEdit1.Text )-i+1 ];

  for i := 1 to Length(LabeledEdit2.Text) do
    StringGrid1.Cells[StringGrid1.ColCount-i, 1] := ...
  ...

Saludos :)

Franceszco 09-05-2017 04:14:51

Gracias amigo,

Ahora otra duda, como sumo celda por celda de un string grid a otro

Casimiro Notevi 09-05-2017 10:08:37

Cita:

Empezado por Franceszco (Mensaje 516374)
Gracias amigo,

Creo que has olvidado la recomendación de ecfisa, leer nuestra guía de estilo, gracias.

Franceszco 09-05-2017 20:36:11

Código Delphi [-]
  if not TryStrToInt( LabeledEdit1.Text, a) then
    raise Exception.Create('El primer número es inválido');

  if not TryStrToInt( LabeledEdit2.Text, b) ...
  ...

  LabeledEdit3.Text := IntToStr( a + b );

En esta parte de la suma, me piden que se realice de StringGrid1 a StringGrid2

Estoy intentando algo asi, pero no me va...


Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var x,a,y,i:integer;
begin

   begin
   for i :=1 to Length(LabeledEdit1.Text) do
    StringGrid1.Cells[StringGrid1.ColCount -i, 0] := LabeledEdit1.Text[ Length( LabeledEdit1.Text )-i+1 ];
   end;
   begin
   for i :=1 to Length(LabeledEdit2.Text) do
    StringGrid2.Cells[StringGrid2.ColCount -i, 0] := LabeledEdit2.Text[ Length( LabeledEdit2.Text )-i+1 ];

   end;
    begin
   for x:=Length(LabeledEdit1.Text) to Length(LabeledEdit2.Text) do
    begin
   LabeledEdit3.text:= IntToStr(StrToInt(stringgrid1.cells[StringGrid1.ColCount -i, 0]) + StrToInt(stringgrid2.cells[StringGrid2.ColCount-i, 0]));
   inc(i);
    end;
    end;
    begin

       for i :=1 to Length(LabeledEdit3.Text) do
        StringGrid3.Cells[StringGrid3.ColCount -i, 0] := LabeledEdit3.Text[ Length( LabeledEdit3.Text )-i+1 ];
end;





end;

  end.

ecfisa 09-05-2017 21:46:38

Hola.

En cuanto a realizar la suma y alinearla a la derecha me refería a algo así:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  a, b, i, j    : Integer;
  gr            : TStringGrid;
  le1, le2, le3 : TLabeledEdit;
begin
  gr  := StringGrid1;
  le1 := LabeledEdit1;
  le2 := LabeledEdit2;
  le3 := LabeledEdit3;

  if not TryStrToInt( le1.Text, a ) then
    raise Exception.Create('El primer número es inválido');
  if not TryStrToInt( le2.Text, b ) then
    raise Exception.Create('El segundo número es inválido');

  le3.Text := IntToStr( a + b );
  gr.Colcount := Length( le3.Text );
  for i := 0 to gr.ColCount - 1 do gr.ColWidths[i] := 30;

  // Sumando 1
  for i := 1 to Length(le1.Text) do
    gr.Cells[gr.ColCount-i, 0] := le1.Text[ Length( le1.Text )-i+1 ]; // Row 0

  // Sumando 2
  for i := 1 to Length(LabeledEdit2.Text) do
    gr.Cells[gr.ColCount-i, 1] := le2.Text[ Length( le2.Text )-i+1 ]; // Row 1

  // Suma
  for i := 1 to Length(le3.Text) do
   gr.Cells[gr.ColCount-i, 2] := le3.Text[ Length( le3.Text )-i+1 ];  // Row 2
end;

Resultado:


El proceder es similar usando tres StringGrids (uno para cada sumando y otro para el resultado), sólo debes definir cada StringGrid con una fila y las columnas correspondientes a los respectivos dígitos .

Sin embargo, no entiendo que papel debería jugar el "StringGrid2" que mencionas en tu último mensaje.

Saludos :)

Franceszco 10-05-2017 03:29:13

Cita:

El proceder es similar usando tres StringGrids (uno para cada sumando y otro para el resultado), sólo debes definir cada StringGrid con una fila y las columnas correspondientes a los respectivos dígitos .

Sin embargo, no entiendo que papel debería jugar el "StringGrid2" que mencionas en tu último mensaje.
Hola, Buenas noches, la funcion de usar 3 stringgrid en especifico no lo se, asi no los solicitaron, y la suma de StringGrid1 y StringGrid2 seria para que en la suma puedas colocar un numero ilimitado, porque haciendo la suma directa de los edit.text solo hay un numero limitado para sumar, en cambio haciendo suma de celda por celda seria literalmente ilimitado el numero


La franja horaria es GMT +2. Ahora son las 11:28:47.

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