Главная страница
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.039 c
2-1175254920
Alex_C
2007-03-30 15:42
2007.04.22
При FreeLibrary( hDLL ) основное окно проги пропадает


15-1174650082
Vlad Oshin
2007-03-23 14:41
2007.04.22
Самая быстрая технология забора данных из большого Excel-файла.


15-1174876272
Slider007
2007-03-26 06:31
2007.04.22
С днем рождения ! 24 марта


2-1175328074
DeadTeachers
2007-03-31 12:01
2007.04.22
Как сохранить ссылки?


15-1175134911
Slider007
2007-03-29 06:21
2007.04.22
С днем рождения ! 29 марта