Как отследить изменение содержания отдельных полей на форме?

  • Автор темы jeckp
  • Дата начала
Статус
Закрыто для дальнейших ответов.
J

jeckp

#1
Добрый день.

У меня есть форма, представляющая собой лист настроек для программы. На ней примерно с десятка два "существенных" и "не существенных" управляющих полей: Edit-ов, Checkbox-ов и RadioButton-ов. Для удобства (как мне кажется) я сотворил кнопку "Применить", которая должна активироваться только при изменении "существенных" управляющих полей. Сейчас я контролирую изменение кождого такого управляющего поля и в соответстующем методе изменю флажок состояния. Т.е. примерно так

procedure TMainForm.ButtonClick(Sender: TObject);
begin
ФлагКонтроляИзменений := Истина;
end;

Но мне кажется - это не совсем удачное решение т.к. код меняется, гдето чтото забыл поменять и потом ловишь глюк два дня. Я хотел написать некую процедуру в которой перечислить все поля, которые необходимо контролировать на изменения и в случае такого события изменять флаг.
Подскажите можно ли это сделать и как?
 
A

AnCC

#2
Можно сделать обработчик вида
procedure TMainForm.OnUpdateControl(Sender: TObject);
begin
ФлагКонтроляИзменений := Истина;
end;
и установить его через редактор свойств на соответствующие компоненты. Можно сделать свои компоненты на основе стандартных с аналогичным обработчиком ну и т.д.
 
B

Barmutik

#3
А почему бы на кнопку не повесить Action и унего в обработчике не написать:

Код:
 MyAction.Enabled := (Edit.Text <> OldText) or (myCheckBox.Checked <> Oldchecked) и т.д.
Тогда при появлении новых контролов вы просто будете дописывать туда условия и всё будет работать автоматом....
 
A

AnCC

#4
Может я торможу, но как это решение поможет, если изначально кнопка заблокирована и активироваться она будет только после изменения Edit или CheckBox, т.е. обработчик Action не будет вызван вообще.
 
B

Barmutik

#5
Причём здесь вызван обработчкик ?

Разговор шёл о возможности енэйбла и дизэйбла кнопки .. а для этого Action как нельзя лучше подходит... Одно из условий выполнится и кнопка включится .. если ни одно не выполнено будет задизэйблена...
 
Статус
Закрыто для дальнейших ответов.