Главная страница
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.028 c
2-1151951452
Ivolg
2006-07-03 22:30
2006.07.23
Handle


15-1151141212
Fran
2006-06-24 13:26
2006.07.23
Защита ноутбука


2-1151860741
студент12
2006-07-02 21:19
2006.07.23
Как найти путь


15-1150867721
Ega23
2006-06-21 09:28
2006.07.23
С Днём рождения! 21 июня


15-1150975443
NailMan
2006-06-22 15:24
2006.07.23
Нужна прога для передачи файлов...