Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Вниз

edit.keypress   Найти похожие ветки 

 
enZinger   (2007-01-07 12:35) [0]

Подскажите как в событии keypress TEdit сделать обработку, что бы можно было вводить только

!%*+-./=:[]^_{}@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧС
МИТЬБЮЁйцукенгшщзхъфывапролджэячсмитьбюё


а в остальных случаях ничего не вводило

Я нашел как сделать наоборот, но это немного не подходит.
 if ((UpCase(Key) = ";")) then
 Key := #0;


 
PZ   (2007-01-07 12:49) [1]



Const
 S = "!%*+-./=:[]^_{}@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"+
     "abcdefghijklmnopqrstuvwxyzЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧС"+
     "МИТЬБЮЁйцукенгшщзхъфывапролджэячсмитьбюё";

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 If not (Pos(Key, S) > 0) then Key := #0;
end;


 
Юрий Зотов ©   (2007-01-07 17:40) [2]

> PZ   (07.01.07 12:49) [1]

Если сделать не строку, а множество и проверять через in, то будет работать раз в 100 быстрее. А код практически тот же.


 
PZ   (2007-01-07 19:42) [3]

>  [2] Юрий Зотов ©   (07.01.07 17:40)

Возможно в смысле скорости будет лучше, но мне показалось, так (как у меня) проще.


 
Loginov Dmitry ©   (2007-01-08 00:39) [4]

> Если сделать не строку, а множество и проверять через in,
> то будет работать раз в 100 быстрее.


Не то это место, где можно такую разницу в скорости уловить.
А насчет 100 раз - потестируйте. Возможно эта цифра уменьшится на один-два порядка.


 
Юрий Зотов ©   (2007-01-08 15:03) [5]

> PZ   (07.01.07 19:42) [3]

Не "возможно", а "точно". Что касается простоты, то скажите сами, какой вариант сложнее:
1. const S = "..."; if Pos(Key, S) > 0 then...
2. const S = [...]; if Key in S then...

Вам не кажется, что они одинаково просты?

> Loginov Dmitry ©   (08.01.07 00:39) [4]

1. Место тут ни при чем. Это стиль. Он либо грамотный, либо нет, независимо ни от каких мест.

2. Нет нужды тестировать то, что хорошо известно и без тестирования. Если же есть сомнения, то предлагаю Вам заняться тестированием самому, а результате убедиться (и запомнить), что я никогда ничего не говорю просто так. Чего и Вам желаю.


 
PZ   (2007-01-08 16:05) [6]

>  [5] Юрий Зотов ©   (08.01.07 15:03)

Да, безусловно  2. проще, но почему-то он у меня не работает, или я неправильно записываю:

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
 If not (Key in S) then Key := #0;
end;


 
PZ   (2007-01-08 16:06) [7]

S из [1]


 
Anatoly Podgoretsky ©   (2007-01-08 16:09) [8]

IN применимо только к множествам


 
PZ   (2007-01-08 16:13) [9]

Мне не понятно, как выражение из [1] представитеь в виде множества


 
Anatoly Podgoretsky ©   (2007-01-08 16:15) [10]

> PZ  (08.01.2007 16:13:09)  [9]

Множество представляется в квадратных скобка или через объявление set of type


 
PZ   (2007-01-08 16:21) [11]

Но я записываю
Const
 S = [!%*+-./=:[]^_{}@0123456789ABCD...];
и получаю ошибку Illegal character in input file: !


 
Anatoly Podgoretsky ©   (2007-01-08 16:24) [12]

> PZ  (08.01.2007 16:21:11)  [11]

[...[..]...];

Кроме того что за типы [!%*+-./ по твоему?


 
Anatoly Podgoretsky ©   (2007-01-08 16:27) [13]

Ты бы почитал книгу по основам Паскаля, так далеко не уедешь или как минимум справку, хотя бы по теме set constructors


 
PZ   (2007-01-08 16:32) [14]

> [12] Anatoly Podgoretsky ©   (08.01.07 16:24)

Скорее всего это тип Word.

Вы можете конкретно выражение из [0] представить в виде множества. Я этого не в состоянии сделать.


 
Anatoly Podgoretsky ©   (2007-01-08 16:34) [15]

> PZ  (08.01.2007 16:32:14)  [14]

Ты справку прочитал, там есть пример или его надо сюда скопировать?


 
Юрий Зотов ©   (2007-01-08 16:36) [16]

const
S = ["!", "%", "*", "+", "-", ".", "/", "=", ":", "[", "]", "^", "_", "{", "}", "@",
   "0".."9", "A".."Z", "a".."z", "А".."Я", "а".."я","Ё", "ё"];


 
PZ   (2007-01-08 16:52) [17]

>  [16] Юрий Зотов ©   (08.01.07 16:36)

Изящно получается. Спасибо.


 
Юрий Зотов ©   (2007-01-08 17:34) [18]

> PZ   (08.01.07 16:52) [17]

Это просто язык Паскаль.

Кстати, самому стало интересно и тест я таки провел. Вариант с Set работает быстрее приблизительно в 25 раз.

const
 AString = "!%*+-./=:[]^_{}@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"+
   "abcdefghijklmnopqrstuvwxyzÉÖÓÊÅÍÃØ&#217 ;ÇÕÚÔÛÂÀÏÐÎËÄÆ& #221;ß×Ñ"+
   "ÌÈÒÜÁÞ¨éöóêåí& #227;øùçõúôûâàïðî&#2 35;äæýÿ÷ñìèòüáþ&#184 ;";

 ASet = ["!", "%", "*", "+", "-", ".", "/", "=", ":", "[", "]", "^", "_", "{", "}", "@",
   "0".."9", "A".."Z", "a".."z", "À".."ß", "à".."ÿ","¨", "¸"];

 Count = 10000000;

procedure TForm1.Button1Click(Sender: TObject);
var
 T: DWORD;
 i: integer;
begin
 Randomize;
 Caption := "";
 T := GetTickCount;
 for i := 1 to Count do
   if Pos(Char(1 + Random(256)), AString) > 0 then;
 Caption := IntToStr(GetTickCount - T)
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 T: DWORD;
 i: integer;
begin
 Randomize;
 Caption := "";
 T := GetTickCount;
 for i := 1 to Count do
   if Char(1 + Random(256)) in ASet then;
 Caption := IntToStr(GetTickCount - T)
end;


 
PZ   (2007-01-08 18:16) [19]

У меня получается 21-22 раза


 
Loginov Dmitry ©   (2007-01-08 22:40) [20]

> Вариант с Set работает быстрее приблизительно в 25 раз.


Ну вот. А говорили 100
:))))


 
Palladin ©   (2007-01-08 22:47) [21]


> [20] Loginov Dmitry ©

это от машины зависит, я уверен что на 486 именно 100 и будет, если не больше...


 
Юрий Зотов ©   (2007-01-08 23:18) [22]

> Loginov Dmitry ©   (08.01.07 22:40) [20]

Извините, Дмитрий, ошибся, навскидку ведь прикидывал.
:o)

Действительно, не в 100 раз, а меньше. Но не на порядок и не на два. Так кто же сильнее ошибся?
:o)


 
Германн ©   (2007-01-09 02:09) [23]


> Юрий Зотов ©   (08.01.07 17:34) [18]
>
> > PZ   (08.01.07 16:52) [17]
>
> Это просто язык Паскаль.
>
> Кстати, самому стало интересно и тест я таки провел. Вариант
> с Set работает быстрее приблизительно в 25 раз.
>

Порадовало. Самый любимый мой тип при передаче данных в/из внешних устройств на основе 51-семейства. :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.04 c
15-1168232422
Rentgen
2007-01-08 08:00
2007.01.28
Тормозят выполнения запросов SELECT в IB 7.0


15-1168416208
Pazitron_Brain
2007-01-10 11:03
2007.01.28
Ищется программа, для статистики принятого трафика


1-1165036767
allrussia
2006-12-02 08:19
2007.01.28
Как в Memo при наведении мыши на слово оно выделялось цветом


2-1168673944
vegarulez
2007-01-13 10:39
2007.01.28
Каким методом можно вывести список комба бокса?


15-1168261497
Iosif
2007-01-08 16:04
2007.01.28
Помогите упростить





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский