Текущий архив: 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.5 MB
Время: 0.036 c