![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Многострочный текст и картинка в record'e [D7, Win2k, WinXP]
Анонимный © (2007-03-29 18:36:00)TTest = record
Data1: TStringList;
Data2: TBitmap;
end;
Не работает правильно (данные добавляются, но при записи record'a через TFileStream содержимое TStringList и TBitmap почему-то не пишется в файл).
Как сделать так, чтоб писались?
trubin (2007-03-30 21:34:00) [1]
> fs.Write(Test, SizeOf(Test));
Это не надо
trubin (2007-03-30 21:33:00) [2]
> 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;
Анонимный (2007-03-30 20:58:00) [3]ошибся
там после implementationне надо begin
ну так как сделать?
Анонимный (2007-03-30 20:56:00) [4]
> Покажи как ты это делаешь
...
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.
trubin (2007-03-30 20:01:00) [5]
> Мне надо их внутри record сохранить а не по отдельности
> в TFileStream записать
Что это значит?
> но при записи record'a через TFileStream содержимое TStringList
> и TBitmap почему-то не пишется в файл
Покажи как ты это делаешь
Анонимный (2007-03-30 19:57:00) [6]
> смотри в справке:
TStringList.SaveToStream
TBitmap.SaveToStream
Мне надо их внутри record сохранить а не по отдельности в TFileStream записать
> TStringGrid и TBitmap - это указатели.
и чо?
ответа на свой вопрос я так и не получил, кроме того, я спрашивал не про TStringGrid, а про TStringList
Наиль (2007-03-29 19:04:00) [7]смотри в справке:
TStringList.SaveToStream
TBitmap.SaveToStream
Virgo_Style (2007-03-29 19:00:00) [8]TStringGrid и TBitmap - это указатели.