Логин:     Забыли пароль?
 
Пароль:   Регистрация

Форум / Программирование - Свойство ParentBackground компонента Panel и XPManifest. Ахтунг!  

Свойство ParentBackground компонента Panel и XPManifest. Ахтунг!


Страницы: «1» «2» «3»
SOA
SOA
Посетитель
Сообщения: 3
[Сообщение #11] 17 июня 2010, 13:54
Покачто к проектам это никак не относится просто задел на будущее, потому что часто хочется изменить цвет того или иного компонента, того же тракбара, но в присутствии XPManifest не получается.

Ерёмин А.А.
Ерёмин А.А.
*Администратор
Сообщения: 435
[Сообщение #12] 17 июня 2010, 15:08

Цитата (Вадим К):

так это не глюк, а нормальное поведение. Если бы ParentBackground осталось true, то ничего не поменялось.

См. внимательнее моё сообщение и сообщение DNK — в D7 (или в какой там версии это тестировалось?) при изменении Color оно менялось на False, но эффекта не имело: его нужно было принудительно ещё раз сбросить в False. По крайней мере, я понял так. D7 у меня уже года два нет, так что проверить не могу.

Цитата (min@y™):

Компонент TXPManifest на прорисовку не влияет, он просто добавляет в ЕХЕ текстовый ресурс манифеста

Угу, а потом (в BDS 2006 уже точно) этого вовсе не нужно делать — там Delphi сама всё делает как надо. Соответственно, многих глюков, идущих от этого XPManifest, может уже и не быть.

DNK
DNK
Студент
Сообщения: 242
[Сообщение #13] 17 июня 2010, 16:13
При изменении Color ничего не менялось. У меня ParentBackground как было изначально False так и остается, вне зависимости присутвует манифест или нет. Я обращал внимание на то, что в режиме дизайна и при работе программы свойство принимает разные значения. Это может запутать программера. У меня такая теория.

В режиме дизайна оно принимает значение false. Дизайнер форм смотрит, что это значение не отличается от default-значения и соответственно не заносит установку его в dfm-файл.

В дальнейшем при запуске программы из-за присутствия манифеста get-метод возвращает для этого свойства начальное значение true. Так как в dfm-файле не присутствует установка этого значения, то оно и остаётся в true.

Хотя может как-то сыграло роль то, что это stored-свойство. Кто бы популярно объяснил что это такое?

"Digital Networked Knight"
min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #14] 17 июня 2010, 16:50

Цитата (DNK):

Хотя может как-то сыграло роль то, что это stored-свойство. Кто бы популярно объяснил что это такое?


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.

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
DNK
DNK
Студент
Сообщения: 242
[Сообщение #15] 17 июня 2010, 17:30
min@y™: С каких это пор скопировать хелп у нас называется популярно объяснить. Зачем-то ещё default и nodefault директивы приплел. Хорошо хоть гуглить не послал.

Если в качестве параметра stored-директивы указаны константы, всё чётко. А как это работает, если в качестве параметра используется переменная, нигде нет.

"Digital Networked Knight"
min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #16] 17 июня 2010, 18:09

Цитата (DNK):

С каких это пор скопировать хелп у нас называется популярно объяснить


Какой ты привередливый! Прям не угодишь!


Директива stored

Эта директива предназначена для жесткого определения — сохранять значение свойства в файле формы или нет. Она добавляется в конец определения свойства, и после нее должно идти либо булево (boolean — FALSE или TRUE) значение, либо функция, возвращающая булево значение, либо поле булевого типа. Если булево значение ИСТИНА (TRUE), то сохранение значения свойства происходит, если ЛОЖЬ (FALSE) — нет. Этот механизм может быть полезен, если существует какая-либо избыточность полей и соответствующих им свойств. Возможно совместное использование директив default и stored. Пример (взят из модуля Controls):

TControl = class(TComponent)
private
  ...
    function IsEnabledStored: Boolean;
  ...
  public
  ...
    property Enabled: Boolean read GetEnabled write SetEnabled stored
      IsEnabledStored default True;
  ...
end;


Взял тут.

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
DNK
DNK
Студент
Сообщения: 242
[Сообщение #17] 17 июня 2010, 18:53
Тут нет объяснения как это работает.

"Digital Networked Knight"
min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #18] 17 июня 2010, 19:01

Цитата (DNK):

Тут нет объяснения как это работает.


Слышь, а чо ты мне претензии предъявляешь? Я тебе, чо, должен, что ли? Не нравится инфа в моих постах - весь интернет перед тобой. Плюс исходники компонентов Delphi.
Нахрена вообще нужна эта тема? Ведб ясно же, что PArentBackground должно быть равно False, чтобы контрол рисовался своим цветом. Чего ещё надо-то?

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
DNK
DNK
Студент
Сообщения: 242
[Сообщение #19] 17 июня 2010, 19:40
А то и предъявляю, что твои посты пусты (это которые про stored). Ничего нового из них я не узнал. Когда я просил объянить как работает stored-механизм, я не обращался конкретно к тебе, поэтому мог промолчать. Вдруг бы появился человек, который владеет темой.

Успокойся и внимательно перечитай тему сначала. Я веду её к тому, чтобы не латать последствия описанного мной бага, а докопаться до его первопричины.

"Digital Networked Knight"
min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #20] 17 июня 2010, 19:49

Цитата (DNK):

Я веду её к тому, чтобы не латать последствия описанного мной бага, а докопаться до его первопричины.

Нахрена оно надо? Что ты будешь делать, когда докопаешься?

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Страницы: «1» «2» «3» (всего страниц: 3, текущая: 2)
Всего сообщений: 27 (сейчас показаны: с 11 по 20)

Перейти в раздел:


 © 2004 - 2025, Delphi.int.ru
Версия форума: 1.10 (19.01.2010)
RSS Delphi.int.ru Expert Код
Выполнено за 0.03 сек.
Обратная связь