Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [3]  Все   Вниз
  Печать  
Автор Тема: Запрет ввода символов  (Прочитано 61479 раз)
0 Пользователей и 1 Гость смотрят эту тему.
MixailK
Гость
« Ответ #60 : 19-12-2008 13:41 » 

Все гениальное просто. Не надо никаких сложных обработчиков. Стася я так понимаю студентка, и нужно её это что бы преподу сказать, типа да проверка есть на неправильный ввод и все. Во-вторых, хорошо когда пользователь может позвонить программеру и спросить почему у него запятая не вводиться в Edit, а если не может? Что делать пользователю? Хелпы наверняка нет к программке этой. А если много пользователей пользуются программой? и каждый(ая) звонит программеру и спрашивает: "что вы такое наделали?" " Ваша программа не работает", крики, истерики и т.д. А так все просто - ткнули пользователя носом и все... Можно, правда еще вытащить разделитель из системных настроек и его в сообщении указать.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #61 : 19-12-2008 13:44 » 

MixailK, эх, а к вечеру у поддержки еле язык ворочается
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #62 : 19-12-2008 14:01 » 

MixailK, первоначальный вопрос давно обсужден - мы уже вышли за его рамки в практическую сторону.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
MixailK
Гость
« Ответ #63 : 22-12-2008 11:08 » 

Уговорили... Задача все равно решается намного проще: Элемент TMaskEdit(с закладки Additional) свойство EditMask делаем -99999,99;1;0. Количество "9" можно варьировать как до, так и после запятой(точки) в зависимости от задачи. Удачи всем.
Записан
MixailK
Гость
« Ответ #64 : 22-12-2008 11:18 » 

Сорри. Маленько обшибся. Правильно так #99999,99;1;0. А если еще после этого поставить проверку, как я раньше писал то вопрос закрыт окончательно.
Записан
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #65 : 22-12-2008 15:48 » 

MixailK,  и что нулями все первые ненужные разряды забивать? Криво это, имхо. Данный компонент удобен только в случае жесткого диапазона чисел по разрядности, а вообще он более удобен для ввода номеров телефона и т. п.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #66 : 22-12-2008 17:49 » 

Цитата
EditText is the value of the text for the edit control after it is formatted using the EditMask. Before the text is fully entered into a masked edit control, the EditText includes a blank character for each unentered character. As characters are entered, the blank characters in the EditText are replaced by the values that the user types.

Не вижу, чтобы было написано, что надо забивать до упора. Кстати, формат EditMask в доке отсутствует...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #67 : 22-12-2008 17:59 » 

RXL, я добрался до Delphi и попробовал из любопытства TMaskEdit, после того, как сам про него вспомнил. zubr был прав, неудобная эта штука для подобного ввода числа.
Записан
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #68 : 22-12-2008 19:01 » 

RXL, формат числа будет всегда постоянный, определенный маской, то есть к примеру 5 символов до запятой и 2 после, остальное будут нули, или какие нить другие символы определенные маской.
Не знаю как в билдере, а в Delphi данный формат описывается:
Цитата
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.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #69 : 22-12-2008 19:50 » 

У меня в BCB6 в хелпах нету этого... Жаль

Уже много лет назад подсел на PCRE и с тех пор все более-менее сложное проверяю им. Как раз все это добро есть в BCB6 (а наверняка и раньше), а значит и в Delphi.
« Последнее редактирование: 22-12-2008 20:01 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
MixailK
Гость
« Ответ #70 : 23-12-2008 06:13 » 

Во-первых, порядок цифр, как правило, известен. Для "не корявого" решения этой проблемы, надо писать свой компонент с родителем Tedit, в его обработчике наводить красоту для ввода. Но из-за нескольких нулей в начале числа делать это не рационально. Не стоит изобретать велосипед. Если этой программой будут постоянно пользоваться, то на второй день пользователь будет на автомате вводить столько нулей сколько надо, а через 2 недели будет уверен, что так и должно быть и это очень удобно.
Ранее я писал о исходной постановке задачи и о том, что Вы раздули из мухи слона, в связи с этим любителей(профессионалов) Си просьба выложить код для Си Билдера, в доказательства того, что в нем это делать проще и Вы там профи(не хочу никого обидеть).
Записан
sss
Специалист

ru
Offline Offline

« Ответ #71 : 23-12-2008 07:17 » 

MixailK, я считаю себя "молодым специалистом" в BCB.... Мое мнение - для не корявого решения не надо лезть во ввод данных (есть ведь ошибки связанные не только с нажатием клавиш, напр.переполнение), а обрабатывать введенные данные и уже по ним выдавать отчеты..

Код:
void __fastcall TULongOptionsForm::BitBtn1Click(TObject *Sender)
{
  try
  {
    ActiveControl = edtLeftVal;
    uleft = StrToUlongA( edtLeftVal->Text.c_str());
   
    ActiveControl = edtRightVal;
    uright = StrToUlongA( edtRightVal->Text.c_str());

    if ( uright < uleft)
    {
      if ( SHOWYES( TEXT("Значение фильтра слева больше значения справа. Обменять ?"), NULL, Handle))
      {
        edtRightVal->Text = StrFromUlongA( uleft);
        edtLeftVal->Text = StrFromUlongA( uright);
      }
      else
      if ( SHOWYES(TEXT("Все равно продолжить ?"), NULL, Handle) == FALSE)
      {
         ActiveControl = edtLeftVal;
        return;
      }
    }

    ModalResult = mrOk;
  }
  catch( EExcept* e)
  {
    SHOWTHROW( e->GetReport( m_eReport), NULL, Handle);
    e->Release();
  }
}
Записан

while (8==8)
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #72 : 23-12-2008 07:23 » 

MixailK
1. Подобный компонент пишется один раз и за 30 минут и в дальнейшем он используется для всех остальных проектов.
2. Для программистов, использующих VS MFC, вообще данная проблема не стоит, так как там в классе CEdit данные вопросы уже решены. Для билдера же то же самое, что и для Delphi.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #73 : 23-12-2008 08:07 » 

MixailK, заставлять пользователя делать ненужные вещи - значит не уважать его. Представь тебе подобное заявление от конструктора велосипедов: "отсутствие седла - мелочь, к которой пользователь должен привыкнуть через два дня - я в этом уверен". И я не утрирую. Есть сделанное для людей (даже термин в сети есть - СДЛ) и есть все остальное (в GUI все остальное - некачественные поделки).
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: 1 2 [3]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines