Показать сообщение отдельно
  #3  
Старый 18.07.2020, 03:45
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

Цитата:
Сообщение от Alex7
Не получается, MyProcedure выполняется при каждом обновлении Edit1.Text даже если его значение обновилось на тоже, что и было ранее. Помогите пожалуйста.
Твоя процедура и будет выполняться постоянно и вот почему.
Код:
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;
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием