Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

Знатокам написания компонентов   Найти похожие ветки 

 
ЕвгенийВ   (2004-03-10 15:50) [0]

Здравствуйте!

У своего компонента сделал свойство коллекцию. У элемента коллекции одна свойство: ссылка на TAction.
При наследовании формы от формы, на которой лежит компонент возникает ошибка: Action указывает на на action на форме-наследника, а на Action на форме предке.

Как исправить?

[code]
TMyToolBarItem = class (TCollectionItem)
   ...
 published
   ...
   property Action: TAction read FAction write SetAction;
 end;

TMyToolBarItems = class (TCollection)
 ...
 property Items[Index: Integer]: TMyToolBarItem read GetItem
    write SetItem; default;
 end;

TMyToolBar = class (TCustomControl)
 ...
 published
   property Items: TMyToolBarItems read FItems write SetItems;
 end;

unit Card;
 TCardForm = class(TMediatorMultyForm)
   ActionList1: TActionList;
   SaveA: TAction;
   MyToolBar1: TMyToolBar;
   ...
 end

unit OSInCard2;
 TOSInCardForm2 = class(TCardForm)
 ...
 end;

[/code]

В модуле OSInCard2 написано
 inherited MyToolBar1: TMyToolBar
   Width = 732
   Items = <
   item
   Action = CardForm.SaveA
   end>  

А не Action = SaveA.

Как исправить?

--
С уважением, Евгений.


 
ЕвгенийВ   (2004-03-10 16:22) [1]

Наверх.


 
ЕвгенийВ   (2004-03-12 09:53) [2]

Знатоков нету, что ли?


 
ЕвгенийВ   (2004-03-15 10:54) [3]

Юрий Зотов, где Вы?


 
Юрий Зотов ©   (2004-03-15 18:37) [4]

Где, где... Видел я это вопрос, только непростой он и отвечать на него подробно - замучаешься, очень много тонкостей и целая намаленькая и непростая статья получится. А отвечать неподробно - есть ли смысл...

Ладно, давайте пробовать, а там увидим. Фокус в том, что в коде VCL элементы коллекций и их свойства сохраняются в DFM всегда, независимо от наследования - вот потому они наследования не понимают. Сравните, например, с тем, как сохраняются строки в TStrings - только в том случае, если в наследнике они отличаются от предка. Посмотрите TStrings.DefineProperties и (вот что самое главное!!!) - разберите код DoWrite и Equals до самого последнего винтика, чтобы все было абсолютно понятно.

Вот и Вам нужно сделать что-то подобное для свойства Action. И еще - что поизойдет, если Action, на который ссылается Item будет удален? Как только Item обратится к нему по своей ссылке, получим Access Violation. Чтобы этого не было, в SetAction свяжите Action c Вашим тулбаром через FreeNotification, а в Notification самого тулбара при opRemove очищайте ссылку в соответствующем Item"е (но только при условии - not (csDestroying in ComponentState).


 
Юрий Зотов ©   (2004-03-15 18:37) [5]

Где, где... Видел я это вопрос, только непростой он и отвечать на него подробно - замучаешься, очень много тонкостей и целая намаленькая и непростая статья получится. А отвечать неподробно - есть ли смысл...

Ладно, давайте пробовать, а там увидим. Фокус в том, что в коде VCL элементы коллекций и их свойства сохраняются в DFM всегда, независимо от наследования - вот потому они наследования не понимают. Сравните, например, с тем, как сохраняются строки в TStrings - только в том случае, если в наследнике они отличаются от предка. Посмотрите TStrings.DefineProperties и (вот что самое главное!!!) - разберите код DoWrite и Equals до самого последнего винтика, чтобы все было абсолютно понятно.

Вот и Вам нужно сделать что-то подобное для свойства Action. И еще - что поизойдет, если Action, на который ссылается Item будет удален? Как только Item обратится к нему по своей ссылке, получим Access Violation. Чтобы этого не было, в SetAction свяжите Action c Вашим тулбаром через FreeNotification, а в Notification самого тулбара при opRemove очищайте ссылку в соответствующем Item"е (но только при условии - not (csDestroying in ComponentState).


 
Юрий Зотов ©   (2004-03-15 18:39) [6]

Эва, блин, как сервак-то колбасит... Сорри за повтор, только я не виноват, чесслово.



Страницы: 1 вся ветка

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.039 c
3-1078923176
Лысый
2004-03-10 15:52
2004.04.04
Запрос


1-1079437821
PaR
2004-03-16 14:50
2004.04.04
Работа с текстом...


14-1078425073
Andryk
2004-03-04 21:31
2004.04.04
А вот есть вопросец. По поводу рекламы на поисковиках


4-1074605528
menart
2004-01-20 16:32
2004.04.04
Диалоговое окошко входа в домен!


14-1079014738
BKV
2004-03-11 17:18
2004.04.04
Работа для программиста.