Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1175084101
homm
2007-03-28 16:15
2007.04.22
Зачем жескому диску кэш?


2-1175668633
Alex_C
2007-04-04 10:37
2007.04.22
Еще вопрос по форме в DLL


15-1175228246
Бармалей
2007-03-30 08:17
2007.04.22
Архитектура компа


15-1174765170
Sam Stone
2007-03-24 22:39
2007.04.22
Аттракцион "Невиданная жадность"


15-1174813695
TUser
2007-03-25 13:08
2007.04.22
А у Путина есть мобильник?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский