Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Вниз

Работа с файлом и несколькими RichEdit ами   Найти похожие ветки 

 
Gamer   (2006-02-13 16:24) [0]

Здравствуйте.
Как сохранить информацию с нескольких RichEdit"ов в один файл и не делать ограничений по размеру поля RichEdit"ов?
И как сделать обратный процесс?


 
Style ©   (2006-02-13 16:32) [1]

Сохранить каждый RichEdit в TMemoryStream потом соединить все стримы. и сохранить в файл....


 
Style ©   (2006-02-13 16:37) [2]

Модеры, извените за второй пост подряд :) ...


> И как сделать обратный процесс?


Просто сохранять в стриме перед каждым началом данных каждого RichEdit"a
размер этих данных, т.е. 4 байта sizeof(integer)...
При считывании уже соединенного стрима, нужно учитывать то что первые 4 байта - это информация о размере который необходимо считать...


 
Gamer   (2006-02-13 16:45) [3]

Не сочтите за наглость. Но можно, ли маленький пример.


 
Style ©   (2006-02-13 17:00) [4]


> Gamer   (13.02.06 16:45) [3]
>Не сочтите  за наглость....


Сочту :)

procedure SaveToFile(FileName: string);
var
 MergedStream: TMemoryStream;

 procedure LocAppendRichEdit(Rich: TRichEdit);
   var
     len: integer;
     RichStream: TMemoryStream;
 begin
     RichStream := TMemoryStream.Create;
     try
       Rich.Lines.SaveToStream(RichStream);
       len := Length(Rich.Name);
       MergedStream.Write(len,sizeof(integer));
       MergedStream.Write(pchar(Rich.Name)^,len);

       len := RichStream.Size;
       MergedStream.Write(len,sizeof(integer));
       MergedStream.Write(RichStream.Memory^,len);

     finally
       RichStream.Free;
     end;
 end;

begin
   MergedStream := TMemoryStream.Create;
   try
     LocAppendRichEdit(RichEdit1);
     LocAppendRichEdit(RichEdit2);
     MergedStream.SaveToFile(FileName);
   finally
     MergedStream.Free;
   end;
end;

Обратный процесс напишешь сам!


 
Gamer   (2006-02-14 00:05) [5]

Style:
Спасибо за совет.
Я попробовал написать код, но у меня это слабо получилось:

procedure LoadFromFile(FileName: string);
var
len: integer;
s:string;
bfr:pointer;
MergedStream: TMemoryStream;

begin
  MergedStream := TMemoryStream.Create;
  try
    MergedStream.LoadFromFile(FileName);
    {{{{{{{{{{{{{}
     with mergedStream do begin
      Position:=0;
      Read(len,sizeof(integer));
      Position:=sizeof(integer)+len
      read(s,len);//Здесь выводит ошибку
      showmessage(inttostr(len));
     end;
    {{{{{{{{{{{{{}
  finally
    MergedStream.Free;
  end;
end;

Если Position:=sizeof(integer)+len; поменяю на Position:=len; то после
read(s,len); получаю s="";
Как исправить?


 
Плохиш ©   (2006-02-14 00:48) [6]


>       Position:=sizeof(integer)+len

убрать, указатель уже стоит на начале данных, а ты его суёшь в конец.

>       read(s,len);//Здесь выводит ошибку

Какая ошибка нужно догадаться, хотя у нас же есть телепаторы. Память под строку распределять Пушкин должен?

> Если Position:=sizeof(integer)+len; поменяю на Position:
> =len; то после
> read(s,len); получаю s="";
> Как исправить?

Может для начала почитаешь чего?


 
Германн ©   (2006-02-14 03:01) [7]

2 Gamer   (14.02.06 00:05) [5]
Надеюсь ты в Кваке или в Думе всех "имеешь".
Или и там тебя бьют все кому не лень?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.013 c
4-1135763607
dimon4386
2005-12-28 12:53
2006.03.19
Разрешение экрана


15-1140703385
Kreator_book
2006-02-23 17:03
2006.03.19
Алгоритм школьного расписания


2-1141402179
Fenix
2006-03-03 19:09
2006.03.19
Редактирование в RichEdit


1-1139864107
The X
2006-02-13 23:55
2006.03.19
Мультистроковый TButton


15-1140716512
5*5=25
2006-02-23 20:41
2006.03.19
кто учился НЕ на программиста





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