Главная страница
    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.052 c
2-1175715296
Артурс
2007-04-04 23:34
2007.04.22
Чужие окна


15-1174822851
Riply
2007-03-25 15:40
2007.04.22
Великолепный способ ведения дискуссий.


2-1175252915
ppcumax
2007-03-30 15:08
2007.04.22
Парсер ключевых слов


2-1175590295
Steep
2007-04-03 12:51
2007.04.22
Панелька


1-1172247555
TStas
2007-02-23 19:19
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский