![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
record как published свойство [D6, WinXP]
han © (2004-06-24 16:37:00)Есть тип
Taaa = record
i: Integer;
a: String
end;
Есть класс у которого есть published свойство этого типа. Но в object инспекторе ничего не видно на счет этого св-ва. Неужели надо писать свой редактор свойств?????
Юрий Зотов (2004-06-28 17:35:00) [1]> DrPass © (28.06.04 13:41) [11]
Да, все так и есть (по крайней мере, в семерке).
> han
В общем, вот полный код:
type
TMyObject = class(TPersistent)
private
FStr: string;
FInt: Integer;
protected
procedure AssignTo(Target: TPersistent); override;
published
property Str: string read FStr write FStr;
property Int: Integer read FInt write FInt;
end;
TMyComponent = class(TComponent)
private
FMyObj: TMyObject;
procedure SetMyObj(const Value: TMyObject);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property MyObj: TMyObject read FMyObj write SetMyObj;
end;
{ TMyObject }
procedure TMyObject.AssignTo(Target: TPersistent);
begin
if Target is TMyObject then
with TMyObject(Target) do
begin
Str := Self.Str;
Int := Self.Int
end
else
inherited
end;
{ TMyComponent }
constructor TMyComponent.Create(AOwner: TComponent);
begin
inherited;
FMyObj := TMyObject.Create
end;
destructor TMyComponent.Destroy;
begin
FMyObj.Free;
inherited
end;
procedure TMyComponent.SetMyObj(const Value: TMyObject);
begin
FMyObj.Assign(Value)
end;
DrPass (2004-06-28 13:41:00) [2]
> Ведь иначе первое, что автор вопроса сразу увидел бы в design-time,
> было всеми нами любимое AV, о котором он ничего не упоминает
> - и значит, проблема не в этом
Только что специально проверил - если объявить свойство-объект как published, но не создать его экземпляр, Delphi отображает его в Инспекторе, но не позволяет с ним работать (это естественно). AV при этом не возникает. Впрочем, это может зависеть от версии Delphi. Я пробовал на седьмой
Юрий Зотов (2004-06-28 12:12:00) [3]> DrPass © (27.06.04 15:57) [9]
Если в [5] под словом "инициализация" имелось в виду создание экземпляра класса (а не инициализация его свойств), то Вы, безусловно, правы. Если так, то я Вас просто не понял (был сбит с толку самим термином) и приношу свои извинения.
Но надо полагать, что объект все же создается. Ведь иначе первое, что автор вопроса сразу увидел бы в design-time, было всеми нами любимое AV, о котором он ничего не упоминает - и значит, проблема не в этом.
Как говорилось в [2] и [4], проблема в том, что не разворачивается список подсвойств - а это может быть по двум причинам: либо вместо свойств использованы поля, либо свойства не вынесены в published. То есть, не соблюдено все то, что было показано в [3].
DrPass (2004-06-27 15:57:00) [4]
> » Юрий Зотов:
> » Вероятно, инициализация свойства в конструкторе на работу
> редактора этого свойства все же не повлияет?
Очевидно, что очень даже повлияет - если свойство представляет собой экземпляр класса. Что будет, если вы опустите в конструкторе компоненты строку FIniSettings:=TIniSettings.Create?
Igorek (2004-06-25 15:41:00) [5]
> 1. само свойство надо вынести в паблишед секцию :)
Так свойство у него видно в єдиторе. Не видны его подсвойства.
malkolinge (2004-06-25 15:08:00) [6]
> Юрий Зотов © (25.06.04 13:29) [6]
> > han (24.06.04 17:49) [4]
>
> Так не бывает. Не сработать [3] просто не может. Значит,
> что-то Вы делаете не так, как показано в [3].
Ну причинЫ может быть две :
1. само свойство надо вынести в паблишед секцию :)
2. Екземпляр объекта создать ( хотя в этом случае, редактор свойств подниметься, но будет АВ)
Юрий Зотов (2004-06-25 13:29:00) [7]> han (24.06.04 17:49) [4]
Так не бывает. Не сработать [3] просто не может. Значит, что-то Вы делаете не так, как показано в [3].
DrPass (2004-06-24 22:52:00) [8]А инициализация в конструкторе? » Юрий Зотов: » Вероятно, инициализация свойства в конструкторе на работу редактора этого свойства все же не повлияет?
han (2004-06-24 17:49:00) [9]не помогает
VMcL (2004-06-24 17:40:00) [10]>>han (24.06.04 17:25) [2]
TIniSettings = class(TPersistent)
published
propertyАileName: String read ...;
property Section: String read ...;
end;
?
han (2004-06-24 17:25:00) [11]Свойство оно мне написало в object inspector, а вот при нажатии на '+' ничего не разворачивает...
TIniSettings = class(TPersistent)
public
АileName: String;
Section : String;
end;
че не так?
Юрий Зотов (2004-06-24 16:50:00) [12]Для record - да. Но если преобразовать в объект (потомок TPersistent), то сработает стандартный редактор.