Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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.45 MB
Время: 0.046 c
15-1164352122
Цитатник
2006-11-24 10:08
2006.12.17
Разработка программ группами программистов.


9-1140343244
ErikD
2006-02-19 13:00
2006.12.17
HELP


15-1164642636
Wolferio
2006-11-27 18:50
2006.12.17
Антивирус в Delphi


4-1154877611
aleksei_c
2006-08-06 19:20
2006.12.17
Захват картинки с окна перекрытого другим


15-1164626092
DVM
2006-11-27 14:14
2006.12.17
Появится ли в Delphi поддержка Win64 в будущем? Есть сведения?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский