Форум: "Основная";
Текущий архив: 2011.04.10;
Скачать: [xml.tar.bz2];
ВнизПустая строка в файле ресурсов Найти похожие ветки
← →
_REA (2009-08-27 13:56) [0]День добрый.
Пытаюсь сохранить String Published Property копонента в файл через сериализацию. Если строка пустая, то она не сохраняется.
Nodefault и Stored True что-то не помогают. Где может быть проблема?
← →
_REA (2009-08-27 14:04) [1]Выкрутился так:
В конструкторе
If Not (csLoading in aOwner.ComponentState) Then
MyNoDefaultString := MyDefValue;
← →
Сергей М. © (2009-08-27 14:17) [2]
private
function NeedStoreMyProp: Boolean;
..
published
property MyProp: String read GetMyProp write SetMyProp stored NeedStoreMyProp;
..
function NeedStoreMyProp: Boolean;
begin
Result := GetMyProp <> "";
end;
← →
_REA (2009-08-27 16:56) [3]2Сергей М.
Обязательно функцию объявлять для Stored?
См. вопрос - мне надо наоборот - сохранить пустую строку (т.к. по умолчанию она как раз не пустая у меня).
А по вашему коду похоже, что пустые строки не надо сохранять, но они и так не сохраняются.
← →
_REA (2009-08-27 16:57) [4]Если еще точнее, то мне надо сохранять все - и пустые и не пустые строки.
← →
Сергей М. © (2009-08-27 17:06) [5]
> Обязательно функцию объявлять для Stored?
Не обязательно.
Можно указать булево поле класса.
> мне надо сохранять все - и пустые и не пустые строки
А можно полюбопытствовать, зачем нужно сохранять пустую строку ?
← →
_REA (2009-08-28 11:28) [6]>Можно указать булево поле класса.
См. выше - для строк не прокатывает почему то.
> А можно полюбопытствовать, зачем нужно сохранять пустую
Смысл такой: в конструкторе присваивается некая строка по умолчанию, которую пользователь может изменить в том числе и на пустую. Если пустая не сохраняется, то при загрузке остается значение присвоенное в конструкторе, а это не есть гуд. Можно конечно присваивать не в конструкторе, но мне удобнее там по соображениям построения класса.
← →
Сергей М. © (2009-08-28 12:21) [7]
> Можно конечно присваивать не в конструкторе, но мне удобнее
> там по соображениям построения класса
Непонятное "удобство" ..
Пояснишь фрагментами кода ?
← →
_REA (2009-08-28 17:05) [8]Код большой, размазан по иерархии классов, разным packages и т.п.
В данном случае начальное значение этой строки определяется самим классом.
Ну как пример: Есть класс TОвощ и унаследован от него TОгурец. Свойство Название будет по умолчанию = Огурец. Но, пользователь может написать ОгЗеленый, или вообще ничего не писать - тогда это будет огурец без названия.
← →
Сергей М. © (2009-08-28 17:30) [9]А это принципиально, чтобы св-во было именно published ?
И по-прежнему не понятно, чем так уж удобно называть его "Огурцом" именно в конструкторе, если с тем же успехом его можно обозвать, к примеру, в перекрытом методе Loaded() ..
← →
_REA (2009-09-02 11:52) [10]>А это принципиально, чтобы св-во было именно published ?
Да. Нужно сохранять название.
>И по-прежнему не понятно, чем так уж удобно называть его "Огурцом" именно в конструкторе, если с тем же успехом его можно обозвать, к примеру, в перекрытом методе Loaded()
Loaded вызывается при загрузке, а до загрузки еще надо создать экземпляр. Он в принципе может быть вообще не сохранен на диск. А может быть и сохранен.
← →
Сергей М. © (2009-09-02 12:03) [11]
> Нужно сохранять название
published для этого, конечно, удобен, но вовсе не обязателен.
См. TPersistent.DefineProperties, TFiler.DefineProperty
> Loaded вызывается при загрузке, а до загрузки еще надо создать
> экземпляр
На момент вызова Loaded экземпляр уже создан.
Читай внимательно (цитата из справки):
When the streaming system loads a form or data module from its form file, it first constructs the form component by calling its constructor, then reads its property values from the form file. After reading all the property values for all the components, the streaming system calls the Loaded methods of each component in the order the components were created. This gives the components a chance to initialize any data that depends on the values of other components or other parts of itself.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2011.04.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c