Главная страница
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.048 c
2-1175628268
МегаПупс
2007-04-03 23:24
2007.04.22
Загрузка случайного файла


2-1175226199
Dismember
2007-03-30 07:43
2007.04.22
Перемещение формы за Panel


15-1174961480
Slider007
2007-03-27 06:11
2007.04.22
С днем рождения ! 27 марта


15-1174957429
Gero
2007-03-27 05:03
2007.04.22
Посоветуйте проигрыватель звука


15-1174843678
leonidus
2007-03-25 21:27
2007.04.22
Помогите написать алгоритм перебора