(см. рис. 2). Опять лирическое отступление. Каждый из нас видел в программных продуктах реализацию таких вещей: при нажатии на "CheckBox" или одну из точек "RadioGroup", связанные (по логике приложения) поля появляются или исчезают, или становятся (не)доступными (свойство "Enabled"). Однажды мне опостылело писать похожий код всякий раз, когда надо сделать что-то подобное. И я придумал для себя концепцию интерфейса: если от компонента ожидается простое значение типа "да/нет", - это будет "CheckBox". Если же потребуется включать/выключать логически связанные элементы управления, пусть это будет "SpeedButton" со включенным свойством "AllowAllUp" (сохранение нажатого/отжатого состояния). См. рис. 1.
рис 2.
Соответственно, к кнопке можно прицепить до 10-и компонентов (поля ввода, кнопки, надписи, да что угодно!), которые будут появляться в случае, если Down=true, и исчезать в противном :) случае. Эти-то свойства и указывают на зависимые компоненты; значения им присваиваются во время проектирования.
Свойство EControl AskControl – может принимать значения "ecVisible" или "ecEnabled". Соответствующему свойству зависимых компонентов и будет присваиваться значение свойства "Down". То есть, при нажатии кнопки зависимые компоненты становятся видимыми (или доступными для редактирования), а при отжатой кнопке – невидимыми (нередактируемыми).
Осталась лишь одна проблема: следует сохранять и восстанавливать не только свойство "Down", но и свойства Visible/Enabled всех зависимых компонентов. Если мы автоматизируем и этот момент, мы сможем разрабатывать поведение довольно сложных интерфейсов без написания кода. Итак, знакомьтесь: свойство
bool AskDown. Следует присваивать значение true/false именно ему, а не "Down". Также следует сохранять в реестре (INI-файле) именно его. В этом случае поведение/состояние кнопки вместе со всеми зависимыми элементами управления будет ожидаемым и в момент работы, и при повторном запуске формы.
Для функционирования приведённых на примере ((рис. 1) кнопок и сохранения/восстановления настроек не написано ни строчки кода. P.S. на примере – настройки программы - обновилки вирусных баз (*.vdb) для антивируса . К слову, все проекты, представленные , реализованы с использованием "AskTools". Как и (закрытые) проекты на основной работе.
Более того, набор таких кнопок удобно использовать в качестве функционально расширенного заменителя RadioGroup – см. рис. 1. К каждой Speed-кнопке зависимого выбора можно "прицепить" до 10 зависимых компонентов, и получается довольно мощная конструкция – без единой строчки кода.