Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TEdit, как отличить user ввод от присвоения Text нового значения?


sanx ©   (2009-08-26 22:43:00) 

И то и то вызывает OnChange. Как же тогда отличить?

Задача такая: есть два TEdit, пользовательский ввод в одном Edit1 меняет значение и в другом Edit2, но только до тех пор, пока пользователь сам не поменяет значение в Edit2. После этого любое редактирование Edit1 не влияет на Edit2. Как отличить пользовательский ввод в Edit2 от Edit2.Text = 'Что-то'? Таким образом я мог бы установить флажок flagEdit2UserChanged и далее, при изменении Edit1 смотреть, если флажок установлен, то уже не изменяем Edit2. Реагировать на нажатия клавиш в Edit2? т.е. использовать Edit2.OnKeyPress? Пока что так и делаю, фильтруя символ #13. Есть ли какое другое решение? может быть основанное на Win Api?


Советчик   (2009-08-27 11:36:00) [1]

> sanx   (27.08.09 02:53) [6]

> у меня идет инициализация значений для Edit1 при открытии окна,
> и в этот момент (edit1.text='начальный текст') срабатывает
> edit1.onChange, тот в котором идет проверка
> if not edit2.modified then ...
> А в этот момент это мне не нужно.

Назначайте обработчик события edit1.onChange не в design-time, а кодом, послеинициализации edit1.text='начальный текст'.


Ega23   (2009-08-27 10:53:00) [2]

ReadOnly := True;   :)


Servy   (2009-08-27 03:18:00) [3]

> просто интересно как изменить свойство text/caption для
> любого компонента, но так чтобы  не было OnChange


Для тех, кому "просто интересно", есть очевидный способ - убрать обработчик OnChange на время присваивания.


var
 Temp: TNotifyEvent;
begin
 Temp := Edit1.OnChange;
 try
   Edit1.OnChange := nil;
   Edit1.Text := 'some new text';
 finally
   Edit1.OnChange := Temp;
 end;


sanx   (2009-08-27 02:53:00) [4]

Юрий Зотов, это да, но у меня идет инициализация значений для Edit1 при открытии окна, и в этот момент (edit1.text='начальный текст') срабатывает edit1.onChange, тот в котором идет проверка if not edit2.modified then ... А в этот момент это мне не нужно.

Да воощем проблем решить это нет конечно, можно флажек сделать типа flagThisInit, просто интересно как изменить свойство text/caption для любого компонента, но так чтобы  не было OnChange. Как я понимаю проблема в том что VCL реагирует на события винды, а винду попросить не слать это событие не получится? :) Это уже просто интересно :)


Юрий Зотов   (2009-08-27 00:32:00) [5]

> sanx   (26.08.09 23:46) [4]

Вы же уже сами ответили на свой вопрос (с помощью Леонида). Исходное значение Edit2.Modified = False, оно изменится только при юзерском вводе. Это и есть тот самый флажок, который Вы хотели:


procedure Edit1Change:
begin
 ...
 if not Edit2.Modified then
 begin
   ... // Юзер еще не менял текст в Edit2, поэтому меняем его программно
 end;
 ...
end;


sanx   (2009-08-26 23:46:00) [6]

Медвежонок Пятачок, не совсем понял как это может помочь?
Leonid Troyanovsky спс, действительно при изменении Edit2.Text, свойство Edit2.Modified не меняется. Оно меняется лишь при изменении текста самим пользователем.

Но осталось научится изменять текст в TEdit без вызова TEdit.OnChange, такое возможно?


Leonid Troyanovsky   (2009-08-26 23:23:00) [7]


> sanx   (26.08.09 22:43)  

> Edit1 меняет значение и в другом Edit2, но только до тех
> пор, пока пользователь сам не поменяет значение в Edit2.

Edit2.Modified ?

--
Regards, LVT.


Медвежонок Пятачок   (2009-08-26 23:05:00) [8]

И текст и ончейндж - это свойства.
кроме этого есть еще куча свойств например активный контрол формы


sanx   (2009-08-26 23:00:00) [9]

Ах да, проблема еще в том что показе формы идет присвоение началных значений в том числе и в Edit1, что влияет на Edit2. Конечно это все не проблема, нужно просто следить когда edit1 может влият на Edit2, но все же хотелось бы узнать способ изменить свойство Text без вызова OnChange?


Наверх

Титульная страница Поиск, карта сайта Написать письмо