Очередь/порядок создания компонентов формы

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Очередь/порядок создания компонентов формы

Сообщение VirtUX » 30.11.2018 19:12:13

Как узнать в каком порядке будут созданы компоненты некоторой формы? Или как указать очередность их создания?

У меня есть невизуальный компонент, и несколько визуальных компонентов. Все принадлежат одной форме. Все компоненты самописные. Невизуальный наследуется от TComponent, а визуальные от TGraphicControl.
Мне нужно, чтобы невизуальный был создан первым. Так как все визуальные в своём конструкторе должны использовать свойства этого невизуального.
Последний раз редактировалось VirtUX 30.11.2018 20:04:00, всего редактировалось 1 раз.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Очередь/порядок создания компонентов формы

Сообщение Лекс Айрин » 30.11.2018 19:21:23

А есть ли вообще смысл заморачиваться? Возможно, что и без этого будет нормально работать. Компилятор может и учесть дерево наследования.

Можно попытаться создавать визуальные компоненты вручную, когда невизуальный будет уже создан.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Очередь/порядок создания компонентов формы

Сообщение VirtUX » 30.11.2018 20:02:32

Лекс Айрин писал(а):Можно попытаться создавать визуальные компоненты вручную, когда невизуальный будет уже создан.

Дело в том, что визуальные и невизуальный компоненты распологает по форме разработчик во время верстки интерфейса (в дизайн редакторе Lazarus). Мне же нужно сделать так, что если разработчик добавил невизуальный, то он должен быть создан во время выполнения первым. Если разработчик отказался от его использования, то визуальные берут свойства из собственных настроек.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Очередь/порядок создания компонентов формы

Сообщение mig-31 » 30.11.2018 20:30:55

А что тут сложного.
Никакого порядка и не надо. У вас же зависимость одного компонента на другом. Решается через property.

Выкиньте код из конструктора. В визуальном сделайте property на невизуальный компонент. В Set функции добавите код из конструктора. В дизайнере в Object Inspector появиться новое свойство. Кините на форму невизуальный компонент на форму и выберете его в Object Inspector визуального. Может понадобится еще сделать Property Editor для property невизуального компонента.
Тут почитайте
http://wiki.freepascal.org/How_To_Write_Lazarus_Component
mig-31
постоялец
 
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Re: Очередь/порядок создания компонентов формы

Сообщение Лекс Айрин » 30.11.2018 20:42:56

VirtUX, ну воткни его запуск в раздел инициации модуля, в котором он определен, а в визуальных компонентах проверяй его наличие... конечно, тут еще может играть порядок модулей в uses.

А может проще наоборот? Невизуальный, при запуске, меняет настройки визуальных?

Да и вообще,имхо, лучше просто связать невизуальный с визуальными прямо в конструкторе. Так как поиск, что одних, что других может быть затруднителен. Я имею ввиду то, как это сделано для подручных (popup) меню.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Очередь/порядок создания компонентов формы

Сообщение VirtUX » 30.11.2018 20:46:04

2 mig-31 То есть, разработчику нужно в каждом визуальном компоненте будет указывать на невизуальный. В принципе, в этом есть даже некоторый плюс. Но хотелось бы обойтись без этого. Задача стоит сделать так: если есть невизуальный на форме, то используем его свойства, иначе собственные.
Спасибо за вариант!
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Очередь/порядок создания компонентов формы

Сообщение Лекс Айрин » 30.11.2018 21:03:29

VirtUX, компилятор довольно тупая программа... как ты собираешься ей объяснять, какой из компонентов ей нужен? Ей имя подавай или ссылку (что почти одно и тоже)?

Тебе придется создавать переменную для хранения имени компонента... но ведь ты ее создаешь и в предложенном тебе варианте, только в самих компонентах, с уменьшением кода, который надо написать.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Очередь/порядок создания компонентов формы

Сообщение mig-31 » 30.11.2018 22:04:26

VirtUX писал(а):Дело в том, что визуальные и невизуальный компоненты распологает по форме разработчик во время верстки интерфейса (в дизайн редакторе Lazarus). Мне же нужно сделать так, что если разработчик добавил невизуальный, то он должен быть создан во время выполнения первым. Если разработчик отказался от его использования, то визуальные берут свойства из собственных настроек.


Мне трудно представить для чего это нужно. Обычно, например в случае библиотеки LNet, "визуальный" наследован от TComponent (отображается только на вкладке компонентов) и он не отображется на форме после компиляции проекта, а не визуалньный от TObject. Визуальный нужен только для того, чтобы его кинуть на формочку и настроить в ObjectInspector, a не визуальный создать с помощью кода.
Я так понимаю, что верстает только GUI, так ему ТComponent не нужен. В коде пакета просто не указывайте вкладку отображения.

1. Если у вас оба компонента дублируют друг друга, так можете разработчику на вкладке компонетов показывать только визуальные.
2. Если так не подходит ограничить его только использованием одного типа. В конструкторе проверить на наличие, показать сообщение и удалить.
3. В конструкторе проверять наличие компонента с идентичными свойствами и предложить удаление.
mig-31
постоялец
 
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Re: Очередь/порядок создания компонентов формы

Сообщение VirtUX » 01.12.2018 15:29:22

VirtUX писал(а):То есть, разработчику нужно в каждом визуальном компоненте будет указывать на невизуальный.

Оставил так. В принципе - годится!
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Очередь/порядок создания компонентов формы

Сообщение Vapaamies » 03.12.2018 00:27:20

В VCL для правильной работы равноправных ссылок между компонентами надо было перекрывать метод Notification. В LCL такого нет? Самое логичное место для выбора между разделяемыми настройками и собственными, ИМХО.
Аватара пользователя
Vapaamies
постоялец
 
Сообщения: 291
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28

Рейтинг@Mail.ru