Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблемы с TPersistent, не получается добавить свои объекты 
:(
    Опции темы
artemiy
Дата 23.3.2007, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 22.2.2007

Репутация: нет
Всего: нет



Прочитал статью http://forum.vingrad.ru/topic-94245/view-all.html и решил в стандартный пример добавить свой элементы и попытаться сохранить его. Первый запуск и сохранение произошло нормально. А вот уже на втором запуске вылетела ошибка ("access violation...", строка 6):
Код

procedure ReadObj(obj: TPersistent; st: TStream);
begin
  with TObjReader.Create(st, 1) do
  begin
    while st.Position < st.Size do
    try ReadProperty(obj); except Continue; end;
    Free;
  end;
end;

Где я не прав и что нужно исправить? Исходники в приложении. А то голова в конце недели слабо соображает ))

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  2.rar 3,32 Kb
PM MAIL   Вверх
Snowy
Дата 23.3.2007, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



C контролами данный пример не работает - контролы требуют особого обращения.
Заведи переменную, типа string и пусть она ссылается на Memo.Text.
Тебе ж только текст сохранять нужно.
PM MAIL   Вверх
artemiy
Дата 23.3.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 22.2.2007

Репутация: нет
Всего: нет



Ну в принципе да. Но это я взял только для примера, чтобы разобраться как все работает. А вообще мне нужно будет сохранять свои собственные типы. 
Надеюсь с этим проблем не будет? Ща попробую...
PM MAIL   Вверх
artemiy
Дата 24.3.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 22.2.2007

Репутация: нет
Всего: нет



Попробовал сохранять собственные типы. Теперь все работает без ошибок, но, правда, и не сохраняет :(  smile 
Может быть здесь что то не так?
Код

type
  TOptions = class(TPersistent)
  private
    FMyStr: string;
    FDateTime: TDateTime;
    FStrings: MyType;
  published
    property DateTime: TDateTime read FDateTime write FDateTime;
    property MyStr: string read FMyStr write FMyStr;
    property Text: MyType read FStrings write FStrings;
  end;


Это сообщение отредактировал(а) artemiy - 26.3.2007, 12:26

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  2.rar 3,36 Kb
PM MAIL   Вверх
Snowy
Дата 26.3.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Сохраняются только published property.
А твой MyType - это record. Естественно у него нет published пропертей. Вот и не сохраняется.
PM MAIL   Вверх
artemiy
Дата 26.3.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 22.2.2007

Репутация: нет
Всего: нет



Цитата(Snowy)

А твой MyType - это record. Естественно у него нет published пропертей. Вот и не сохраняется.

Понятно...
А есть ли возможность как нибудь сохранить такой record (или еще лучше массив таких record-ов)? Или тут уже TPersistent не поможет?
PM MAIL   Вверх
Snowy
Дата 26.3.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Можно, но это нужно прописывать вручную.
Лучше преврати свой record в наследника от TPersistent и проблема сама пропадёт smile 
PM MAIL   Вверх
artemiy
Дата 28.3.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 22.2.2007

Репутация: нет
Всего: нет



Цитата(Snowy)

Лучше преврати свой record в наследника от TPersistent

Вроде бы превратил... Но все равно не сохраняется массив из этих классов :( Может быть я что то неправильно делаю? (До этого с классами я вообще не работал, поэтому не совсем уверен в правильности моих действий)...

Это сообщение отредактировал(а) artemiy - 28.3.2007, 17:45

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Class_Test.rar 2,79 Kb
PM MAIL   Вверх
Snowy
Дата 28.3.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Массивы и списки нельзя разместить в published секции.
Сохраняются исключительно только published свойства.
Всё остальное в автомате сохраняться не будет - только ручками и это отдельная песня.
PM MAIL   Вверх
artemiy
Дата 28.3.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 22.2.2007

Репутация: нет
Всего: нет



Какая жаль... Так хотелось этот TPersistent использовать для облегчения себе жизни... Ладно, будем искать другие методы  smile 

Спасибо за помощь  ;)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0834 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.