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

Вниз

сохранить текст из 20 richedit в один файл   Найти похожие ветки 

 
stud ©   (2006-07-04 16:37) [0]

каким образом можно осуществить?
пробовал писать в ини файл с помоью потоков, но там ограничение на по длине.


 
Джо ©   (2006-07-04 16:39) [1]

Текст сохранять нужно форматированный или нет?


 
stud ©   (2006-07-04 16:51) [2]

да, форматированый


 
Джо ©   (2006-07-04 16:55) [3]

Вот, на скорую руку набросал пример сохранения. Разбирешься с принципом, чтение сделаешь без труда. :)

procedure SaveRichEditToStream (AStream: TStream; RichEdit: TRichEdit);
var
 TempStream: TMemoryStream;
 Sz: Integer;
begin
 TempStream := TMemoryStream.Create;
 try
   RichEdit.Lines.SaveToStream(TempStream);

   Sz := TempStream.Size;
   TempStream.Position := 0;

   AStream.Write(Sz,SizeOf(Sz));

   AStream.CopyFrom(TempStream,Sz);
 finally
   TempStream.Free;
 end;
end;

procedure SaveRichEditsToStream (AStream: TStream; Richedits: array of TRichEdit);
var
 I,Cnt: Integer;
begin
 Cnt := High(RichEdits)+1;
 AStream.Write(Cnt,SizeOf(Cnt));

 for I := 0 to Cnt-1 do
   SaveRichEditToStream(AStream,Richedits[I]);
end;

procedure SaveRichEditsToFile (AFileName: string; Richedits: array of TRichEdit);
var
 Fs: TFileStream;
begin
 Fs := TFileStream.Create(AFileName,fmCreate);
 try
   SaveRichEditsToStream(Fs,Richedits);
 finally
   Fs.Free
 end;
end;


Пример использования (сохранение содержимого двух RichEdit"ов в один файл):

procedure TForm1.Button1Click(Sender: TObject);
begin
 SaveRichEditsToFile("d:\RichEdits.dat",[RichEdit1,RichEdit2]);
end;


 
Джо ©   (2006-07-04 17:12) [4]

Ладно, буду добрым до конца :) Надеюсь, поможет разобраться с принципом. Лови загрузку:


procedure LoadRichEditFromStream (AStream: TStream; Richedit: TRichEdit);
var
 Sz: Integer;
 TempStream: TMemoryStream;
begin
 AStream.Read(Sz,SizeOf(Sz));
 TempStream := TMemoryStream.Create;
 try
   TempStream.CopyFrom(AStream,Sz);
   TempStream.Position := 0;
   Richedit.Lines.LoadFromStream(TempStream);
 finally
   TempStream.Free;
 end;
end;

procedure LoadRichEditsFromStream (AStream: TStream; Richedits: array of TRichEdit);
var
 I,
 Cnt: Integer;
begin
 AStream.Read(Cnt,SizeOf(Cnt));
 if High(Richedits)+1 <> Cnt then
   raise Exception.CreateFmt("Неверное количество объектов (%d). Требуется %d",
     [High(Richedits)+1, Cnt]);

 for I := 0 to Cnt-1 do
   LoadRichEditFromStream(AStream,Richedits[I]);
end;

procedure LoadRichEditsFromFile(AFileName: string; Richedits: array of TRichEdit);
var
 Fs: TFileStream;
begin
 Fs := TFileStream.Create(AFileName,fmOpenRead);
 try
   LoadRichEditsFromStream(Fs,Richedits);
 finally
   Fs.Free
 end;
end;


Пример:

procedure TForm1.Button2Click(Sender: TObject);
begin
 LoadRichEditsFromFile("d:\RichEdits.dat",[RichEdit3,RichEdit4]);
end;


 
Джо ©   (2006-07-04 17:13) [5]

[3]
> Разбирешься

Ай, сорри, совсем плохой я стал.


 
stud ©   (2006-07-04 17:15) [6]

принцип понятен, последовательная запись в файл.
но! как потом все это хозяйство вытащить обратно в эти едиты.
если прочитать файл - то он прочитается весь в один поток т.к. размер записанных данных отсутсвует


 
Джо ©   (2006-07-04 17:16) [7]

> т.к. размер записанных данных отсутсвует

Как это отсутствует?! Внимательно посмотри мой код. Размер данных пишется перед каждой "порцией". А в начале файла идет кол-во порций. Впрочем, убедись сам, я загрузку тоже привел.


 
stud ©   (2006-07-04 17:18) [8]

спасибо



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

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

Наверх




Память: 0.49 MB
Время: 0.031 c
15-1151337417
Кручен-Верчен
2006-06-26 19:56
2006.07.23
Как сделать так, чтобы Mozilla Firefox использовал HTTP 1.0?


2-1151953146
Yegorchic
2006-07-03 22:59
2006.07.23
Длина и высота TListView.Item


2-1151117256
learner
2006-06-24 06:47
2006.07.23
Сообщение в нить, созданной CreateThread


15-1150835157
Axis_of_Evil
2006-06-21 00:25
2006.07.23
В остнастке "управление компьютером"


15-1151218322
Nic
2006-06-25 10:52
2006.07.23
Какие преимущества даёт компонент TActionList?