Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

Как сохранить TList в файле   Найти похожие ветки 

 
TGrey   (2004-06-27 02:23) [0]

Имеется список типа TList с некоторыми объектами в качестве элементов списка, как можно сохранить этот список в файл?


 
QuasiLamo ©   (2004-06-27 12:34) [1]

а какого типа объекты там у тебя?


 
raidan   (2004-06-27 14:33) [2]

Можно воспользоваться blockwrite"ом :)
Можно заюзать поток.
Если это данные, конечно :)


 
KilkennyCat ©   (2004-06-27 15:58) [3]


> raidan   (27.06.04 14:33) [2]

Вроде бы, это указатель на данные...


 
raidan   (2004-06-27 16:38) [4]


> KilkennyCat ©   (27.06.04 15:58) [3]
>
> > raidan   (27.06.04 14:33) [2]
>
> Вроде бы, это указатель на данные...

Там могут храниться и процедуры (указатели).
Я вот в свое время еще на Паскале пытался сохранить процедуру в файл.
Че-то не получилось тогда, савсем маладой еще был :)


 
TGrey   (2004-06-27 22:39) [5]

В том то и проблема, что переменная типа TList это указатель. А может кто-нибудь подскажет как сохранить класс созданный на основе TObject, в котором содержится поле типа TList.

Просьба большая, показать конкретный пример.


 
default ©   (2004-06-27 22:42) [6]

TGrey   (27.06.04 22:39) [5]
адреса сохранять не надо, нужно сохранять данные


 
TGrey   (2004-06-27 23:25) [7]

Я понимаю, что нужно сохранять данные :)
А как эти данные сохранить, например с помощью всеми любимого blockwrite.


 
TGrey   (2004-06-27 23:30) [8]


> QuasiLamo ©   (27.06.04 12:34) [1]

В качестве данных используются объекты класса унаследованного от TObject, например такие


TUser=class(TObject)
private
FName:String;

...
public
property Name:String read FName write FName;

...
end;


 
KilkennyCat ©   (2004-06-27 23:35) [9]

А вот ежели по TList глянуть справку, то вполне видно, как его сохранить...


 
Mim1 ©   (2004-06-28 03:32) [10]

[9] KilkennyCat ©   (27.06.04 23:35)

И как же.

На самом деле если смотреть исходники этого класса то это просто массив ссылок. Ссылки как вы сами понимаете сохранять никуда не имеет смысла.
Простого решения зада не имеет, видется несколько путей.
1) Если все элементы находящиеся внутри списка имеют общий класс то можно для этого класса написать процедуру сохранения в поток.
То есть пробежавщись по списку вызвать эту процедуру сохранения передавая ей в качестве параметра поток для сохранения, или хендл файла (что имхо сейчас будет выглядеть както)
2) Если элемениты - разного класса или предвидится появление элемента попадающего в этот список, то разумнее для всех их соорудить обжего предка, с абстрактным методом. Который реализовывать в наследниках.
далее см. 1
3) то что описано в пункте 2 то есть возможность сохранеия в поток реализована для наследников tpersistent. Например если вы пронаследуете свои элементы от класса tcomponent то сможете просто пробудаться по массиву (списку) и сохранить каждый из них методом writecomponent. (сохранятся только published свойства)
4) можно написать унивесальную процедуру которя будет сохранять published свойства в поток.

PS Если злементы списка используются только для хранения данных то можно отказаться от использования обьектов в сторону записей (record), однако вы потеряете возмоность использования таких вещешй как is, as и т.д.


 
©   (2004-06-28 03:54) [11]

Есть еще один способ и самый лучший, подходить к алгоритмированию программы так чтобы не возникало подобных задач.


 
KilkennyCat ©   (2004-06-28 04:41) [12]


> R ©   (28.06.04 03:54) [11]


ИМХО, это не самый лучший...
Я вот до сих пор не могу решить проблему, как заставить TTF рисоваться зеркально. Обходным путем - ноупроблем, но это потеря времени. А программа используется в телевидении, где время -деньги.


 
Mim1 ©   (2004-06-28 05:35) [13]


>  [12] KilkennyCat ©   (28.06.04 04:41)
>
> > R ©   (28.06.04 03:54) [11]
>
>
> ИМХО, это не самый лучший...


Да нет как раз самый замечательный. Сначала думаеш а потом пишеш а не наоборот. Не вижу противоречия с "время -деньги". Как говорится одно другому не мешает. А шрифты тут вообще не в тенму :)


 
MBo ©   (2004-06-28 08:45) [14]

>проблему, как заставить TTF рисоваться зеркально
Поподробнее об оффтопике , pls :)


 
KilkennyCat ©   (2004-06-28 09:08) [15]


> MBo ©   (28.06.04 08:45) [14]


Так ведь я об этом спрашивал, пару лет назад ;)
смысл в том, что в программе для телесуфлера, скроллируемый текст - зеркальный, чтобы правильно отображаться в зеркале. Прочие производители использовали генераторы шрифтов, что очень неудобно. Я же решил скроллировать все, что захочет пользователь, в том числе форматированный текст. Для получения зеркального TTF я хотел изменить систему координат, чтобы векторы направились в противоположную сторону...
В конечном итоге, рисовал на битмапе, который зеркалил. Терял скорость скроллинга на старых машинах, что снижало конкурентность программы. В данное время программа генерирует шрифт из TTF прозрачно для пользователя, правда, форматирование урезано. Но! Дикторов, читающих текст, может быть несколько, и одному удобен такой шрифт, другому - такой... Генерировать и сохранить все варианты мне кажется некрасиво. А генерация между сменой дикторов рискована потерей времени, что в телекомпании недопустимо.
Сейчас я знаю решение этой проблемы, надо будет выкроить время и переделать все. Но опять же - решение обходное. А вот как сказать векторам шрифта, что система координат теперь другая?


 
KilkennyCat ©   (2004-06-28 09:08) [16]

Извиняюсь за оффтоп.


 
MBo ©   (2004-06-28 09:40) [17]

полноценное решение (быстрое и с использованием встроенного растеризатора с анталиасингом) возможно только в NT-системах

var
 XF: TXForm;
 DC: HDC;
begin
 SetXFScale(XF, -1, 1);
 AddXFShift(XF, Width, 0);
//или просто задать XF.em11=-1, edx - сдвиг на ширину
 DC := Canvas.Handle;
 SetGraphicsMode(DC, GM_ADVANCED);
 SetWorldTransform(DC, XF);
 TextOut(DC, 100, 100, "Зеркально", 9);


 
KilkennyCat ©   (2004-06-28 10:01) [18]


> MBo ©   (28.06.04 09:40) [17]


Хм... а ведь я знал его - SetWorldTransform... Только не знал ограничение onlyNT, а в то время работал на 98, и он у меня не пошел... и все-таки, не люблю фразы типа "Бест вью ИЕ 5 800х600" :)


 
KilkennyCat ©   (2004-06-28 10:03) [19]

Забыл сказать - спасибо! Буду иметь ввиду. В принципе, права на программу мне уже дано не принадлежат, но я обещал поддерживать бесплатно, так что если их OnlyNT устроит...


 
KilkennyCat ©   (2004-06-29 01:26) [20]

Может, это поможет сабжу?

http://www.delphisyte.ru/Articles/base/filereaderwriter_thread.html



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.036 c
1-1088501501
GooFfy
2004-06-29 13:31
2004.07.11
Использование помощи


6-1084770253
Graf
2004-05-17 09:04
2004.07.11
Работа TCP под ДОС


1-1088079850
*boba*
2004-06-24 16:24
2004.07.11
VK_DELETE?


6-1084556961
xman
2004-05-14 21:49
2004.07.11
Sockets


6-1084438151
xman
2004-05-13 12:49
2004.07.11
пересылка картинки по стеи





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