Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.037 c
1-1105894004
slart
2005-01-16 19:46
2005.01.30
Подскажите компонент


1-1106044621
AndySD
2005-01-18 13:37
2005.01.30
RTTI?


6-1100608428
slaga
2004-11-16 15:33
2005.01.30
Полный путь в другой домен ?


14-1105523396
Кладовщик
2005-01-12 12:49
2005.01.30
Случайно попал в кладовку :)


1-1105949734
VID
2005-01-17 11:15
2005.01.30
Как отключить автоматический горизонтальный скроллинг в TreeView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский