Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Множество одинаковых процедур


Автор: Palladin 24.5.2009, 10:56
Здравствуйте, К примеру на форме n-edit-ов для каждого нужно разрешить ввод тольо цифр,точку и запятую(к примеру), в обработчике onKeyPress пишу:
Код

 if not (Key in ['0'..'9',#8,#13,'.',',']) then 
      Key := #0; 


Но проблема, у меня едитов 1000 штук(к примеру), получится что 1к раз я должен прописывать в он кейпресс один и тот же код, наверняка есть какойнить способ это обойти... и написать подобные код в одном месте, или нет?

Автор: Данкинг 24.5.2009, 11:09
Выдели все Edit'ы и повесь на них все одну и ту же процедуру onKeyPress... Ещё вот такой цикл для поиска нужных компнентов не забывай (т.е. в данном случае он, вероятно, и не нужен, но в принципе пригодится):
Код

for i := 0 to ComponentCount - 1 do if (Components[i] is TEdit) then
 begin
 .....
 end;


Автор: kami 24.5.2009, 11:12
Цитата(Palladin @  24.5.2009,  10:56 Найти цитируемый пост)
наверняка есть какойнить способ это обойти

Назначить один обработчик события всем 1к edit-ам

Автор: Palladin 24.5.2009, 11:13
Про цикл знаю, недавно наччился делать массив компонентов smile 
Про выделение не совсем понял, что зажать Shift и все повыделять? или как-то программно, если не программно, то только что попробовал, кинул 10 едитво на форму, выделил, потом в евентсе выбрал онкейпресс, но он создался лишь для первого...

Добавлено через 19 секунд
2Ками вот это-то мне и надо, как?

Автор: kami 24.5.2009, 11:22
Цитата(Palladin @  24.5.2009,  11:13 Найти цитируемый пост)
вот это-то мне и надо, как

Создаешь OnKeyPress для одного эдита.
Выбираешь другой эдит, в его OnKeyPress нажимаешь кнопочку комбобокса "вниз" и выбираешь событие, созданное для первого эдита.

Если надо программно, т.е. в рантайме - пример тебе показал Данкинг

Автор: Данкинг 24.5.2009, 11:23
Цитата(Palladin @  24.5.2009,  12:13 Найти цитируемый пост)
что зажать Shift и все повыделять?

Кстати, вроде бы и так можно - попробуй.

Автор: Palladin 24.5.2009, 11:30
Ок, спс, разобрался

Автор: CodeMonkey 24.5.2009, 11:46
1000-а edit-ов?  smile 
А вы уверены, что всё правильно делаете? Я бы повесился, если бы мне пришлось иметь дело с окнов с 1000 edit-ов...

Автор: bems 24.5.2009, 12:16
CodeMonkey, не преувеличивай. Если они все вместе служат чем-то типа грида (то есть используются однотипно) и выстроены в столбик (два столбика), и оно все прокручивается, то не такой уж ужасный интерфейс. 
Но сточки зрения пожирания ресурсов - все равно не феншуй.

Автор: xfoby 27.5.2009, 13:44
а может проще было бы в цикле всем Edit'ам добавить флаг ES_NUMBER, чем постоянно обрабатывать?

Автор: Rrader 27.5.2009, 13:49
xfoby, ES_NUMBER не позволит вводить точку или запятую (см. первое сообщение в теме).

Цитата(xfoby @  27.5.2009,  19:44 Найти цитируемый пост)
чем постоянно обрабатывать? 

А думаешь Винде охота постоянно гонять CInputLimiter (реализует стиль ES_NUMBER)? smile 

Автор: Frees 27.5.2009, 13:54
Цитата(xfoby @  27.5.2009,  15:44 Найти цитируемый пост)
а может проще было бы в цикле всем Edit'ам добавить флаг ES_NUMBER, чем постоянно обрабатывать?


похоже что там не плохо было бы сами едиты в цикле создавать

Автор: Palladin 29.5.2009, 10:12
С чего вы взяли что у меня едитов 1000? Я ж к примеру привел smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)