Программирование на Delphi. Как задать одно событие для нескольких элементов?

программирование Delphi

На форме несколько edit'ов, несколько checkbox'ов и кнопка. Нужно сделать так, чтобы при изменении любого из едитов или чекбоксов, кнопка дезактивировалась (enabled:= false).
Замучил поисковики, но не могу найти информацию даже о том, как задать одно условие на несколько однотипных элементов. Это вообще возможно?

Примечание:
Вопрос решён. Надеюсь, он останется здесь и ещё кому-то поможет.

Во-первых, как я узнал, можно сделать по-простому. Написать обработчик события только для одного элемента, а для всех остальных в Событиях просто ВЫБРАТЬ его же из раскрывающегося списка (напротив OnChange или OnClick для edit'ов и checkbox'ов соответственно). Причём нестрашно, если первая процедура была написана, например, для эдита как OnChange - для чекбоксов, напротив OnClick, её всё равно можно будет выбрать, и она будет работать.

Во-вторых, вполне удобен способ, предложенный здесь участником ADR-007. Он применим, когда нужные события некоторых элементов УЖЕ были задействованы ранее (как у меня). Есть кое-какие ошибки в коде, но всё равно большое ему спасибо.
Вот проверенный рабочий кусок кода:

type
<...>
procedure FormCreate(Sender: TObject);
procedure MyOnChange (Sender: TObject);

<...>

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.OnChange:= MyOnChange;
Edit2.OnChange:= MyOnChange;
Edit3.OnChange:= MyOnChange;
CheckBox1.OnClick:= MyOnChange;
CheckBox2.OnClick:= MyOnChange;
CheckBox3.OnClick:= MyOnChange;
end;

procedure TForm1.MyOnChange (Sender: TObject);
begin
Form1.BitBtn1.Enabled:= false;
end;
Ответы:
закопипастить ?)
У тебя событие создает Edit - значит только оно может инициировать изменение кнопки
Невозможно создать событие из ничего, которое отвечало бы за несколько элементов, это нарушает событийную модель.
Просто скопируй эту функцию на несколько Edit-ов и все. НО!
Обычно нужно знать не только, что что-то изменилось, но и ЧТО изменилось, поэтому кроме активации кнопки, отмечается сам Edit, например с помощью свойства TAG
//OnFormCreate або в графічному редакторі
begin
 CheckBox1.OnChangle := MyOnChangle;
 CheckBox2.OnChangle := MyOnChangle;
 Edit1.OnChangle := MyOnChangle;
 Edit2.OnChangle := MyOnChangle;
 ...
 CheckBox100500.OnChangle := MyOnChangle;
end;


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.