![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Здравствуйте, хочу сделать чтобы выполнялась определённая процедура при изменении значения 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. Поискать на просторах готовый компонент с нужным функционалом.  | 
| 
		 
			 
			#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  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Писал я себе как-то программку, форма которой была из сетки едитов (не от великого ума было дело). И нужно было следить за изменениями в этих полях и подсвечивать их. Всё думал как же мне удержать старые значения каждого поля в памяти до сохранения результатов. Выкрутился за счёт Хинтов. Просто сбрасывал туда значение при фокусе, а по выходу проверял разность и подсвечивал. Так у меня появилась халявная способность возвращать при необходимости начальное содержимое на каждое поле отдельно. 
		
	
		
		
		
		
		
	
		
		
	
	
	 |