PDA

Ver la Versión Completa : Pierdo datos de memo.text a label.caption


jgarcias2
16-04-2011, 22:01:20
Hola compañeros,

os escribo para preguntar una duda que tengo y no me deja dormir, me tiene cansado y la verdad que no se por donde meterle "mano" ...

Os cuento:
lo que hago es enviar varios datos desde el pic hacia el pc via serie, y los recibo en el pc, los pongo en un memo y hasta ahi todo bien. Pero si quiero ponerlo en un label o en un edit o si quiero coger un valor para mostarlo en un indicador numerico no me coge la misma cadena.

Envio desde el pic con ccs:

printf("Velocidad: %u\r\n",velocidad);
printf("Fuerza: %u\r\n",fuerza);

Recogo desde el pc con delphi y componente tciacomport:

procedure TForm1.CiaComPort1DataAvailable(Sender: TObject);
var str: string;
begin
str := ciacomport1.ReceiveStr();
memo1.text := memo1.Text + str; // esto lo hace bien
edit1.text := str; // en edit1 no aparece lo mismo que en memo1
end;

Como puede ser ??? si en str tiene lo mismo no ???

Saludos, agradezco toda la ayuda que me podais prestar.
Gracias.

jgarcias2
17-04-2011, 02:10:42
He estado haciendo pruebas, y lo que si puedo hacer es esto

comport1.ReadStr(str, count);
memo1.Text := memo1.text + str;
label2.caption := memo1.Text;

asi si que funciona bien, sin embargo esto no lo hace:

comport1.ReadStr(str, count);
memo1.Text := memo1.text + str;
label2.caption := str; // asi se pierden caracteres...

Como es posible esto, no lo entiendo...
Por cierto uso el delphi 7.

Saludos. Gracias.

jgarcias2
17-04-2011, 02:17:00
Hola,

os escribia para ver si me podeis ayudar, estoy intentando sacar datos de un memo en el cual escribo datos recibidos por el rs232, la cuestion es, los datos son escritos correctamente en el memo, pero cuando voy a escribirlos en un edit o un label pierdo caracteres. Os adjunto parte del codigo:

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var str: string;
begin
comport1.ReadStr(str, count);
memo1.Text := memo1.text + str; // Esta linea la hace perfecta
label2.caption := str; // Sin embargo en esta otra me pierde caracteres
end;



Como es posible ??? he realizado un monton de pruebas y no se ya por donde atacar el problema, a ver si me orientais un poco.

La cuestion que yo escribo caracteres en el memo y luego quiero recorrerlo para extraer ciertos números, si sabeis como podria hacerlo en el memo tambien me valdria.

Uso delphi 7,

Saludos y muchas gracias.

jgarcias2
17-04-2011, 02:26:42
He realizado unas pruebas y veo que si pongo esto no pierdo ningún caracter,

label2.caption := label2.Caption + str;


esto es posible ???, a q se puede deber ??? recuerdo que str proviene de datos recibidos por el rs232 (comport).

No entiendo nada de nada, a ver si me explicais algo por que ando un poco desesperado...

Saludos. Gracias.

ecfisa
17-04-2011, 03:16:21
Hola jgarcias2.

Lo que te sucede es perfectamente normal.

En tu primer ejemplo, la sentencia:
label2.Caption:= str;
Deja en la propiedad Caption del TLabel el último valor asignado.(cada nueva asignación sobreescribe el valor anterior)

La solución te la diste vos mismo con:
label2.caption := label2.Caption + str;
Ya que los valores de la variable str se van concatenando en la propiedad Caption del mismo modo que cuando hacías:
memo1.Text := memo1.text + str;

Por favor encerrá tu código entre las etiquetas para que tu código sea mas legible ( etiquetas vB (http://www.clubdelphi.com/foros/showpost.php?p=42882&postcount=1)), muchas gracias.

Un saludo.

jgarcias2
17-04-2011, 20:44:42
Ante todo gracias por contestar ecfisa,

pero lo que pasa no es tan sencillo como parece, lo que pasa que igual me explico mal.
Eso que me comentas ya lo sabia, lo que quiero decir es que al recibir los datos en str si pongo esto:


label1.caption := label1.caption + str;

si pongo eso lo hace bien, pero sin embargo al poner esto no lo hace bien


label1.caption := str;


a lo que me refiero con hacerlo bien es a poner lo que realmente recibo por el rs232.

Este es el evento:


procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var str: string;
begin
comport1.ReadStr(str, count);
label1.caption := label1.caption + str;
end;



Saludos y gracias.

ecfisa
18-04-2011, 06:07:17
Hola jgarcias2.

Ví que habías duplicado el tema en el foro ASM y Microcontroladores, los combiné en este foro por parecerme más adecuado.
Sé que no llevas mucho tiempo en los foros así que este tipo de confusiones son normales, pero en lo posible trata de no duplicar
los temas. Si lo pones en un foro y luego te parece que hubiera debido ir en otro, sólo comunicaselo a un moderador para que lo mueva.

Un saludo.

jgarcias2
18-04-2011, 19:27:45
ok, gracias, lo tendre en cuenta.

Saludos.