Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать Edit1.Text := 'test', чтобы при этом не срабатывало [D7, WinME]


Страницы:   1 2

Кто--то ©   (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 Кто--то

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо