Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.19;
Скачать: CL | DM;

Вниз

Работа с файлом и несколькими RichEdit ами   Найти похожие ветки 

 
Gamer   (2006-02-13 16:24) [0]

Здравствуйте.
Как сохранить информацию с нескольких RichEdit"ов в один файл и не делать ограничений по размеру поля RichEdit"ов?
И как сделать обратный процесс?


 
Style ©   (2006-02-13 16:32) [1]

Сохранить каждый RichEdit в TMemoryStream потом соединить все стримы. и сохранить в файл....


 
Style ©   (2006-02-13 16:37) [2]

Модеры, извените за второй пост подряд :) ...


> И как сделать обратный процесс?


Просто сохранять в стриме перед каждым началом данных каждого RichEdit"a
размер этих данных, т.е. 4 байта sizeof(integer)...
При считывании уже соединенного стрима, нужно учитывать то что первые 4 байта - это информация о размере который необходимо считать...


 
Gamer   (2006-02-13 16:45) [3]

Не сочтите за наглость. Но можно, ли маленький пример.


 
Style ©   (2006-02-13 17:00) [4]


> Gamer   (13.02.06 16:45) [3]
>Не сочтите  за наглость....


Сочту :)

procedure SaveToFile(FileName: string);
var
 MergedStream: TMemoryStream;

 procedure LocAppendRichEdit(Rich: TRichEdit);
   var
     len: integer;
     RichStream: TMemoryStream;
 begin
     RichStream := TMemoryStream.Create;
     try
       Rich.Lines.SaveToStream(RichStream);
       len := Length(Rich.Name);
       MergedStream.Write(len,sizeof(integer));
       MergedStream.Write(pchar(Rich.Name)^,len);

       len := RichStream.Size;
       MergedStream.Write(len,sizeof(integer));
       MergedStream.Write(RichStream.Memory^,len);

     finally
       RichStream.Free;
     end;
 end;

begin
   MergedStream := TMemoryStream.Create;
   try
     LocAppendRichEdit(RichEdit1);
     LocAppendRichEdit(RichEdit2);
     MergedStream.SaveToFile(FileName);
   finally
     MergedStream.Free;
   end;
end;

Обратный процесс напишешь сам!


 
Gamer   (2006-02-14 00:05) [5]

Style:
Спасибо за совет.
Я попробовал написать код, но у меня это слабо получилось:

procedure LoadFromFile(FileName: string);
var
len: integer;
s:string;
bfr:pointer;
MergedStream: TMemoryStream;

begin
  MergedStream := TMemoryStream.Create;
  try
    MergedStream.LoadFromFile(FileName);
    {{{{{{{{{{{{{}
     with mergedStream do begin
      Position:=0;
      Read(len,sizeof(integer));
      Position:=sizeof(integer)+len
      read(s,len);//Здесь выводит ошибку
      showmessage(inttostr(len));
     end;
    {{{{{{{{{{{{{}
  finally
    MergedStream.Free;
  end;
end;

Если Position:=sizeof(integer)+len; поменяю на Position:=len; то после
read(s,len); получаю s="";
Как исправить?


 
Плохиш ©   (2006-02-14 00:48) [6]


>       Position:=sizeof(integer)+len

убрать, указатель уже стоит на начале данных, а ты его суёшь в конец.

>       read(s,len);//Здесь выводит ошибку

Какая ошибка нужно догадаться, хотя у нас же есть телепаторы. Память под строку распределять Пушкин должен?

> Если Position:=sizeof(integer)+len; поменяю на Position:
> =len; то после
> read(s,len); получаю s="";
> Как исправить?

Может для начала почитаешь чего?


 
Германн ©   (2006-02-14 03:01) [7]

2 Gamer   (14.02.06 00:05) [5]
Надеюсь ты в Кваке или в Думе всех "имеешь".
Или и там тебя бьют все кому не лень?



Страницы: 1 вся ветка

Текущий архив: 2006.03.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
2-1141118521
Patrick
2006-02-28 12:22
2006.03.19
Принципиальный вопрос.


15-1140872613
SergP.
2006-02-25 16:03
2006.03.19
Как правильно пишется?


15-1140730129
McSimm(proxy)
2006-02-24 00:28
2006.03.19
Как такое может быть.?


4-1135596736
ZeFiR
2005-12-26 14:32
2006.03.19
Трабл, проблем, question:^)


3-1138164463
TimScorp
2006-01-25 07:47
2006.03.19
Проверка условий в БД.