![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать Edit1.Text := 'test', чтобы при этом не срабатывало [D7, WinME]
Кто--то © (2004-10-10 02:47:00)событие OnChange ? Можно ли компоненту на время вообще отключить все события ?
ЮЮ (2004-10-12 12:07:00) [1]> [2] Этот кривой подход я и сам знаю.
И чего кривоно ты здесь усмотрел? Код прозрачен, логика ясна - чем подход-то не нравится? Единственно, чтобы отключить на время, а не навсегда следует код сделать "безопасным":
try
Edit1.OnChange := nil;
Edit1.Text:='test';
finally
Edit1.OnChange := Edit1Change ;
end;
Кто--то (2004-10-12 01:25:00) [2]
> TeNY © (11.10.04 06:55) [18]
> Что то больно умно это всё,попробуй просто событие WМ_SЕТТЕХТ
Попробовали. Всё равно приходит OnChange.
KSergey (2004-10-11 07:11:00) [3]> [19] Defunct © (11.10.04 07:04)
> В общем это, если надо все события отменить, тада подменяем
> обработчик WndProc на свой, в котором пропускаем все сообщения
> мимо ушей.
Замаешься фильтровать: что же пропустить (чтобы вообще функциклировала эта штука), а что не пропустить... Или это я ленивый?
Defunct (2004-10-11 07:04:00) [4]> Кто--то
Зы, прочитал вопрос ;)
В общем это, если надо все события отменить, тада подменяем обработчик WndProc на свой, в котором пропускаем все сообщения мимо ушей.
TeNY (2004-10-11 06:55:00) [5]Что то больно умно это всё,попробуй просто событие WМ_SЕТТЕХТ
Defunct (2004-10-11 05:47:00) [6]> Ну, так я жду. Теште.
Только после вас "ибо" мой пост был подвергнут сомнению первый.
;)
> Прибавление нуля тоже, по скорости будет идентичны. Так, что давайте теперь везде прибавлять нули ?
Будь оно так, я бы возможно уже давно начал бы везде прибавлять нули. (программа выглядела бы солидней с нулями-то) Но вот к сожалению:
A := A + 0;
выльется в дополнительную команду:
add a, 0
И соотв. будет работать медленней.
Кто--то (2004-10-11 05:22:00) [7]
> Defunct © (11.10.04 04:30) [15]
> Ну разве только чтобы потешить твое самолюбие ;)
Ну, так я жду. Теште.
> во вторых, записи
> 1. if Condition Then
> 2. if Condition = True Then
> и по скорости и по коду будут идентичны.
Прибавление нуля тоже, по скорости будет идентичны. Так, что давайте теперь везде прибавлять нули ?
Defunct (2004-10-11 04:30:00) [8]во-первых, все приведенные модули "редкоземельные"
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 04:11:00) [9]"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:03:00) [10]
procedure TForm1.Edit1Change(Sender: TObject);
begin
With Sender as TEdit Do
Begin
OnChange := nil;
Text := ' '+Text;
OnChange := Edit1Change;
End;
end;
Куда уж проще?
Решения в одну строчку здесь добиться нельзя так как надо выполнить два действия. Соответственно 2 строчки - минимум.
Defunct (2004-10-11 03:56:00) [11]> Там много перлов.
> Например выражения типа :
> if something = True then ...
Да что вы говорите.
Просмотрел весь ComCtrls, нет там такого
Кто--то (2004-10-11 03:52:00) [12]
> Defunct © (11.10.04 02:59) [10]
> В VCL довольно часто применяется такой подход. Загляните
> в сорцы TRichEdit.
Там много перлов.
Например выражения типа :
if something = True then ...
Это же не значит, что надо это бездумно копировать.
Defunct (2004-10-11 02:59:00) [13]>> Edit1.OnChange:=nil;
> Этот кривой подход я и сам знаю.
В VCL довольно часто применяется такой подход. Загляните в сорцы TRichEdit.
Кто---то (2004-10-11 02:43:00) [14]
> programania © (11.10.04 01:46) [8]
Все эти левые подходы и так понятны.
Хочется решения в одну строчку. Чтоб код не загромождать. Возможно такое ?
programania (2004-10-11 01:46:00) [15]E:=true;
Edit1.Text:='test';
E:=false;
.................
TForm1.Edit1Change(Sender: TObject);
begin
if E then exit;
Кто---то (2004-10-11 01:41:00) [16]
> Gero © (10.10.04 08:58) [6]
> Переписать TCustomEdit.Change
А попроще что-нибудь ?
Может есть какие нибудь команды, которые могут очистить очередь событий ?
Gero (2004-10-10 08:58:00) [17]Переписать TCustomEdit.Change
TUser (2004-10-10 07:12:00) [18]
> readonly ?!)))))))))))
Это тут не при чем
piople (2004-10-10 05:21:00) [19]readonly ?!)))))))))))
Германн (2004-10-10 04:29:00) [20]2 Кто--то
Может быть и существует "более нормальный подход". Но тогда требует уточнения исходная постановка вопроса! Поскольку из сабжа не следует никакой необходимости введения "дополнительной переменной"!