Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо