Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Вниз

Как сделать Edit1.Text := test , чтобы при этом не срабатывало   Найти похожие ветки 

 
Кто--то   (2004-10-10 02:47) [0]

событие OnChange ? Можно ли компоненту на время вообще отключить все события ?


 
Германн ©   (2004-10-10 03:24) [1]

Edit1.OnChange:=nil;
Edit1.Text:="test";
Edit1.OnChange:=Edit1Change;

Например!

Насчет ВСЕХ событий молчу.


 
Кто--то   (2004-10-10 04:20) [2]


> Германн ©   (10.10.04 03:24) [1]
> Edit1.OnChange:=nil;
> Edit1.Text:="test";
> Edit1.OnChange:=Edit1Change;
>
> Например!


Этот кривой подход я и сам знаю.

И в OnChange надо не вписывать кодом, а сохранять его содержимое, а потом восстанавливать. Для этого ещё нужно вводить дополнительную переменную.
var
 NF : TNotifyEvent;
begin
 NF := Edit1.OnChange;
 Edit1.OnChange := nil;
 Edit1.Text:="test";
 Edit1.OnChange := NF;


Вопрос был о более нормальном подходе. Если он конечно существует.


 
Германн ©   (2004-10-10 04:29) [3]

2 Кто--то

Может быть и существует "более нормальный подход". Но тогда требует уточнения исходная постановка вопроса! Поскольку из сабжа не следует никакой необходимости введения "дополнительной переменной"!


 
piople ©   (2004-10-10 05:21) [4]

readonly ?!)))))))))))


 
TUser ©   (2004-10-10 07:12) [5]


> readonly ?!)))))))))))

Это тут не при чем


 
Gero ©   (2004-10-10 08:58) [6]

Переписать TCustomEdit.Change


 
Кто---то   (2004-10-11 01:41) [7]


> Gero ©   (10.10.04 08:58) [6]
> Переписать TCustomEdit.Change

А попроще что-нибудь ?
Может есть какие нибудь команды, которые могут очистить очередь событий ?


 
programania ©   (2004-10-11 01:46) [8]

E:=true;
Edit1.Text:="test";
E:=false;
.................
TForm1.Edit1Change(Sender: TObject);
begin
if E then exit;


 
Кто---то   (2004-10-11 02:43) [9]


> programania ©   (11.10.04 01:46) [8]

Все эти левые подходы и так понятны.

Хочется решения в одну строчку. Чтоб код не загромождать. Возможно такое ?


 
Defunct ©   (2004-10-11 02:59) [10]

>> Edit1.OnChange:=nil;
> Этот кривой подход я и сам знаю.

В VCL довольно часто применяется такой подход. Загляните в сорцы TRichEdit.


 
Кто--то   (2004-10-11 03:52) [11]


> Defunct ©   (11.10.04 02:59) [10]
> В VCL довольно часто применяется такой подход. Загляните
> в сорцы TRichEdit.


Там много перлов.

Например выражения типа :
if something = True then ...

Это же не значит, что надо это бездумно копировать.


 
Defunct ©   (2004-10-11 03:56) [12]

> Там много перлов.
> Например выражения типа :
> if something = True then ...

Да что вы говорите.
Просмотрел весь ComCtrls, нет там такого


 
Defunct ©   (2004-10-11 04:03) [13]

procedure TForm1.Edit1Change(Sender: TObject);
begin
 With Sender as TEdit Do
 Begin
   OnChange := nil;
   Text := " "+Text;
   OnChange := Edit1Change;
 End;
end;


Куда уж проще?
Решения в одну строчку здесь добиться нельзя так как надо выполнить два действия. Соответственно 2 строчки - минимум.


 
Кто--то   (2004-10-11 04:11) [14]

"C:\Program Files\Borland\Delphi7\Source\Vcl\FileCtrl.pas"
   if (FShowGlyphs = True) and (ItemHeight < (ExeBMP.Height + 1)) then

"C:\Program Files\Borland\Delphi7\Source\IntraWeb\IWExtCtrls.pas"
 if (FPicture <> nil) and (DesignMode = False) and (AutoSize = True) then begin

"C:\Program Files\Borland\Delphi7\Source\Vcl\Menus.pas"
     if not CheckDefaults or (Self.Enabled = True) then

и т. д.

А ну-ка давай извиняйся теперь, за то, что посмел поставить мои слова под сомнения, вместо того, чтобы просто сделать поиск.


 
Defunct ©   (2004-10-11 04:30) [15]

во-первых, все приведенные модули "редкоземельные"
FileCtrl - Win3.1 компоненты.
IWExtCtrls - стороннего производителя.
Menus - писан под D1 и имеет более серьезные перлы чем просто Self.Enabled = True, еще например мифический объект PopupList - настоящий гвоздь в одном месте и причина диких споров в этом форуме.

во вторых, записи
1. if Condition Then
2. if Condition = True Then
и по скорости и по коду будут идентичны.

> А ну-ка давай извиняйся теперь, за то, что посмел поставить мои слова под сомнения, вместо того, чтобы просто сделать поиск.

Ну разве только чтобы потешить твое самолюбие ;)

PS: тогда и ты извиняйся, т.к. в качестве примера я порекомендовал посмотреть TRichEdit из ComCtrls, а соответственно ты поставил под сомнения мои слова.


 
Кто--то   (2004-10-11 05:22) [16]


> Defunct ©   (11.10.04 04:30) [15]
> Ну разве только чтобы потешить твое самолюбие ;)

Ну, так я жду. Теште.


> во вторых, записи
> 1. if Condition Then
> 2. if Condition = True Then
> и по скорости и по коду будут идентичны.

Прибавление нуля тоже, по скорости будет идентичны. Так, что  давайте теперь везде прибавлять нули ?


 
Defunct ©   (2004-10-11 05:47) [17]

> Ну, так я жду. Теште.
Только после вас "ибо" мой пост был подвергнут сомнению первый.
;)

> Прибавление нуля тоже, по скорости будет идентичны. Так, что  давайте теперь везде прибавлять нули ?

Будь оно так, я бы возможно уже давно начал бы везде прибавлять нули. (программа выглядела бы солидней с нулями-то) Но вот к сожалению:

A := A + 0;
выльется в дополнительную команду:
add a, 0

И соотв. будет работать медленней.


 
TeNY ©   (2004-10-11 06:55) [18]

Что то больно умно это всё,попробуй просто событие WМ_SЕТТЕХТ


 
Defunct ©   (2004-10-11 07:04) [19]

> Кто--то  

Зы, прочитал вопрос ;)
В общем это, если надо все события отменить, тада подменяем обработчик WndProc на свой, в котором пропускаем все сообщения мимо ушей.


 
KSergey ©   (2004-10-11 07:11) [20]

> [19] Defunct ©   (11.10.04 07:04)
> В общем это, если надо все события отменить, тада подменяем
> обработчик WndProc на свой, в котором пропускаем все сообщения
> мимо ушей.

Замаешься фильтровать: что же пропустить (чтобы вообще функциклировала эта штука), а что не пропустить... Или это я ленивый?


 
Кто--то   (2004-10-12 01:25) [21]


> TeNY ©   (11.10.04 06:55) [18]
> Что то больно умно это всё,попробуй просто событие WМ_SЕТТЕХТ

Попробовали. Всё равно приходит OnChange.


 
ЮЮ ©   (2004-10-12 12:07) [22]

> [2] Этот кривой подход я и сам знаю.
И чего кривоно ты здесь усмотрел? Код прозрачен, логика ясна - чем подход-то не нравится? Единственно, чтобы отключить на время, а не навсегда следует код сделать "безопасным":

try
Edit1.OnChange := nil;
Edit1.Text:="test";
finally
Edit1.OnChange := Edit1Change ;
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.044 c
3-1096443366
NewDelpher
2004-09-29 11:36
2004.10.24
Апострофы в MS SQL


1-1097231872
mRodion
2004-10-08 14:37
2004.10.24
Еще по поводу Tlist. Сортировка.


4-1095760732
romario
2004-09-21 13:58
2004.10.24
Буфер обмена.


14-1096613025
Григорьев Антон
2004-10-01 10:43
2004.10.24
Куда бы съездить в выходные?


1-1097517696
Makhanev A.S.
2004-10-11 22:01
2004.10.24
Мерцание ListView...





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