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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Свойство которое непонятно как работет. Обясните что кчему. 
V
    Опции темы
ivan219
  Дата 12.2.2007, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



Есть вопросы:
Код

type
  TMyLabeledEdit = class(TCustomLabeledEdit)
  protected
    Cheked: Boolean;
  public
    constructor Create(AOwner: TComponent); override;
    procedure Change; override;
  published
.
.
    property RealChar: Boolean Read Cheked Write Cheked default True;
.
.

А интересует меня вот это:
Код

 property RealChar: Boolean Read Cheked Write Cheked default True;

Почему когда я делаю default True;то после регестрации компонента свойство RealChar перестаёт действовать т.е. оно есть но никаких действий не вызывает переменная Cheked так и остаётся False и ещё в инспекторе свойство RealChar отображается как False smile 

А если без него:
Код

property RealChar: Boolean Read Cheked Write Cheked;

То всё работает, Cheked и RealChar в начале находится в False как это исправить smile ну кроме как в Create прописать.

И ещё непонятно зачем нужно сночало записывать в переменную  Read Cheked а потом из неё читать Write Cheked; когда мне нужно всеголиш присвоить переменной Cheked значение RealChar
Но если делать так:
Код

property RealChar: Boolean Read Cheked;

То свойство в инспекторе вобще непоявляется smile почему smile

Это сообщение отредактировал(а) ivan219 - 12.2.2007, 02:58
PM MAIL ICQ   Вверх
Beltar
Дата 12.2.2007, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

И ещё непонятно зачем нужно сночало записывать в переменную  Read Cheked а потом из неё читать Write Cheked; когда мне нужно всеголиш присвоить переменной Cheked значение RealChar


А как по-твоему, когда ты в инспекторе его значение меняешь, его записать разве никуда не нужно? Совершенно логичное поведение, Read Only свойству в инспекторе делать нечего.

Вот что написано в хелпе:

The optional stored, default, and nodefault directives are called storage specifiers. They have no effect on program behavior, but control whether or not to save the values of published properties in form files.
 
The stored directive must be followed by True, False, the name of a Boolean field, or the name of a parameterless method that returns a Boolean value. For example,
 property Name: TComponentName read FName write SetName stored False;
If a property has no stored directive, it is treated as if stored True were specified.
 
The default directive must be followed by a constant of the same type as the property. For example,
 property Tag: Longint read FTag write FTag default 0;
To override an inherited default value without specifying a new one, use the nodefault directive. The default and nodefault directives are supported only for ordinal types and for set types, provided the upper and lower bounds of the set's base type have ordinal values between 0 and 31; if such a property is declared without default or nodefault, it is treated as if nodefault were specified. For reals, pointers, and strings, there is an implicit default value of 0, nil, and '' (the empty string), respectively.
 Note: 
 You can't use the ordinal value 2147483648 has a default value. This value is used internally to represent nodefault. 
 

When saving a component's state, the storage specifiers of the component's published properties are checked. If a property's current value is different from its default value (or if there is no default value) and the stored specifier is True, then the property's value is saved. Otherwise, the property's value is not saved.
 Note: 
 Property values are not automatically initialized to the default value. That is, the default directive controls only when property values are saved to the form file, but not the initial value of the property on a newly created instance.
 
Storage specifiers are not supported for array properties. The default directive has a different meaning when used in an array property declaration. See Array Properties, above.


Так что всю раздачу значений в конструкторе.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Snowy
Дата 12.2.2007, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



default не назначает свойству значения.
Оно всего лишь говорит, что его не нужно сохранять, если оно true.
А назначить его нужно ручками в конструкторе.
Чтобы проперть можно было менять в инспекторе, она должна быть сохраняемой и восстанавливаемой.
То есть иметь и read и write. Иначе нет смысла его сохранять, если нельзя обратно прочитать.
Если не будет read или write, пропертя просто не сможет сериализоваться и не будет прописана в dfm файл.
А раз так, то и в инспекторе ей делать нечего smile
PM MAIL   Вверх
ivan219
Дата 12.2.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



Цитата(Snowy @  12.2.2007,  09:56 Найти цитируемый пост)
default не назначает свойству значения.
Оно всего лишь говорит, что его не нужно сохранять, если оно true.

Теперь понятно почему оно у меня не работало мне надо было в True а в True оно не сохраняет smile так и оставалось в False smile 
Цитата(Snowy @  12.2.2007,  09:56 Найти цитируемый пост)
А назначить его нужно ручками в конструкторе.

А я думал что default True; это тоже самое что и Cheked:=True; smile 

Ну теперь всё понятно спасибо smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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