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

Вниз

Как сделать 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.029 c
4-1095760732
romario
2004-09-21 13:58
2004.10.24
Буфер обмена.


1-1097150494
denis24
2004-10-07 16:01
2004.10.24
Нажатие клавиши на форме после ее создания


1-1097223580
TUser
2004-10-08 12:19
2004.10.24
ShareMem and C


14-1096666396
quickblack
2004-10-02 01:33
2004.10.24
Проблема с входом в Win2000


1-1097402705
acsoft
2004-10-10 14:05
2004.10.24
Не вкладывать в EXE иконку.