 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Mónica Cmdr

Registrado: 27 Sep 2002Mensajes: 136Ubicación: Pontevedra (España)
|
Publicado: Lun 25 Nov, 2002 12:56 pm Asunto: TMemoryStream |
|
|
Hola a tod@s!
Estoy empezando a trabajar con este componente y hay algunas cosas que no entiendo. Lo primero que quiero hacer es inicializar todo el "bloque" de memoria con un determinado valor, por ejemplo con el caracter 'F'. Además el tamaño de mi bloque de memoria debe ser de 1000 bytes. Bien, para ello hago lo siguiente:
TMemoryStream* memoria=new TMemoryStream();
memoria->SetSize(1000);
char buff[1000];
for (int i=0;i<1000;i++)
buff[i]='F';
memoria->Write(buff,1000);
Para saber si ha escrito bien los datos en memoria tengo un RichEdit en el que pretendo escribir el contenido de memoria:
RichEdit1->Lines->LoadFromStream(memoria);
Pero no escribe nada en el RichEdit, sin embargo si lo guardo en un fichero de texto sí funciona, es decir, que si hago:
memoria->SaveToFile("FicheroMemoria.TXT");
Si abro FicheroMemoria veo que sí están grabadas las FFF.....
Me pregunta es por qué no sale nada en el Richedit?
Gracias a todos y espero haberme explicado bien.
Saludos! |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 25 Nov, 2002 2:24 pm Asunto: |
|
|
Hola Mónica:
El método Write del TMemoryStream deja el puntero señalando al final de donde escribió, por tanto necesitas "rebobinar" la posición del puntero al principio. Por tanto antes de usar el ...LoadFromStream tendrías que poner:
memoria->Position = 0;
O bien lo siguiente que hace lo mismo:
memoria->Seek(0, soFromBeginning);
Luego usando la propiedad 'Memory' del TMemoryStream puedes abreviar un poco el código, ya que en esa propiedad tienes un puntero al 'buffer' del stream. O sea, que abreviado quedaría algo así:
TMemoryStream *memoria = new TMemoryStream();
memoria->SetSize(1000);
memset(memoria->Memory, 'F', 1000);
RichEdit1->Lines->LoadFromStream(memoria);
//...
(En este caso no necesitamos "rebobinar" ya que no usamos Write y por tanto la posición sigue siendo 0)
También podemos escribir en la propiedad Memory del siguiente modo:
static_cast<BYTE*>(memoria->Memory)[0] = 'F';
static_cast<BYTE*>(memoria->Memory)[1] = 'F';
//...
Saludos:
_Leo |
|
| Volver arriba |
|
 |
Mónica Cmdr

Registrado: 27 Sep 2002Mensajes: 136Ubicación: Pontevedra (España)
|
Publicado: Lun 25 Nov, 2002 3:09 pm Asunto: |
|
|
¡Muchísimas gracias _Leo!, funciona perfectamente. Probé lo de posicionar el puntero al inicio y así funciona a la perfección, pero lo del método Memory me viene muy bien.
Un millón de gracias!
Saludos! |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|