Ввод по маске

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

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

Ввод по маске

Сообщение Troublemaker » 24.05.2008 13:28:20

Слышал звон, да не знаю, где он

Есть ли возможность задать какой-то параметр у Edit-a или подобного контрола, чтобы данные можно было вводить только в определенном формате?

Ну, например, пишу нечто вроде .format='##/##/####' и контрол начинает выглядеть примерно так: __/__/____, то есть, на месте решеток я могу вводить только цифры, буквы мне ввести не дают, а слэши подставлены автоматически.
В штатной комплектации я не вижу ничего похожего, а MaskEdit, как я понял, предназначен для ввода паролей, а не для форматированного ввода.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Ввод по маске

Сообщение Attid » 24.05.2008 13:37:46

Troublemaker писал(а):MaskEdit, как я понял, предназначен для ввода паролей, а не для форматированного ввода.

неа, маскедит для этого и предназначен , только он был поломан когда увидили что его перенесли из дельфи копипастем, вроде кто-то говорил что в свн версии вроде починили, но точнее не скажу.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Ввод по маске

Сообщение Troublemaker » 24.05.2008 14:24:27

Гм... видать, что-то изменилось:
/lazarus/docs/html/lcl/maskedit/tmaskedit.html писал(а):TMaskEdit - an Edit box with characters masked out to avoid unauthorised reading.
Mask Edit: Displays an Edit Box with the input text masked by a selected character specified by PasswordChar, usually an asterisk, or by EditMask (a complete string), specified in TCustomMaskEdit.
Useful for inputting passwords etc.

(да, я вижу, что в хелпе по D7 написано иначе, но...)

Интересно, что сам модуль tmaskedit входит в комплект поставки 0,9,24,1б, нет только визуального компонента. Попробую поиграться с созданием в рантайме...
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Ввод по маске

Сообщение alexs » 24.05.2008 20:01:15

В 0.9,24 он не рабочий. Будет 0.9.26. Или юзай svn
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Ввод по маске

Сообщение Attid » 24.05.2008 20:40:58

Troublemaker писал(а):Интересно, что сам модуль tmaskedit входит в комплект поставки 0,9,24,1б, нет только визуального компонента.

не интересно, как я сказал выше его спрятали , историю про него можно было почитать поискав по форуму по слову "maskedit"
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Ввод по маске

Сообщение Troublemaker » 25.05.2008 06:23:18

Attid писал(а):историю про него можно было почитать

да, уже нашел в чейнджлоге для 9,24

Добавлено спустя 1 час 27 минут 52 секунды:
Ладно, хрен с ним, со вводом, но как через этот урезанный маскедит организовать ввод пароля?
(версию из svn или еще откуда-то качать не могу - денег не хватит)

Добавлено спустя 15 минут 6 секунд:
Или, может быть, кто-нибудь расщедрится да приложит сюда .lpk (сотоварищи, ес-сно) от предыдущей версии, в которой он еще присутствовал?
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Ввод по маске

Сообщение Attid » 25.05.2008 12:46:41

Troublemaker писал(а):Ладно, хрен с ним, со вводом, но как через этот урезанный маскедит организовать ввод пароля?

ввод пароля и в обычном можно организовать заменяешь PasswordChar на * и все.

Troublemaker писал(а):Или, может быть, кто-нибудь расщедрится да приложит сюда .lpk (сотоварищи, ес-сно) от предыдущей версии, в которой он еще присутствовал?

думаешь каждый хранит 10 версий лазаря ? в свн поищи можешь прям через веб интерфейс, делов то минут на 10.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Ввод по маске

Сообщение Troublemaker » 25.05.2008 14:15:01

Attid писал(а):ввод пароля ... заменяешь PasswordChar на *
Угу, попробую.

А еще пытаюсь вспомнить функции типа IsNumeric, которые проверяют, подходит ли строка под заданный тип. Есть такие?
(сам уже написал пресловутый IsNumeric, но, опять же, вдруг есть штатная?
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Ввод по маске

Сообщение Attid » 25.05.2008 15:23:22

Код: Выделить всё
function TryStrToInt(const s: string; var i : integer) : boolean;
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Ввод по маске

Сообщение Troublemaker » 25.05.2008 15:56:21

Attid писал(а):TryStrToInt

Ы-ы! Оно самое! А то я уже грешным делом собрался писать обработку эксепшна, который выдает StrToInt. Теперь и IsNumeric можно переписать.
Спасибо.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Ввод по маске

Сообщение Padre_Mortius » 26.05.2008 01:42:21

Если вопрос касается ввода данных в компонент, то наиболее оптимальным будет обработка только необходимых клавиш
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Ввод по маске

Сообщение Troublemaker » 26.05.2008 02:28:04

Padre_Mortius Логично. Но ввод по маске обычно подразумевает не только конкретные символы, но и в конкретных позициях. То есть, придется обрабатывать одни и те же клавиши по разному в зависимости от позиции текущего вводимого символа. Фактически - писать maskedit самому.
Пример такого хитромудрого ввода - номер автомобиля: $###$$## или $$$### ## и т.п., где # - обязательная цифровая позиция, $ - обязательная символьная позиция

Добавлено спустя 8 часов 29 минут 46 секунд:
Attid писал(а):думаешь каждый хранит 10 версий лазаря ?

Нашел у себя 9.22. Из дебиановской версии (deb легче распаковать чем exe-инсталлер виндовой версии, ненавижу!) достал maskedit.pp, остальные файлы не сильно отличаются от тех, что есть 9.24.

Вроде появился в палитре и даже позволяет себя настраивать. Буду посмотреть более подробно.

"Мы привычно плевали на любой копирайт...
...И писали в порты то, что я б
Не позволил печатать на месте цензуры" :P
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Ввод по маске

Сообщение ViTality » 26.05.2008 12:22:42

а у TDBEdit есть свойство EditMask. как им пользоваться? вписал туда "$$$ #######".
ноль реакции. шлепает цифры и буквы в произвольном месте. или это тоже не работает пока не починят TMaskEdit?

винда, лазарь/паскаль из подписи
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Re: Ввод по маске

Сообщение Troublemaker » 26.05.2008 12:33:10

ViTality писал(а):а у TDBEdit есть свойство EditMask
Вот из хелпа по D7:

Код: Выделить всё
Delphi Object and Component Reference
TEditMask type

Represents the mask that validates and formats user input.

Unit

MaskUtils or QMask

Delphi syntax:

type TEditMask = type string;

C++ syntax:

typedef AnsiString TEditMask

Description

TEditMask is a string that consists of three fields with semicolons separating them. The first part of the mask is the mask itself. The second part is the character that determines whether the literal characters of a mask are saved as part of the data. The third part of the mask is the character used to represent unentered characters in the mask.

These are the special characters used in the first field of the mask:

Character   Meaning in mask

!   If a ! character appears in the mask, optional characters are represented in the text as leading blanks. If a ! character is not present, optional characters are represented in the text as trailing blanks.
>   If a > character appears in the mask, all characters that follow are in uppercase until the end of the mask or until a < character is encountered.
<   If a < character appears in the mask, all characters that follow are in lowercase until the end of the mask or until a > character is encountered.

<>   If these two characters appear together in a mask, no case checking is done and the data is formatted with the case the user uses to enter the data.
\   The character that follows a \ character is a literal character. Use this character to use any of the mask special characters as a literal in the data.
L   The L character requires an alphabetic character only in this position. For the US, this is A-Z, a-z.
l   The l character permits only an alphabetic character in this position, but doesn't require it.

A   The A character requires an alphanumeric character only in this position. For the US, this is A-Z, a-z, 0-9.
a   The a character permits an alphanumeric character in this position, but doesn't require it.
C   The C character requires an arbitrary character in this position.
c   The c character permits an arbitrary character in this position, but doesn't require it.
0   The 0 character requires a numeric character only in this position.
9   The 9 character permits a numeric character in this position, but doesn't require it.

#   The # character permits a numeric character or a plus or minus sign in this position, but doesn't require it.
:   The : character is used to separate hours, minutes, and seconds in times. If the character that separates hours, minutes, and seconds is different in the regional settings of the Control Panel utility on your computer system, that character is used instead.
/   The / character is used to separate months, days, and years in dates. If the character that separates months, days, and years is different in the regional settings of the Control Panel utility on your computer system, that character is used instead.

;   The ; character is used to separate the three fields of the mask.
_   The _ character automatically inserts spaces into the text. When the user enters characters in the field, the cursor skips the _ character.

Any character that does not appear in the preceding table can appear in the first part of the mask as a literal character. Literal characters must be matched exactly in the edit control. They are inserted automatically, and the cursor skips over them during editing. The special mask characters can also appear as literal characters if preceded by a backslash character (\).

The second field of the mask is a single character that indicates whether literal characters from the mask should be included as part of the text for the edit control. For example, the mask for a telephone number with area code could be the following string:

(000)_000-0000;0;*

The 0 in the second field indicates that the Text property for the edit control would consist of the 10 digits that were entered, rather than the 14 characters that make up the telephone number as it appears in the edit control.

A 0 in the second field indicates that literals should not be included, any other character indicates that they should be included. The character that indicates whether literals should be included can be changed in the Edit Mask property editor, or programmatically by changing the MaskNoSave typed constant.

The third field of the mask is the character that appears in the edit control for blanks (characters that have not been entered). By default, this is the same as the character that stands for literal spaces. The two characters appear the same in an edit window. However, when a user edits the text in a masked edit control, the cursor selects each blank character in turn, and skips over the space character.

Note:   When working with multibyte character sets, each special mask character represents a single byte. To specify multi-byte characters using the L, l, A, a, C, or c specifiers, the mask characters must be duplicated as well. For example, LL would represent two single-byte alphabetic characters or a one double-byte character. Only single-byte literal characters are supported.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Ввод по маске

Сообщение ViTality » 26.05.2008 14:28:38

ну форматирование я посмотрел из твоего предыдущего поста.
кароче не суть. всеравно не работает.
вписал "(000)_000-0000;0;*".
таже дребедень :( непашет
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru