Свойства Enabled и Visible

Эти свойства присутствуют практически у всех визуальных компонентов, и позволяют использовать интересные приемы программирования.

Откройте проект с редактором текста из "Изучаем компоненты Panel, GroupBox, RadioGroup, CheckBox" . У вас там есть три кнопки – "Сохранить", "Загрузить" и "Очистить". Давайте предположим, что пользователь набрал какой-то важный текст и сохранил его. На следующий день он снова загрузил ваш редактор, но по ошибке вместо кнопки "Загрузить" он нажал кнопку "Сохранить". Что произойдет? Никакого текста в данный момент компонент Memo не содержит. Если будет выполнена команда

Memo1.Lines.SaveToFile('MyFile.txt');

то наш файл перезапишется – важный текст будет стерт, а взамен ничего не запишется, так как текста нет. Пользователь, совершив небольшую ошибку, потеряет свою работу.

Конечно, виноват пользователь – он нажал не ту кнопку. Но в большей степени здесь виноват программист, что не предусмотрел такого развития событий, и не сделал для своей программы элементарной защиты от ошибок пользователя. Исправим ошибку.

Свойство Enabled отвечает за доступность компонентов. Это свойство имеет логический тип, и может быть либо True, либоFalse. Выделите кнопку с надписью "Сохранить", найдите ее свойство Enabled и вместо установленного по умолчанию значенияTrue, выберите значение False. На форме не произошло видимых изменений, мы не сможем их увидеть в режиме разработки программы. Однако сохраните проект, скомпилируйте командой Run и посмотрите на результат – кнопка "Сохранить" видна на форме, но ее надпись выходит серым, неактивным цветом, а на кнопку невозможно нажать. Теперь у пользователя нет возможности нажать на эту кнопку, значит, он не совершит такой ошибки.

Но это только полдела, надо все-таки в процессе работы программы ему эту возможность вернуть, иначе как же он сможет сохранить текст?

В "ООП – Объектно-Ориентированное Программирование" мы обсуждали событие OnChange, которое происходит всякий раз, когдакомпонент изменяется. Этим мы и воспользуемся. Выделите компонент Memo, в Инспекторе объектов перейдите на вкладкуEvents (События) и найдите там событие OnChange. Дважды щелкните по нему, чтобы сгенерировать процедуру – обработчик этого события. В этой процедуре запишем всего только одну строку:

Button1.Enabled := True;

Таким образом, при изменении компонента Memo (пользователь изменил текст), мы делаем доступной кнопку "Сохранить". Теперьпользователь может сохранить свои изменения.

Подумаем теперь вот о чем: когда пользователь сохранил текст, следует ли оставлять кнопку "Сохранить" доступной? Очевидно, нет, если у текста не произошли изменения. Поэтому щелкайте дважды по кнопке "Сохранить", и после строки, где текст сохраняется, добавьте строку

Button1.Enabled := False;

Сразу, как только текст будет сохранен, кнопка "Сохранить" снова станет недоступной, пока пользователь не произведет очередных изменений в тексте.

Также сделайте недоступной эту кнопку после того, как пользователь нажмет кнопку "Очистка", эта кнопка очищает набранный текст, что само по себе заставляет работать событие OnChange компонента Memo, однако сохранять пустоту смысла нет.

Свойство Visible компонентов работает практически также, как свойство Enabled, только вместо того, чтобы делать компонентнедоступным, оно делает его невидимым. Visible также имеет логический тип, и может быть либо True (компонент видим), либо False (невидим). Самостоятельно измените все приведенные выше рекомендации, использовав вместо свойства Enabledсвойство Visible. Посмотрите на результат. Скрывать или отключать можно не только кнопки, но и вообще все видимые компоненты – редактор Memo, поле Edit, надпись Label. Даже у формы есть эти свойства, поэтому при некоторой фантазии вы можете добиваться вполне профессиональных эффектов.