Непонятна работа DI_FIXEDIT

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
Dec
Posts: 27
Joined: Wed 14 Jul, 2010 08:59
Been thanked: 1 time

Непонятна работа DI_FIXEDIT

Post by Dec » Mon 03 Jul, 2017 04:32

Имею маску (###) #99-99-99, начальное значение (012) 345-67-89, но в поле ввода появляется (012) 34-56-78. Так и задумано, или я чего то не понимаю?

User avatar
Alexey Samlyukov
Posts: 1759
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 2 times
Contact:

Непонятна работа DI_FIXEDIT

Post by Alexey Samlyukov » Mon 03 Jul, 2017 06:49

а ширина поля задана правильно?

Dec
Posts: 27
Joined: Wed 14 Jul, 2010 08:59
Been thanked: 1 time

Непонятна работа DI_FIXEDIT

Post by Dec » Mon 03 Jul, 2017 07:02

Если идет речь о поле MaxLength, то при значениях 0/15/100 результат один.

Shmuel
Posts: 5201
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

Непонятна работа DI_FIXEDIT

Post by Shmuel » Mon 03 Jul, 2017 13:08

Dec, это нормальное поведение, так как # в маске матчит пробел в вашем начальном значении.

Dec
Posts: 27
Joined: Wed 14 Jul, 2010 08:59
Been thanked: 1 time

Непонятна работа DI_FIXEDIT

Post by Dec » Mon 03 Jul, 2017 23:16

Shmuel, не понял объяснения. Мне не понятно, почему (012) 345-67-89 является корректной выходной строкой для маски (###) #99-99-99, но по какой то причине НЕ является корректной входной строкой. Т.е. если я решил сохранить ввод пользователя и при следующем показе диалога подставляю сохраненное значение, то пользователь получает не то, что он вводил до этого.

Давайте сравним посимвольно:

(###) #99-99-99
(012) 345-67-89

После закрывающей скобки в маске и строке пробелы - совпадает. Следующий символ в маске - #, а в строке - 3, также совпадает, поскольку # "позволяет вводить в данную позицию строки ввода цифры, пробел и знак минуса". Последующие символы также совпадают. Поясните, где у меня логическая ошибка?

Shmuel
Posts: 5201
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

Непонятна работа DI_FIXEDIT

Post by Shmuel » Tue 04 Jul, 2017 06:29

Dec wrote:
Mon 03 Jul, 2017 23:16
После закрывающей скобки в маске и строке пробелы - совпадает.
Алгоритм устроен не так. Символы в строке маски, не являющиеся "особыми", не сопоставляются с символами входной строки, они являются просто "обрамлением" для действительной информации в выходной строке. Пробел в маске не сопоставляется с пробелом во входной строке, он просто вставляется в выходную. Следующий символ маски # сопоставляется с пробелом во входной строке, вставляя и его.

Я не утверждаю, что существующий алгоритм - единственно правильный и т.п. Но так он работает. Во избежание недоразумений - это не я его писал. Смотрите его реализацию в функции Edit::SetString (файл edit.cpp).
Last edited by Shmuel on Tue 04 Jul, 2017 06:35, edited 1 time in total.

Dec
Posts: 27
Joined: Wed 14 Jul, 2010 08:59
Been thanked: 1 time

Непонятна работа DI_FIXEDIT

Post by Dec » Tue 04 Jul, 2017 09:06

Сейчас все понял, спасибо. Я бы сказал, что было выбрано весьма своеобразное решение.

Post Reply

Return to “Разработка плагинов”