Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.30;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.062 c
1-1105971175
hgd
2005-01-17 17:12
2005.01.30
Вшитие в exe файлы раных форматов


6-1099995518
Sergey18
2004-11-09 13:18
2005.01.30
Определение изменения Web-страницы


1-1105885062
Piter
2005-01-16 17:17
2005.01.30
Что означают параметры в директивах


1-1105912669
LS
2005-01-17 00:57
2005.01.30
работа с WebBrowser


4-1102694755
sashas
2004-12-10 19:05
2005.01.30
Как изменить стиль окна