![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сохранить текст из 20 richedit в один файл
stud © (2006-07-04 16:37:00)каким образом можно осуществить?
пробовал писать в ини файл с помоью потоков, но там ограничение на по длине.
stud (2006-07-04 17:18:00) [1]спасибо
Джо (2006-07-04 17:16:00) [2]> т.к. размер записанных данных отсутсвует
Как это отсутствует?! Внимательно посмотри мой код. Размер данных пишется перед каждой "порцией". А в начале файла идет кол-во порций. Впрочем, убедись сам, я загрузку тоже привел.
stud (2006-07-04 17:15:00) [3]принцип понятен, последовательная запись в файл.
но! как потом все это хозяйство вытащить обратно в эти едиты.
если прочитать файл - то он прочитается весь в один поток т.к. размер записанных данных отсутсвует
Джо (2006-07-04 17:13:00) [4][3]
> Разбирешься
Ай, сорри, совсем плохой я стал.
Джо (2006-07-04 17:12:00) [5]Ладно, буду добрым до конца :) Надеюсь, поможет разобраться с принципом. Лови загрузку:
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 16:55:00) [6]Вот, на скорую руку набросал пример сохранения. Разбирешься с принципом, чтение сделаешь без труда. :)
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;
stud (2006-07-04 16:51:00) [7]да, форматированый
Джо (2006-07-04 16:39:00) [8]Текст сохранять нужно форматированный или нет?