Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизМногострочный текст и картинка в record e Найти похожие ветки
← →
Анонимный (2007-03-29 18:36) [0]TTest = record
Data1: TStringList;
Data2: TBitmap;
end;
Не работает правильно (данные добавляются, но при записи record"a через TFileStream содержимое TStringList и TBitmap почему-то не пишется в файл).
Как сделать так, чтоб писались?
← →
Virgo_Style © (2007-03-29 19:00) [1]TStringGrid и TBitmap - это указатели.
← →
Наиль © (2007-03-29 19:04) [2]смотри в справке:
TStringList.SaveToStream
TBitmap.SaveToStream
← →
Анонимный (2007-03-30 19:57) [3]
> смотри в справке:
TStringList.SaveToStream
TBitmap.SaveToStream
Мне надо их внутри record сохранить а не по отдельности в TFileStream записать
> TStringGrid и TBitmap - это указатели.
и чо?
ответа на свой вопрос я так и не получил, кроме того, я спрашивал не про TStringGrid, а про TStringList
← →
trubin © (2007-03-30 20:01) [4]
> Мне надо их внутри record сохранить а не по отдельности
> в TFileStream записать
Что это значит?
> но при записи record"a через TFileStream содержимое TStringList
> и TBitmap почему-то не пишется в файл
Покажи как ты это делаешь
← →
Анонимный (2007-03-30 20:56) [5]
> Покажи как ты это делаешь...
TTest = record;
Data1: TStringList;
Data2: TPicture;
end;
...
implementation
begin
procedure But1Click(...);
var
Test: TTest;
fs: TFileStream;
begin
Test.Data1 := TStringList.Create;
Test.Data1.LoadFromFile(ts.txt);
Test.Data2 := TPicture.Create;
Test.Data2.LoadFromFile(tp.bmp);
fs := TFileStream.Create("test.tff", fmCreate);
fs.Write(Test, SizeOf(Test));
fs.Free;
end;
...
end.
← →
Анонимный (2007-03-30 20:58) [6]ошибся
там после implementation не надо begin
ну так как сделать?
← →
trubin © (2007-03-30 21:33) [7]
> fs.Write(Test, SizeOf(Test));
Здесь ты в поток записываешь только 8 байт - значения полей Data1, Data2 - эти поля по сути указатели.
> ну так как сделать?
Пример с целью проиллюстрировать принцип, писал прямо здесь:
var
Test: TTest;
fs: TFileStream;
strS: TStringStream;
memS: TMemoryStream;
i: Integer;
begin
Test.Data1 := TStringList.Create;
Test.Data1.LoadFromFile(ts.txt);
Test.Data2 := TPicture.Create;
Test.Data2.LoadFromFile(tp.bmp);
fs := TFileStream.Create("test.tff", fmCreate);
strS:= TStringStream.Create(Test.Data1.Text);
memS:= TMemoryStream.Create;
Test.Data2.SaveToStream(memS);
//пишем данные TStringList
i:= strS.Size;
fs.Write(i, SizeOf(Integer)); // первые 4 байта размер данных из TStringList - потом же считывать из файла придется
fs.CopyFrom(strS, strS.Size);
//пишем данные TPicture
fs.CopyFrom(memS, memS.Size);
strS.Free;
memS.Free;
fs.Write(Test, SizeOf(Test));
fs.Free;
end;
← →
trubin © (2007-03-30 21:34) [8]
> fs.Write(Test, SizeOf(Test));
Это не надо
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c