Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.017 c
15-1150731337
DillerXX
2006-06-19 19:35
2006.07.23
СПИД


15-1150180363
Мазут Береговой
2006-06-13 10:32
2006.07.23
Американцы не были на Луне... однозначно!


10-1122560514
alfer
2005-07-28 18:21
2006.07.23
копирование из БД InterBase в Excel с помощью Delphi


2-1149947049
TGX
2006-06-10 17:44
2006.07.23
Низкоуровневый доступ к файлу


5-1135944628
olegz77
2005-12-30 15:10
2006.07.23
Работа с формой из компонента





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский