Главная страница
    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.021 c
2-1151843884
S-Slim
2006-07-02 16:38
2006.07.23
надо копировать DB файл!


2-1151306326
XTD
2006-06-26 11:18
2006.07.23
Автоответчик (модем+комп)


1-1149682763
mmms
2006-06-07 16:19
2006.07.23
Как послать сообщение элементу, будто над ним находится мышь?


15-1150889662
parovoZZ
2006-06-21 15:34
2006.07.23
Программно ограничить доступ к каталогу/файлу.


15-1151340491
ZeFiR
2006-06-26 20:48
2006.07.23
TFlashPlayerControl





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский