Форум: "Основная";
Текущий архив: 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.012 c