Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Можно ли запретить в "Edit" вводить буквы?

Ответить
Настройки темы
Delphi - Можно ли запретить в "Edit" вводить буквы?

Пользователь


Сообщения: 98
Благодарности: 1

Профиль | Отправить PM | Цитировать


Скажите, мож но ли запретить в "Edit" в инструментах "Стандартные" вводить буквы? Я тут подумал зачем писать кучу условий и окон подсказки, тем самым усложнять код програмки, есть ли возможность запретить ввод строковых символо (текста), что бы вводились только числа?

Отправлено: 14:26, 15-10-2008

 

Аватара для CyberDaemon

DOOMer


Сообщения: 3254
Благодарности: 438

Профиль | Отправить PM | Цитировать


Использовать компонент MaskEdit ?

-------
"640 K ought to be enough for anybody" Bill Gates, 1981


Отправлено: 15:03, 15-10-2008 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 98
Благодарности: 1

Профиль | Отправить PM | Цитировать


Извиняюсь за глупый вопрос, просто я только учусь и поэтому ещё не всё понятно а где находится "компонент MaskEdit" в смысле в какой групе инструментов?

Просто вот уже столько сижу с програмкой которую хочу написать в виде тренеровки но видно знаний катострофически мало так, как програмка то работает но вот когда оставляеш поля ввода "Edit1" и "Edit2" пустыми или пишеш текст то возникает критическая ошибка и програмка виснет



procedure TForm1.ZimLezaClick(Sender: TObject);


begin

Edit1.Enabled:= ZimLeza.Checked;
Edit3.Enabled:= ZimLeza.Checked;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

x1: real;
x2: integer;
y: real;

begin

x1:= StrToInt(Edit1.Text); x2:=StrToInt(Edit2.Text);
y:= StrToInt(Edit1.Text);

Edit3.Text:= floattostr(Strtofloat(Edit1.text)*(1.013- 0.0267123*strtofloat(edit2.text)));

label5.Caption :='Вес: '+ Edit3.Text+ #13 + 'Кл.раз: '+ Edit2.Text;

end;

end.

Отправлено: 15:35, 15-10-2008 | #3


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


ShadowMas, А вот посмотрите, мне когда-то тоже нужно было, код не на Delphi, но думаю, не составит труда перевести или другие участники помогут. [решено] *Теория* | Контроль ввода в компоненте Edit

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 16:25, 15-10-2008 | #4


Пользователь


Сообщения: 98
Благодарности: 1

Профиль | Отправить PM | Цитировать


if(Edit2->Text != "" && Edit1->Text != "" && StrToInt(Edit2->Text)<=StrToInt(Edit1->Text){
//если оба Edit'а не пусты то проверяем их на
//валидность
Edit2->Text=""; //Очищаем Edit2...
Edit2->SetFocus(); //...и устанавливаем фокус на него.
Application->MessageBox("Error", "Error", 16); //Показываем Messagebox.
}


Да, что то я совсем подвис не могу понять само условие if(Edit2->Text != "" && Edit1->Text != "" && StrToInt(Edit2->Text)<=StrToInt(Edit1->Text)

Что ето значит???

Отправлено: 17:02, 15-10-2008 | #5


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


ShadowMas,
Код: Выделить весь код
if(Edit2->Text != "" && Edit1->Text != "" && StrToInt(Edit2->Text)<=StrToInt(Edit1->Text)
Если Edit не равен пустому и содержимое первого Edit меньше или равно содержимому второго Edit то очистить второй Edit и установить фокус на него, я извиняюсь, это не совсем тот код, но мне он тогда помог. Нужно условие немножко изменить с && на || и добавить в обработчике onExit строки: Естественно Edit'ы могут быть разными.
Код: Выделить весь код
Edit1->Text=""; //Очищаем Edit1...
Edit1->SetFocus(); //...и устанавливаем фокус на него.
можно ещё так, в обработчике OnKeyPress:
Код: Выделить весь код
//Функция ввода, проверяет ввод только цифр  А != 0 или D != 0, для Edit1 и Edit2
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
        if ((Key >= '0') && (Key <= '9') || Key == '-' || Key == VK_BACK) {}  // цифры
        else if ((Key == '.') || (Key == ','))//{ // запятая
//                if (((TEdit*)Sender)->Text.Pos(DecimalSeparator)!= 0) // если запятая уже есть
                    Key = 0;
  //              else // если ещё нет
    //                Key = DecimalSeparator;
      //        }
             else
                   Key = 0; // не цифра
}
Здесь я оставил символ '-' - минус, точку и запятую, чтобы вводить дробные отрицательные значения.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:27, 15-10-2008 | #6


Пользователь


Сообщения: 98
Благодарности: 1

Профиль | Отправить PM | Цитировать


Спасибо Drongo очень подробно описал попробую применить к своей програмке на Delphi

Отправлено: 21:11, 15-10-2008 | #7


Пользователь


Сообщения: 140
Благодарности: 20

Профиль | Отправить PM | Цитировать


Лень копипастить, поэтому приведу ссылку на один из возможных вариантов решения задачи. Ее можно также усовершенствовать, использовав вместо "." константу DecimalSeparator.

З.Ы. Также можно использовать функции StrToIntDef и StrToFloatDef. Но это получится, так сказать, борьба с последствиями, а не их предотвращение.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:39, 16-10-2008 | #8


Аватара для detrin

Ветеран


Сообщения: 540
Благодарности: 42

Профиль | Отправить PM | Цитировать


В свое время часто пользовался вот таким кодом:
Код: Выделить весь код
var  OldText:String;
...
procedure TForm1.Edit1Change(Sender: TObject);
begin
if Edit1.Text<>'' then
try
  StrToFloat(Edit1.Text);
  OldText:=Edit1.Text;
except
  Edit1.Text:=OldText;
  Edit1.SelStart:=Length(Edit1.Text);
  Edit1.SelText:='';
end;
end;
На мой взгляд очень удобный и компактный код.

-------
Лучше ничего не делать, чем делать ничего.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:22, 20-10-2008 | #9


Пользователь


Сообщения: 140
Благодарности: 20

Профиль | Отправить PM | Цитировать


Порылся в своих исходниках и вот еще что обнаружил:
Код: Выделить весь код
procedure NumericKor(Edit: TEdit);
begin
  if Edit.Text <> '' then
  begin
    try
      StrToFloat(Edit.Text);//если поменять StrToFloat на StrToDate, то также можно контролировать правильность введения даты
    except
      Edit.SetFocus;
      MessageBeep(0);
      raise Exception.Create('"' + Edit.Text + '" - некорректное число');
      Exit;
    end
    Edit.Text := FloatToStr(StrToFloat(Edit.Text));
  end
  else
    Edit.Text := '0';
end;
Чем-то схоже это решение с решением detrin, единственное существеyное отличие, что мою процедуру нужно вставлять в событие OnExit компонента TEdit

Последний раз редактировалось VasyaPupkin81, 21-10-2008 в 08:21. Причина: Не обратил внимание на предыдущее сообщение

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:17, 21-10-2008 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Можно ли запретить в "Edit" вводить буквы?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Как удалить папку "Моя музыка","Мои Картинки", "Мое видео"? verdix Microsoft Windows 2000/XP 3 03-10-2009 23:46
Интернет - Как запретить запуск службы" RemoteAccess" масяня@ Microsoft Windows 7 2 01-10-2009 18:14
После установки Windows Xp меняются буквы дисков "C" и "D"!!! ProgrammerPC Автоматическая установка Windows 2000/XP/2003 3 26-09-2009 20:12
Запретить/удалить пункт "Programs" ("Программы") из меню кнопки "Start" ("Пуск") submaster Microsoft Windows NT/2000/2003 5 13-09-2006 12:29
HELP! Как запретить "расшаривание" файлов KSS Сетевые технологии 3 11-07-2003 01:37




 
Переход