Главная страница
    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.047 c
14-1105616104
4eshka)
2005-01-13 14:35
2005.01.30
Сравнения строк


3-1104142318
Otari
2004-12-27 13:11
2005.01.30
Помощь !!


1-1106143494
vic1
2005-01-19 17:04
2005.01.30
ComboBox


1-1105696549
Hmm
2005-01-14 12:55
2005.01.30
Можно ли программно определить "испорчен" ли JPG файл или нет?


1-1106119659
vega
2005-01-19 10:27
2005.01.30
Закрываемая панель





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский