|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Событие по изменению Edit.Text
Здравствуйте, хочу сделать чтобы выполнялась определённая процедура при изменении значения Edit.Text, но только в том случае если значение отличается от бывшего там ранее текста, пробую так:
Код:
procedure TForm1.Edit1Change(Sender: TObject); begin ip1 := Edit1.Text; if (ip2 <> ip1) and (Edit1.Text <> ' ') then MyProcedure; ip2 := ip1; end; |
#2
|
||||
|
||||
А в какой момент содержимое TEdit нужно считать "бывшим"?
Осмелюсь предположить, что Вы хотите сделать так: Код:
var Edit1_LastValue: string; //Не забудь инициализировать начальным значением ... //при потере фокуса в TEdit procedure TEdit1.OnExit(Sender: TObject); begin if Edit1_LastValue <> Edit1.Text then begin SomeProc; Edit1_LastValue := Edit1.Text; end; end; Как-то так. Если таких полей несколько, тот тут как Вам будет удобнее: 1. Завести по переменной на каждое поле ввода 2. Сделать массив по числу таких полей ввода (хоть динамический, хоть статический) и определять в общей процедуре какое поле изменилось, например по свойству Tag. 3. Написать новый класс на основе TEdit с нужным функционалом. 4. Поискать на просторах готовый компонент с нужным функционалом. Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#3
|
||||
|
||||
Цитата:
Код:
procedure TForm1.Edit1Change(Sender: TObject); begin //В переменную ip1 записываем содержимое Edit1. ip1 := Edit1.Text; //Сравниваем переменные ip2, в которой вообще ещё ничего нет, и ip1, в которой наш текст. //Так как выполняются оба условия, т.е. ip2<>ip1 и поле не пусто, то выполняется твоя процедура. if (ip2 <> ip1) and (Edit1.Text <> ' ') then MyProcedure; //Дальше как бы запоминаем наше новое значение для ip2 ip2 := ip1; //Но при повторном событии OnChange твои переменные обнуляются и твоего нового значения как будто бы и не бывало. Кстати, в твоем примере непонятно локальные переменные или глобальные. //И так происходит по кругу, и поэтому выполняется постоянно твоя процедура. end; Код:
//заводим глобальную переменную var LastValue: String Код:
//при событии входа в Edit запоминаем имеющийся там текст procedure TForm1.Edit1Enter(Sender: TObject); begin LastValue := Edit1.Text; end; Код:
//а при событии выхода из Edit сравниваем значения и вы случае несовпадения выполняем то, что нужно procedure TForm1.Edit1Exit(Sender: TObject); begin if (LastValue <> Edit1.Text) then begin MyProcedure; LastValue := Edit1.Text; end; end; Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
#4
|
|||
|
|||
Писал я себе как-то программку, форма которой была из сетки едитов (не от великого ума было дело). И нужно было следить за изменениями в этих полях и подсвечивать их. Всё думал как же мне удержать старые значения каждого поля в памяти до сохранения результатов. Выкрутился за счёт Хинтов. Просто сбрасывал туда значение при фокусе, а по выходу проверял разность и подсвечивал. Так у меня появилась халявная способность возвращать при необходимости начальное содержимое на каждое поле отдельно.
|