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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.045 c
2-1164737960
Ezorcist
2006-11-28 21:19
2006.12.17
вопрос про uses


2-1165056870
Kotik
2006-12-02 13:54
2006.12.17
Работа с текстом


2-1164957794
Посторонний
2006-12-01 10:23
2006.12.17
Преобразование целого числа в набор битов


15-1164489407
Дмитрий Белькевич
2006-11-26 00:16
2006.12.17
Шедулер. Как лучше делать.


2-1164590343
NovaC
2006-11-27 04:19
2006.12.17
Закрыть окно консоли в Delphi