Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизOnChange - игнор Найти похожие ветки
← →
chir (2005-01-09 22:35) [0]Можно ли как нибудь сделать так, чтобы на
Edit1.Text := "lalala";
Не срабатывало событие OnChange?
← →
DrPass © (2005-01-09 22:39) [1]Edit1.OnChange:=nil;
Edit1.Text := "lalala";
Edit1.OnChange:=Edit1Change;
← →
chir (2005-01-09 23:16) [2]какой здоровский совет однако!
спасибо преогроменное! :)
← →
pasha_golub © (2005-01-10 11:41) [3]А можно узнать, зачем?
← →
www.Vlad.uk (2005-01-10 11:54) [4]Хук ставь!
← →
pasha_golub © (2005-01-10 12:25) [5]www.Vlad.uk (10.01.05 11:54) [4]
Ага, хук слева, хук справа....
← →
begin...end © (2005-01-10 12:27) [6]> [3] pasha_golub © (10.01.05 11:41)
Разве не может возникнуть ситуация, когда требуется отслеживать только изменения edit"а, сделанные пользователем?
← →
pasha_golub © (2005-01-10 12:30) [7]begin...end © (10.01.05 12:27) [6]
Может. :0) Спасибо за пример
← →
pasha_golub © (2005-01-10 12:38) [8]begin...end © (10.01.05 12:27) [6]
Все равно неудачный, если изменения сделаны програмно можно завести флажок, а в OnChange его опрашивать и сбрасывать.
← →
begin...end © (2005-01-10 13:36) [9]> [8] pasha_golub © (10.01.05 12:38)
А зачем заводить флажок, если можно обойтись и без флажка? :-)
Но вот ещё пример. Допустим, требуется изменять (как-нибудь преобразовывать) текст edit"а в самом обработчике OnChange.
Вот код обработчика Edit1.OnChange (высосанный из пальца):var
I: Integer;
S: String;
begin
with (Sender as TEdit) do
begin
S := Text;
for I := 1 to Length(S) do
S[I] := Chr(Ord(S[I]) + 1);
Text := S
end
end.
Присвоение значения свойству Text снова вызывает обработчик OnChange, и... ничего хорошего из этого не выйдет.
Здесь-то и можно поступить так, как написано выше:var
I: Integer;
S: String;
begin
with (Sender as TEdit) do
begin
OnChange := NIL;
S := Text;
for I := 1 to Length(S) do
S[I] := Chr(Ord(S[I]) + 1);
Text := S;
OnChange := Edit1Change
end
end.
Хотя последняя выделенная строка - это тоже не есть хорошо. Я бы сохранял старый обработчик события, а потом восстанавливал его:var
...
OldChange: TNotifyEvent;
begin
with (Sender as TEdit) do
begin
OldChange := OnChange;
OnChange := NIL;
// Здесь - манипуляции с Text
OnChange := OldChange
end
end.
← →
Gero © (2005-01-10 13:39) [10]
> var
> ...
> OldChange: TNotifyEvent;
> begin
> with (Sender as TEdit) do
> begin
> OldChange := OnChange;
> OnChange := NIL;
> // Здесь - манипуляции с Text
> OnChange := OldChange
> end
> end.
Угу, пожалуй лучший вариант.
← →
A.S.D. (2005-01-10 13:46) [11]
> begin...end © (10.01.05 13:36) [9]
А ещё лучше оформить процедуру установки значения Edit:
procedure SetEditText(Edit: TEdit; NewText: string);
var
OldOnChange: TNotifyEnent;
begin
OldOnChange := Edit.OnChange;
Edit.OnChange:= NIL;
Edit.Text := NewText;
Edit.OnChange:= OldOnChange;
end;
← →
chir (2005-01-14 00:42) [12]> A.S.D.
Отличная идея! :) ща переделаю... а то у меня штук 20 подряд идет подобного текста:
cxTE_surname.Properties.OnChange := nil;
cxTE_surname.Text := DM.ADOQ2.FieldByName("surname").AsString;
cxTE_surname.Properties.OnChange := cxFIOPropertiesChange;
спасибо всем!
← →
chir (2005-01-14 00:47) [13]> A.S.D
а еще лучше вот так:
procedure SetEditText(Receiver: TObject; NewText: string);
var
OldOnChange: TNotifyEnent;
begin
OldOnChange := Receiver.OnChange;
Receiver.OnChange:= NIL;
Receiver.Text := NewText;
Receiver.OnChange:= OldOnChange;
end;
умнею однако :) test
← →
Юрий Зотов © (2005-01-14 00:56) [14]> chir (14.01.05 00:47) [13]
> а еще лучше вот так:
А еще лучше вот так:
OldOnChange := Receiver.OnChange;
try
Receiver.OnChange:= NIL;
Receiver.Text := NewText;
finally
Receiver.OnChange:= OldOnChange;
end;
← →
begin...end © (2005-01-14 11:11) [15]> [13] chir (14.01.05 00:47)
Класс TObject не содержит свойства Text и метода OnChange.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.047 c