Текущий архив: 2009.10.25;
Скачать: CL | DM;
ВнизTEdit, как отличить user ввод от присвоения Text нового значения? Найти похожие ветки
← →
sanx (2009-08-26 22:43) [0]И то и то вызывает OnChange. Как же тогда отличить?
Задача такая: есть два TEdit, пользовательский ввод в одном Edit1 меняет значение и в другом Edit2, но только до тех пор, пока пользователь сам не поменяет значение в Edit2. После этого любое редактирование Edit1 не влияет на Edit2. Как отличить пользовательский ввод в Edit2 от Edit2.Text = "Что-то"? Таким образом я мог бы установить флажок flagEdit2UserChanged и далее, при изменении Edit1 смотреть, если флажок установлен, то уже не изменяем Edit2. Реагировать на нажатия клавиш в Edit2? т.е. использовать Edit2.OnKeyPress? Пока что так и делаю, фильтруя символ #13. Есть ли какое другое решение? может быть основанное на Win Api?
← →
sanx (2009-08-26 23:00) [1]Ах да, проблема еще в том что показе формы идет присвоение началных значений в том числе и в Edit1, что влияет на Edit2. Конечно это все не проблема, нужно просто следить когда edit1 может влият на Edit2, но все же хотелось бы узнать способ изменить свойство Text без вызова OnChange?
← →
Медвежонок Пятачок © (2009-08-26 23:05) [2]И текст и ончейндж - это свойства.
кроме этого есть еще куча свойств например активный контрол формы
← →
Leonid Troyanovsky © (2009-08-26 23:23) [3]
> sanx (26.08.09 22:43)
> Edit1 меняет значение и в другом Edit2, но только до тех
> пор, пока пользователь сам не поменяет значение в Edit2.
Edit2.Modified ?
--
Regards, LVT.
← →
sanx (2009-08-26 23:46) [4]Медвежонок Пятачок, не совсем понял как это может помочь?
Leonid Troyanovsky спс, действительно при изменении Edit2.Text, свойство Edit2.Modified не меняется. Оно меняется лишь при изменении текста самим пользователем.
Но осталось научится изменять текст в TEdit без вызова TEdit.OnChange, такое возможно?
← →
Юрий Зотов © (2009-08-27 00:32) [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-27 02:53) [6]Юрий Зотов, это да, но у меня идет инициализация значений для Edit1 при открытии окна, и в этот момент (edit1.text="начальный текст") срабатывает edit1.onChange, тот в котором идет проверка if not edit2.modified then ... А в этот момент это мне не нужно.
Да воощем проблем решить это нет конечно, можно флажек сделать типа flagThisInit, просто интересно как изменить свойство text/caption для любого компонента, но так чтобы не было OnChange. Как я понимаю проблема в том что VCL реагирует на события винды, а винду попросить не слать это событие не получится? :) Это уже просто интересно :)
← →
Servy © (2009-08-27 03:18) [7]> просто интересно как изменить свойство 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;
← →
Ega23 © (2009-08-27 10:53) [8]ReadOnly := True; :)
← →
Советчик (2009-08-27 11:36) [9]> sanx (27.08.09 02:53) [6]
> у меня идет инициализация значений для Edit1 при открытии окна,
> и в этот момент (edit1.text="начальный текст") срабатывает
> edit1.onChange, тот в котором идет проверка
> if not edit2.modified then ...
> А в этот момент это мне не нужно.
Назначайте обработчик события edit1.onChange не в design-time, а кодом, после инициализации edit1.text="начальный текст".
Страницы: 1 вся ветка
Текущий архив: 2009.10.25;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.051 c