PDA

Ver la Versión Completa : Error al multiplicar 2 memos


rufo
07-08-2012, 21:36:30
Hola amigos buenas tardes, tengo un problemilla en el cual nose como resolverlo ya he dado muchas vueltas en el foro y no encuentro la solucion, espero que me ayuden, bueno resulta que tengo dos memos y manualmente escribo las cantidad y en un terce memo sale el resultado pero al momento de pasar a escribir la siguiente cantidad me sale el siguiente error:

http://www.subirimagenes.net/show-image.php?id=356cf21aa6b363d1ce7e754a0e8b57c9

y el codigo que utilizo para hacer dichas operacion es la siguiente


If Memo4.Text = '' then
begin
// nada
end
else
Memo2.Text := FloatToStr(StrToFloat(Memo7.Text) * StrToFloat(Memo4.Text));


Bueno de antemano gracias y espero su ayuda.Uso delphi 2007

roman
07-08-2012, 21:39:25
Da la impresión, a juzgar por la imagen, que en uno de los memos hay un salto de línea entre los dos digitos del número.

// Saludos

rufo
07-08-2012, 23:01:01
Claro es cuando quiero introducir otro digito y me lanza este error

Casimiro Notevi
07-08-2012, 23:07:50
¿Pero qué es lo que quieres hacer?

roman
07-08-2012, 23:08:41
Claro es cuando quiero introducir otro digito y me lanza este error

Entonces tienes que leer una línea del memo a la vez y no todo el texto. La propedad Text te dará todo el contenido incluyendo los retornos de carro.

// Saludos

rufo
07-08-2012, 23:24:26
Lo que quiero hacer es un multiplicacion cada vez que introdusca datos numericos en los los dos memos y que me muetre el resultado en el tercer memo, pero nose como hacerle solo ese codigo tengo y es ahi mi problema.

champy
08-08-2012, 08:16:48
Como dice Roman, leyendo las lineas una por una, con Memo.Lines[NdeLinea]


VAR
Linea : Integer;
Begin

For Linea := 0 to Memo1.Lines.Count -1 do
Begin
Memo3.Lines.Add( FloatToStr( StrToFloat(Memo1.Lines[Linea]) * StrToFloat(Memo2.Lines[Linea])) );
End;

End;

rufo
08-08-2012, 20:43:34
Gracias amigo champy el resultado que me das funciona pero al momento de escribir mas cantidad en el memo y salta a la linea siguiente me borra la cantidad anterior.

champy
08-08-2012, 23:15:39
Perdón? No comprendo el problema :confused:

rufo
08-08-2012, 23:22:11
Una disculpa por no aclarar bien resulta que puse el ejemplo que mencionaste Champy, si funcioan pero al momento de poner otra cantida en el memo donde muestra los resultados estos se van borrando es ahi mi duda, anexo el codigo


procedure TFACTURA.Memo4Change(Sender: TObject);
VAR
Linea : Integer;
Begin

For Linea := 0 to Memo4.Lines.Count -1 do
Begin
Memo2.Lines.Add( FloatToStr( StrToFloat(Memo4.Lines[Linea]) * StrToFloat(Memo7.Lines[Linea])) );
End;
end;


Mi duda es por que cuando pongo otra cantida en la siguiente linea del memo, en el otro memo donde tiene que mostrar el resultado se borra...

ecfisa
09-08-2012, 00:42:49
Hola rufo.

Proba de este modo:

procedure TFACTURA.FormCreate(Sender: TObject);
begin
...
// Las dos líneas siguientes se pueden omitir,
// si se asigna el evento desde el Object Inspector
Memo4.OnChange:= MemoChange;
Memo7.OnChange:= MemoChange;
end;

procedure TFACTURA.MemoChange(Sender: TObject);
var
v1,v2: Double;
c: Integer;
begin
c:= 0;
Memo2.Lines.Clear;
while (c < Memo4.Lines.Count) and (c < Memo7.Lines.Count) do
begin
if TryStrToFloat(Memo4.Lines[c],v1) and TryStrToFloat(Memo7.Lines[c],v2) then
Memo2.Lines.Add(Format('%8.2f',[v1*v2]))
else
Memo2.Lines.Add('Error en operandos. (Línea' + IntToStr(c) +')');
Inc(c);
end;
end;
...


Saludos.

rufo
10-08-2012, 23:18:42
Gracias amigo Ecfisa he probado el ejemplo que me diste y me funciono, gracias de nuevo y a todos que me ayudaron.