Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2013, 12:53   #1
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию Выполнить действие, если какой-нибудь компонент изменился

Всем привет.
Собственно, делаю окно настроек программы, на котором очень много компонентов, и мне интересно, есть ли способ, который позволил бы выполнить какое-то действие, если хотя-бы один компонент был изменен.

То есть, если пользователь изменил какое-то поле, или поставил/снял галочку и т.п., то выполняем действие... В моем случае - нужно активировать кнопку "Принять".

Пока использую простой способ: в каждом компоненте в обработчике OnChange или OnClick выполняется:
Код:
Button1.Enabled := True;
Можно конечно запустить таймер, и отслеживать в нем изменения всех компонентов, но это даст дополнительную (хоть и небольшую) нагрузку.

Подумал, может есть какой-то безболезненный и эффективный способ решения моего вопроса? Чтобы не прописывать на всю кучу компонентов одну и ту же операцию.
Или может можно как-то добавить эту процедуру ко всем компонентам при открытии формы?
Xo66um вне форума Ответить с цитированием
Старый 06.12.2013, 13:04   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А что это даст? Кликнул например по чекбоксу, а потом еще раз, вернув в исходное состояние. Вроде изменилось, а по факту нет. И так с любым контролом. И изменилось или нет проверить можно только по завершению - сравнив исходное состояние и текущее каждого контрола
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.12.2013, 13:30   #3
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Аватар, это все не важно, т.к. обработчик кнопки "Принять" - сравнивает исходное состояние с измененными. Главное активировать кнопку при изменении любого контрола, все остальное уже сделано
Xo66um вне форума Ответить с цитированием
Старый 06.12.2013, 13:48   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

http://docwiki.embarcadero.com/RADSt..._in_RAD_Studio
eval вне форума Ответить с цитированием
Старый 06.12.2013, 14:08   #5
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

eval, возможно в новых версиях это делается через опции, у меня Delphi 7, и такой опции нет, насколько мне известно. Да и не очень хочется лезть в какой-то мастер, или использовать какие-то сторонние компоненты. Я уверен, что вопрос можно решить проще, и не менее эффективно.
Мысли по этому поводу есть, но детали не продуманы пока. Поэтому спрашиваю, может кто такое уже делал, и может поделится опытом.
Xo66um вне форума Ответить с цитированием
Старый 06.12.2013, 14:12   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а тут должны догадаться какая у вас версия? или екстрасенсов на это дело подключать?

в допотопных версиях надо делать все руками, либо расписывать такойже биндинг, и тоже руками...
eval вне форума Ответить с цитированием
Старый 06.12.2013, 14:39   #7
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

eval, вопрос вообще не в версии, а в способе решения задачи. Подкинули свой метод решения - хорошо, но мне он не подходит. В чем проблема?

Тему можно закрывать/удалять, с задачей разберусь самостоятельно.
Всем спасибо за внимание.
Xo66um вне форума Ответить с цитированием
Старый 06.12.2013, 15:35   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

у нас нет проблемы, она у вас
а версия к тому что от этого зависит и решение, вот в новых появился датабиндинг а в старых его нет, неужели это трудно для понимания?
eval вне форума Ответить с цитированием
Старый 06.12.2013, 16:10   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Собственно, делаю окно настроек программы, на котором очень много компонентов, и мне интересно, есть ли способ, который позволил бы выполнить какое-то действие, если хотя-бы один компонент был изменен.
Цитата:
Я уверен, что вопрос можно решить проще, и не менее эффективно.
Заводите глобальную переменную в состоянии False, во всех OnChange,OnClick ставите её в True и все.

Да геморой, но это Delphi 7 и как вы уже сказали:
Цитата:
Да и не очень хочется лезть в какой-то мастер, или использовать какие-то сторонние компоненты.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В Билдере есть какой-нибудь компонент для многострочного вывода текста, аналогично Edit? Наталия 555 C++ Builder 4 15.06.2011 13:12
Delphi7 поле Memo, если изменилось - выполнить действие bad_patefa Помощь студентам 2 15.09.2010 16:15
Выполнить действие в указанное время sergeiqwe PHP 3 06.05.2010 16:28
выполнить действие. IVANSour Общие вопросы Delphi 6 01.02.2009 22:53