MaskEdit+кирилица

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

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

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

MaskEdit+кирилица

Сообщение GAMER »

Можно сабж как-то подружить? Нужно, чтобы могли ввести только 2 символа кирилицы, как реализовать?
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Может проще на OnKeyPress навесить функцию проверки?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

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

Сообщение GAMER »

Имеете в виду на простой Edit?
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Да, на простой Edit. Проверяйте текущий вводимый символ и количество ранее введённых кириллических. Если юзер пытается ввести лишнее - обнуляйте переменную Key.
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Спасибо за идею, но что-то у меня не получилось? Проверять количество через Length(Edit1.Text) или отдельную переменную использовать?
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

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

При работе с Lazarus необходимо использовать UTF8Length (да и вобще старатся использовать UTF8XXXX функции)
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Спасибо за подсказку, все время забываю про UTF8. Хотя странно, что MaskEdit до сих пор не поддерживает кирилицу.
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

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

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

Сообщение Vadim »

Nik
Length - это FPC. Вы туда письмо напишите, чтобы они там стройными рядами и так далее... :)
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

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

Сообщение VirtUX »

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

Вот-вот! Я пользуюсь Length там, где важно знать количество байтов, а UTF8Length, там, где кличество символов.
О великий компилятор! Пожалуста! Оставь все как есть!
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Вот что ответили разработчики по поводу 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.
Ответить