MaskEdit+кирилица

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

MaskEdit+кирилица

Сообщение GAMER » 13.09.2010 20:40:55

Можно сабж как-то подружить? Нужно, чтобы могли ввести только 2 символа кирилицы, как реализовать?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: MaskEdit+кирилица

Сообщение Nik » 13.09.2010 20:45:51

Может проще на OnKeyPress навесить функцию проверки?
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: MaskEdit+кирилица

Сообщение Mr.Smart » 13.09.2010 20:54:38

Тогда уж к OnUTF8KeyPress
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: MaskEdit+кирилица

Сообщение GAMER » 13.09.2010 21:01:20

Имеете в виду на простой Edit?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: MaskEdit+кирилица

Сообщение Nik » 13.09.2010 22:35:40

Да, на простой Edit. Проверяйте текущий вводимый символ и количество ранее введённых кириллических. Если юзер пытается ввести лишнее - обнуляйте переменную Key.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: MaskEdit+кирилица

Сообщение GAMER » 13.09.2010 23:21:49

Спасибо за идею, но что-то у меня не получилось? Проверять количество через Length(Edit1.Text) или отдельную переменную использовать?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: MaskEdit+кирилица

Сообщение alexs » 14.09.2010 00:14:31

GAMER писал(а):Проверять количество через Length(Edit1.Text) или отдельную переменную использовать

При работе с Lazarus необходимо использовать UTF8Length (да и вобще старатся использовать UTF8XXXX функции)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: MaskEdit+кирилица

Сообщение GAMER » 14.09.2010 01:15:32

Спасибо за подсказку, все время забываю про UTF8. Хотя странно, что MaskEdit до сих пор не поддерживает кирилицу.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: MaskEdit+кирилица

Сообщение Nik » 14.09.2010 11:43:47

(да и вобще старатся использовать UTF8XXXX функции)

Привык к "простому" Length после 8 лет в Delphi :) Вообще, имхо, нелогично: Lazarus всюду использует UTF8, это его родная кодировка, но для работы с UTF8-строками нужно использовать отдельный "нестандартные" функции. Логичнее было бы Length и т.п. перевести на работу с UTF8, а отдельно вынести AnsiLength и т.п.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: MaskEdit+кирилица

Сообщение Vadim » 14.09.2010 11:51:36

Nik
Length - это FPC. Вы туда письмо напишите, чтобы они там стройными рядами и так далее... :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: MaskEdit+кирилица

Сообщение Mr.Smart » 14.09.2010 11:55:55

А я бы Length вообще не трогал. Есть UTF8Length и тому подобное.
Вот кажется мне, что будет неимоверная ж...а не сравнимая с текущими проблемами (у некоторых кодеров) т.к. кода написано неимоверно много и зачастую при написании софта пофиг на тип используемой кодировки!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: MaskEdit+кирилица

Сообщение VirtUX » 14.09.2010 15:30:40

Mr.Smart писал(а):пофиг на тип используемой кодировки!

Вот-вот! Я пользуюсь Length там, где важно знать количество байтов, а UTF8Length, там, где кличество символов.
О великий компилятор! Пожалуста! Оставь все как есть!
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: MaskEdit+кирилица

Сообщение GAMER » 14.09.2010 18:47:32

Вот что ответили разработчики по поводу UTF8 для сабжа.
"This is not a bug, it is done by design."
TMaskEdit currently supports only ASCII input.
All non-ASCII input is denied and when setting the Text property (or pasting into the control), all non-ASCII characters are replaced with a question mark.

A non-ASCII characer (UTF8) can be up to 3 (or even more?) bytes/chars long, which will screw up internal calculations on the length of the mask, the position of mask-chars, cursor position and wether or not a char can be inserted.
(See my design comments in maskedit.pp)

An UTF8 version of TMaskEdit will require an almost complete re-design of the internal workings.

Given the low interest in this component (my own experience when I rewrote major parts of it), I guess that not so many people will contribute to it.
It can be done of course, so feel free to create (or derive from TMaskEdit) a TMaskEditUTF8 or make the current implementation work with UTF8 chars.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 53

Рейтинг@Mail.ru