![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение published-свойств в поток [D6, Win2k]
cult © (2002-10-25 15:30:00)Господа, вот такой вопрос:
есть ли в Дельфи штатная возможность НЕ сохранять одно или несколько Published-свойств в поток?
т.е. я хочу сохранять туда не полный их список, а за некоторым исключением.
Спасибо.
cult (2002-10-25 16:25:00) [1]reonid , Юрий Зотов:
похоже, это именно то, что я искал. Если stored действительно может быть не константой, а процедурой, то проблема решена. Буду пробовать, спасибо.
skier:
без Вас диалог бы не состоялся :) Спасибо.
Юрий Зотов (2002-10-25 16:17:00) [2]Класс-предок:
published
property SomeProp.... // что угодно, это неважно
...
Ваш класс-потомок:
private
function IsSomePropStored: boolean;
...
published
property SomeProp stored IsSomePropStored;
...
function ...IsSomePropStored: boolean;
begin
Result := csDesigning in ComponentState // и что угодно еще
end;
После этого в run-time можно использовать стандартное сохранение компонента в поток и свойство сохраняться не будет. В design-time все останется по-прежнему.
reonid (2002-10-25 16:16:00) [3]Насколько я помню, в директиве stored можно указать функцию - соответственно, с её помощью можно управлять сохранением "на ходу".
Можно также написать вручную сохранение всех св-в -
но это геморройно, там слишком много всяких частных случаев.
(Хотя тоже ничего сверъестественного)
cult (2002-10-25 16:07:00) [4]это все не совсем то, что надо...
Есть класс, в котором некоторые свойства объявлены Published именно и только для того, чтобы автоматически писаться в поток.
Однао обнаружилось, что в ряде случаев некоторые из этих Published-свойств не потребуются при последующем чтении, и писать их в поток не нужно. В-принципе, каждое свойство может оказаться таким "ненужным". Получается, что мне нужно делать Stored False для всех published-свойств, а потом, при записи, указывать, какие из них писать, а какие нет? Тогда пропадают все преимущества публикуемых свойств. Вот я и спрашиваю - а можно ли "на ходу" отменять эту "записываемость" для свойства?
Я еще не надоел? Тогда жду ответа :)
Спасибо.
Skier (2002-10-25 16:00:00) [5]>cult
И поставь у нужного св-ва Stored False
Skier (2002-10-25 15:58:00) [6]>cult
Можно.
Объяви свой потомок...
cult (2002-10-25 15:55:00) [7]т.е., если свойство объявлено со Stored True, то отменить его сохранение уже нельзя? :(
Skier (2002-10-25 15:48:00) [8]>cult
> вы мне предлагаете все Published - свойства объявить изначально
> со Stored:=false
1) Не все, а только те, которые не нужно писать в поток
2) Не Stored:=false, а просто Stored False
(см. Skier © (25.10.02 15:32) и Игорь Шевченко ©
(25.10.02 15:39))
cult (2002-10-25 15:45:00) [9]я, честно говоря, только начинаю заниматься проработкой вопроса.
т.е. вы мне предлагаете все Published - свойства объявить изначально со Stored:=false и потом в явном виде заставлять их записываться в поток?
Skier (2002-10-25 15:39:00) [10]>cult
А ты их пишешь разве не через TWriter ?!
Игорь Шевченко (2002-10-25 15:39:00) [11]Stored False;
cult (2002-10-25 15:35:00) [12]так это Design-Time!
а мне надо писать компонент в поток во время выполнения, и при этом не писать туда некоторые из published-свойств, вот как стоит вопрос
Skier (2002-10-25 15:32:00) [13]>cult
есть
например написать :
YourProperty : TYourType read...write...stored False