Форум: "Компоненты";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Внизrecord как published свойство Найти похожие ветки
← →
han (2004-06-24 16:37) [0]Есть тип
Taaa = record
i: Integer;
a: String
end;
Есть класс у которого есть published свойство этого типа. Но в object инспекторе ничего не видно на счет этого св-ва. Неужели надо писать свой редактор свойств?????
← →
Юрий Зотов © (2004-06-24 16:50) [1]Для record - да. Но если преобразовать в объект (потомок TPersistent), то сработает стандартный редактор.
← →
han (2004-06-24 17:25) [2]Свойство оно мне написало в object inspector, а вот при нажатии на "+" ничего не разворачивает...
TIniSettings = class(TPersistent)
public
АileName: String;
Section : String;
end;
че не так?
← →
VMcL © (2004-06-24 17:40) [3]>>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:49) [4]не помогает
← →
DrPass © (2004-06-24 22:52) [5]А инициализация в конструкторе?» Юрий Зотов:» Вероятно, инициализация свойства в конструкторе на работу редактора этого свойства все же не повлияет?
← →
Юрий Зотов © (2004-06-25 13:29) [6]> han (24.06.04 17:49) [4]
Так не бывает. Не сработать [3] просто не может. Значит, что-то Вы делаете не так, как показано в [3].
← →
malkolinge © (2004-06-25 15:08) [7]
> Юрий Зотов © (25.06.04 13:29) [6]
> > han (24.06.04 17:49) [4]
>
> Так не бывает. Не сработать [3] просто не может. Значит,
> что-то Вы делаете не так, как показано в [3].
Ну причинЫ может быть две :
1. само свойство надо вынести в паблишед секцию :)
2. Екземпляр объекта создать ( хотя в этом случае, редактор свойств подниметься, но будет АВ)
← →
Igorek © (2004-06-25 15:41) [8]
> 1. само свойство надо вынести в паблишед секцию :)
Так свойство у него видно в єдиторе. Не видны его подсвойства.
← →
DrPass © (2004-06-27 15:57) [9]
> » Юрий Зотов:
> » Вероятно, инициализация свойства в конструкторе на работу
> редактора этого свойства все же не повлияет?
Очевидно, что очень даже повлияет - если свойство представляет собой экземпляр класса. Что будет, если вы опустите в конструкторе компоненты строку FIniSettings:=TIniSettings.Create?
← →
Юрий Зотов © (2004-06-28 12:12) [10]> DrPass © (27.06.04 15:57) [9]
Если в [5] под словом "инициализация" имелось в виду создание экземпляра класса (а не инициализация его свойств), то Вы, безусловно, правы. Если так, то я Вас просто не понял (был сбит с толку самим термином) и приношу свои извинения.
Но надо полагать, что объект все же создается. Ведь иначе первое, что автор вопроса сразу увидел бы в design-time, было всеми нами любимое AV, о котором он ничего не упоминает - и значит, проблема не в этом.
Как говорилось в [2] и [4], проблема в том, что не разворачивается список подсвойств - а это может быть по двум причинам: либо вместо свойств использованы поля, либо свойства не вынесены в published. То есть, не соблюдено все то, что было показано в [3].
← →
DrPass © (2004-06-28 13:41) [11]
> Ведь иначе первое, что автор вопроса сразу увидел бы в design-time,
> было всеми нами любимое AV, о котором он ничего не упоминает
> - и значит, проблема не в этом
Только что специально проверил - если объявить свойство-объект как published, но не создать его экземпляр, Delphi отображает его в Инспекторе, но не позволяет с ним работать (это естественно). AV при этом не возникает. Впрочем, это может зависеть от версии Delphi. Я пробовал на седьмой
← →
Юрий Зотов © (2004-06-28 17:35) [12]> 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;
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.047 c