Форум: "Компоненты";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
Вниз2 вопроса про Коллекцию. Найти похожие ветки
← →
DimaBr (2006-04-17 10:05) [0]Здравствуйте !
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
тогда при создании коллекции должна выскочить ошибка. Как с этим можно бороться ?
← →
jack128 © (2006-04-17 11:08) [1]DimaBr (17.04.06 10:05)
тогда при создании коллекции должна выскочить ошибка.
не должна.object db: TIBDatabase
DefaultTransaction = ROTransaction
end
object ROTransaction: TIBTransaction
DefaultDatabase = db
end
Все нормально работает ;-) если интересно как именно это разруливается - см исходники Classes.TReader
← →
Юрий Зотов © (2006-04-17 13:58) [2]Ошибка выскочит, если компонент, на который ссылается Item, будет удален с формы - получим полнейший Access Violation.
Вместо прямого доступа к полю по записи используйте Set и заставьте компонент (владелец коллекции) получать уведомления от компонентов, на которые ссылаются элементы коллекции (FreeNotification). Получив такое уведомление, компонент шлет его коллекции, та рассылает его всем своим элементам, а они очищают битые ссылки.
← →
DimaBr (2006-04-17 14:12) [3]
> Юрий Зотов ©
Я это понимаю, и реализовал уже. Возникло сомнение по поводу чтения из ресурса ссылки на несуществующий в то время компонент. А что скажете по первому вопросу ?
← →
Юрий Зотов © (2006-04-17 15:01) [4]> 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
И все прекрасно работает.
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c