Форум: "Начинающим";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];
Внизсохранить текст из 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.021 c