Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.22;
Скачать: CL | DM;

Вниз

Многострочный текст и картинка в 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.043 c
3-1170747668
RomanH
2007-02-06 10:41
2007.04.22
SQL-запрос


3-1170269416
Ёжик
2007-01-31 21:50
2007.04.22
Владелец хранимок и таблиц


2-1175443049
DimDim
2007-04-01 19:57
2007.04.22
Close из Activate


2-1175246658
VEZ
2007-03-30 13:24
2007.04.22
F1


15-1174738380
Углук
2007-03-24 15:13
2007.04.22
Как сменить окно частот в БПФ?