Delphi function

agent smith

Турист
Регистрация
15 Янв 2009
Сообщения
3
Реакции
0
Credits
6
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-ов можно назначать обработчик в цикле, а лишь для нужных тебе.

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

goga2

Турист
Регистрация
1 Фев 2007
Сообщения
2
Реакции
0
Credits
4
Глобальные переменные лучше не использовать. Запросто можно обойтись локальными.
 

toddams

Турист
Регистрация
14 Окт 2013
Сообщения
2
Реакции
0
Credits
4
Также можно просто передавать как параметр в функцию.
 

Sifont

Турист
Регистрация
22 Мар 2014
Сообщения
2
Реакции
0
Credits
34
Так можно сделать удаление в Edit.Text символов в обработчике на событие OnChange.