Очередь/порядок создания компонентов формы
Модератор: Модераторы
Очередь/порядок создания компонентов формы
Как узнать в каком порядке будут созданы компоненты некоторой формы? Или как указать очередность их создания?
У меня есть невизуальный компонент, и несколько визуальных компонентов. Все принадлежат одной форме. Все компоненты самописные. Невизуальный наследуется от TComponent, а визуальные от TGraphicControl.
Мне нужно, чтобы невизуальный был создан первым. Так как все визуальные в своём конструкторе должны использовать свойства этого невизуального.
У меня есть невизуальный компонент, и несколько визуальных компонентов. Все принадлежат одной форме. Все компоненты самописные. Невизуальный наследуется от TComponent, а визуальные от TGraphicControl.
Мне нужно, чтобы невизуальный был создан первым. Так как все визуальные в своём конструкторе должны использовать свойства этого невизуального.
Последний раз редактировалось VirtUX 30.11.2018 19:04:00, всего редактировалось 1 раз.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
А есть ли вообще смысл заморачиваться? Возможно, что и без этого будет нормально работать. Компилятор может и учесть дерево наследования.
Можно попытаться создавать визуальные компоненты вручную, когда невизуальный будет уже создан.
Можно попытаться создавать визуальные компоненты вручную, когда невизуальный будет уже создан.
Лекс Айрин писал(а):Можно попытаться создавать визуальные компоненты вручную, когда невизуальный будет уже создан.
Дело в том, что визуальные и невизуальный компоненты распологает по форме разработчик во время верстки интерфейса (в дизайн редакторе Lazarus). Мне же нужно сделать так, что если разработчик добавил невизуальный, то он должен быть создан во время выполнения первым. Если разработчик отказался от его использования, то визуальные берут свойства из собственных настроек.
А что тут сложного.
Никакого порядка и не надо. У вас же зависимость одного компонента на другом. Решается через property.
Выкиньте код из конструктора. В визуальном сделайте property на невизуальный компонент. В Set функции добавите код из конструктора. В дизайнере в Object Inspector появиться новое свойство. Кините на форму невизуальный компонент на форму и выберете его в Object Inspector визуального. Может понадобится еще сделать Property Editor для property невизуального компонента.
Тут почитайте
http://wiki.freepascal.org/How_To_Write_Lazarus_Component
Никакого порядка и не надо. У вас же зависимость одного компонента на другом. Решается через property.
Выкиньте код из конструктора. В визуальном сделайте property на невизуальный компонент. В Set функции добавите код из конструктора. В дизайнере в Object Inspector появиться новое свойство. Кините на форму невизуальный компонент на форму и выберете его в Object Inspector визуального. Может понадобится еще сделать Property Editor для property невизуального компонента.
Тут почитайте
http://wiki.freepascal.org/How_To_Write_Lazarus_Component
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
VirtUX, ну воткни его запуск в раздел инициации модуля, в котором он определен, а в визуальных компонентах проверяй его наличие... конечно, тут еще может играть порядок модулей в uses.
А может проще наоборот? Невизуальный, при запуске, меняет настройки визуальных?
Да и вообще,имхо, лучше просто связать невизуальный с визуальными прямо в конструкторе. Так как поиск, что одних, что других может быть затруднителен. Я имею ввиду то, как это сделано для подручных (popup) меню.
А может проще наоборот? Невизуальный, при запуске, меняет настройки визуальных?
Да и вообще,имхо, лучше просто связать невизуальный с визуальными прямо в конструкторе. Так как поиск, что одних, что других может быть затруднителен. Я имею ввиду то, как это сделано для подручных (popup) меню.
2 mig-31 То есть, разработчику нужно в каждом визуальном компоненте будет указывать на невизуальный. В принципе, в этом есть даже некоторый плюс. Но хотелось бы обойтись без этого. Задача стоит сделать так: если есть невизуальный на форме, то используем его свойства, иначе собственные.
Спасибо за вариант!
Спасибо за вариант!
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
VirtUX, компилятор довольно тупая программа... как ты собираешься ей объяснять, какой из компонентов ей нужен? Ей имя подавай или ссылку (что почти одно и тоже)?
Тебе придется создавать переменную для хранения имени компонента... но ведь ты ее создаешь и в предложенном тебе варианте, только в самих компонентах, с уменьшением кода, который надо написать.
Тебе придется создавать переменную для хранения имени компонента... но ведь ты ее создаешь и в предложенном тебе варианте, только в самих компонентах, с уменьшением кода, который надо написать.
VirtUX писал(а):Дело в том, что визуальные и невизуальный компоненты распологает по форме разработчик во время верстки интерфейса (в дизайн редакторе Lazarus). Мне же нужно сделать так, что если разработчик добавил невизуальный, то он должен быть создан во время выполнения первым. Если разработчик отказался от его использования, то визуальные берут свойства из собственных настроек.
Мне трудно представить для чего это нужно. Обычно, например в случае библиотеки LNet, "визуальный" наследован от TComponent (отображается только на вкладке компонентов) и он не отображется на форме после компиляции проекта, а не визуалньный от TObject. Визуальный нужен только для того, чтобы его кинуть на формочку и настроить в ObjectInspector, a не визуальный создать с помощью кода.
Я так понимаю, что верстает только GUI, так ему ТComponent не нужен. В коде пакета просто не указывайте вкладку отображения.
1. Если у вас оба компонента дублируют друг друга, так можете разработчику на вкладке компонетов показывать только визуальные.
2. Если так не подходит ограничить его только использованием одного типа. В конструкторе проверить на наличие, показать сообщение и удалить.
3. В конструкторе проверять наличие компонента с идентичными свойствами и предложить удаление.
VirtUX писал(а):То есть, разработчику нужно в каждом визуальном компоненте будет указывать на невизуальный.
Оставил так. В принципе - годится!
- Vapaamies
- постоялец
- Сообщения: 292
- Зарегистрирован: 24.07.2012 22:37:59
- Откуда: Санкт-Петербург
- Контактная информация:
В VCL для правильной работы равноправных ссылок между компонентами надо было перекрывать метод Notification. В LCL такого нет? Самое логичное место для выбора между разделяемыми настройками и собственными, ИМХО.
