![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
2 вопроса про Коллекцию.
DimaBr © (2006-04-17 10:05:00)Здравствуйте !
1. Компонент имеет коллекцию, элемент которой ссылается на произвольный компонент
TMyCollectionItem = class(TCollectionItem)
private
fSelectedItems: TComponent;
published
property SelectedItem: TComponent read fSelectedItems write fSelectedItems;
end;
При выборе в редакторе коллекции очередного итема нужно чтобы фокус перемещался на SelectedItemи в дизайнере отображались свойства выбранного компонента (а не элемента коллекции). Для этого я написал свой редактрор коллекции. Можно ли "видоизменить" стандартный CollectionEditor чтобы достигнуть того же результата.
2. Имея на форме компонент с такой коллекцией есть ли вероятность того, что компонент (на который ссылается элемент коллекции) окажется записанный в DFM после компонета с коллекцией. То есть:
object MyComponent: TMyComponent
CollectionItems = <
item
SelectedItem = Database1
end>
end
...
object Database1: TDatabase
end
тогда при создании коллекции должна выскочить ошибка. Как с этим можно бороться ?
Юрий Зотов (2006-04-17 15:01:00) [1]> DimaBr (17.04.06 14:12) [3]
Нестыковки такого рода разрешаются потоковым механизмом чтения DFM.
object Form1: TForm1
Menu = MainMenu1
object MainMenu1: TMainMenu
object MenuItem1: TMenuItem
Action = Action1
end
end
object ActionList1: TActionList
object Action1: TAction
Caption = 'aaa'
OnExecute = Action1Execute
end
end
end
И все прекрасно работает.
DimaBr (2006-04-17 14:12:00) [2]
> Юрий Зотов ©
Я это понимаю, и реализовал уже. Возникло сомнение по поводу чтения из ресурса ссылки на несуществующий в то времякомпонент. А что скажете по первому вопросу ?
Юрий Зотов (2006-04-17 13:58:00) [3]Ошибка выскочит, если компонент, на который ссылается Item, будет удален с формы - получим полнейший Access Violation.
Вместо прямого доступа к полю по записи используйте Set и заставьте компонент (владелец коллекции) получать уведомления от компонентов, на которые ссылаются элементы коллекции (FreeNotification). Получив такое уведомление, компонент шлет его коллекции, та рассылает его всем своим элементам, а они очищают битые ссылки.
jack128 (2006-04-17 11:08:00) [4]DimaBr (17.04.06 10:05)
тогда при создании коллекции должна выскочить ошибка.
не должна.
object db: TIBDatabase
DefaultTransaction = ROTransaction
end
object ROTransaction: TIBTransaction
DefaultDatabase = db
end
Все нормально работает ;-) если интересно как именно это разруливается - см исходники Classes.TReader