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

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

Редактор свойств/компонент а-ла Fields Editor


Gelios ©   (2004-06-08 08:20:00) 

Помогите написать редактор а-ля Fields Editors (для компонентов, не связанный с БД). Пробовал сделать по аналогии, но что-то не получилось. Сейчас обхожусь TCollection, но чтобы каждый элемент коллекции имел свой набор свойст приходится сильно извращатся и есть мелкие недочеты:( А хочется сделать по-нормальному...


idkfa17   (2004-07-02 15:23:00) [1]

2Юрий Зотов
Извините, Юрий за наглость (не бейте сильно), но если можно будьте так любезны привести небольшой пример по пункту 1.

Заранее с большой благодарностью.


Юрий Зотов   (2004-06-30 18:07:00) [2]

1. Посмотрите описание RegisterNoIcon, а потом RegisterFields. Для ваших компонентов-"полей" тоже нужно будет завести глобальный список классов и написать собственную процедуру регистрации в нем (аналог RegisterFields). Потом потребуется написание самих этих "полей" и их регистрация с помощью RegisterNoIcon и этой процедуры (в обычной Register).

2. После этого написание редактора уже не вопрос. Он должен поднять форму со списком присутствующих на редактируемой форме "полей", а при выборе юзером "поля" в списке менять Designer.Selection - тогда в Инспекторе выберется соответствующее "поле" и появятся его свойства. При нажатиии на кнопку "Delete" выбранное "поле" удаляется (просто Free), а при нажатии на кнопку "Add" поднимается другая форма, в контролах которой юзер выберает, что именно ему нужно и жмет ОК. При этом выбирается требуемый класс "поля", "поле" создается на редактируемой форме (причем Owner'ом "поля" должна быть именно редактируемая форма) и добавляется в список контейнера.

3. Посмотрите, как в TField и TDataSet реализовано свойство Fields, FieldCount и методы HasParent, GetParentComponent, SetParentComponent, GetChildren, SetChildOrder и т.п. В Вашей задаче нужно сделать аналогично - это обеспечит правильное сохранение в поток и список "полей" в их компоненте-контейнере. Еще один аналог - TMenu и TMenuItem.


Igorek   (2004-06-30 10:15:00) [3]


> Правда создаваемые элементы принадлежат форме, а не компоненту,
> что в принципе терпимо, но не красиво..

А что мешает их Owner'ом сделать компонент? Правда придется полу-вручную их потом записывать в поток. Ну и соотв. считывать.


Gelios   (2004-06-30 09:57:00) [4]

правда поступил малость по другому, малость модифицировал collection editors (чтобы работал не с TCollection, а с TComponentList). Правда создаваемые элементы принадлежат форме, а не компоненту, что в принципе терпимо, но не красиво..


Igorek   (2004-06-15 18:58:00) [5]

Приведи код.


Наверх

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