1. Создаешь свою процедуру обработки данных в TEdit, например:
procedure AnalyseDataInEdit(aTargetEdit: TEdit; aText: String);
2. Объявляешь в форме 2 глобальные переменные:
varDataStr: String;
varCurrentControl: TEdit;
3. Создаешь для одного из своих Edit-ов метод edtMainFieldOnChange(Sender: TEdit);
4. В этом методе присваиваешь некоторой своей глобальной переменной текст из Edit-a, например:
procedure TfrmToch.edtMainFieldOnChange(Sender: TObject);
begin
varDataStr := edtMainField.Text; // Запоминаем текст в глобальной переменной.
varCurrentControl := TEdit(Sender);// Запоминаем сработавший TEdit в пеерменной.
tmrCheckData.Enable := FALSE; // на форме располагаешь таймер с интервалом в
tmrCheckData.Enable := TRUE; // 500 и в его обработчике вызываешь метод...
end;
procedure TfrmToch.OnTimer(Sender: TObject);
begin
Timer.Enabled := FALSE; // отключаешь таймер на время его обработки.
if (varDataStr <> '') and (varCurrentControl <> nil)
then AnalyseDataInEdit(varCurrentControl: TEdit; varDataStr: String);
varCurrentControl := nil; // чистим переменную сработавшего контрола.
end;
Метод с таймера нужен для исключения обработок каждого введённого символа, если текст вводиться посимвольно.
Интервал сработки таймера можно регулировать на усмотрение.
4. Создаешь ещё одну процедуру, как упоминалось ранее, которая при активации формы пробегается по циклу (перебирает все компоненты на твоей форме и как только находит TEdit, то присваивает этому контролу на его метод OnChange тот, что ты создал уже в п.1.). При размещении на форме всех TEdit-ов, которые требуют обработки, хорошо бы в их Property "Tag" ставить значение, отличное от "0" и в цикле проверять ещё и это значение.
Тогда не для всех подряд Edit-ов можно назначать обработчик в цикле, а лишь для нужных тебе.
Кстати, если объявил глобальные переменные, то можно их тогда вообще в обработчике таймера не передавать в твой метод. Он и так будет иметь к этим переменым доступ.