Главная страница
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.035 c
2-1141637182
Prince36
2006-03-06 12:26
2006.03.19
GIF


3-1138456107
midavik
2006-01-28 16:48
2006.03.19
не работает Linked Servers из Делфи


1-1139752949
Pit
2006-02-12 17:02
2006.03.19
Hint ы в Popupmenu


3-1138197616
Tornado
2006-01-25 17:00
2006.03.19
Обработка ошибки при разрыве связи


3-1138604295
box
2006-01-30 09:58
2006.03.19
Подсчет суммы поля Без SQL