Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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
14-1117898334
Juice
2005-06-04 19:18
2005.06.29
NTFS ный диск под 98 ой


14-1117908515
Udaff
2005-06-04 22:08
2005.06.29
проблема с печатью


14-1117175981
redlord
2005-05-27 10:39
2005.06.29
сервер Lineage2


1-1117695588
Egor
2005-06-02 10:59
2005.06.29
Ассоциировать файл с программой


14-1117491469
KilkennyCat
2005-05-31 02:17
2005.06.29
Если кому нужна работа в Петербурге





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский