Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 18:21   #1
flyinsky
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 21
По умолчанию Ограничить ввод в EDIT

Здравствуйте всем. Есть Edit1 и DBEdit1 как мне сделать так чтобы пользователь мог вводить в Edit1 число не меньше 0 но и не больше числа отображаемого в DBEdit1

Ввод только чисел оформил вот так,
Код:
 procedure TForm4.Edit1KeyPress(Sender: TObject; var Key: Char);
 begin
case key  of
'0'..'9',#8,',':;
else
key:=#0;

  end;
а вот с остальным не могу справиться
flyinsky вне форума Ответить с цитированием
Старый 12.12.2010, 18:58   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Не лучший вариант у твоей процедуры. Разделитель может быть точкой и будут проблемы при конвертации, запятую можно поставить первым символом и т.п.
Напиши, что-то вроде этого:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
 var  vrPos, vrLength, vrSelStart: byte;
const
  I: byte = 1; //2 символа после decimalseparator-а
begin
  with Sender as TEdit do
  begin
    vrLength := Length(Text);
    vrPos := Pos(decimalseparator, Text);
    vrSelStart := SelStart;
  end;
  case Key of
    '0'..'9':
      begin
        if (vrPos > 0) and (vrLength - vrPos > I) and (vrSelStart >= vrPos) then
          Key := #0;
      end;
    ',', '.':
      begin
        if (vrPos > 0) or (vrSelStart = 0) or (vrLength = 0) then
          Key := #0
        else
          Key := decimalseparator;
      end;
    #8: ;
  else
    Key := #0;
  end;
end;
А ограничивать ввод максимального числа я бы не рекомендовал. Например, макс. число = 25, я пытаюсь ввести 26. Двойку поставил, а по шестерке клацаю по клавише - а ничего не печатается... пока дойдет, что нельзя такое число вводить. Сильно на нервы действует. Лучше поставить проверку на доступность кнопки действия, например
Код:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  if Edit1.Text <> '' then
    Button1.Enabled := StrToInt(Edit1.Text) <=
      DBEdit1.DataSource.DataSet.FieldByName('Поле').AsFloat;
end;
_SERGEYX_ вне форума Ответить с цитированием
Старый 12.12.2010, 19:53   #3
flyinsky
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 21
По умолчанию

to _SERGEYX_

Спасибо за идейку.
flyinsky вне форума Ответить с цитированием
Старый 14.12.2010, 15:53   #4
Space91
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 13
Восклицание Коль тема подходящая..

Мне тоже надо ограничить ввод в едит!
а) если поле не заполнено
б)если поле содержит сила
в)если Русские буквы
1-я часть работает(если поле не заполнено) другие нет. вернее я не знаю как синтаксически правильно записать.
Код:
procedure TForm1.BitBtn9Click(Sender: TObject);
begin
 if edit1.Text=' '
 then
 showmessage('поле не заполнено')
   if edit1.Text=0..9;
   then
   showmessage('недопустимое значение')
     if edit1.Text=а..я and А..Я;
     then
     showmessage('недопустимое значение')
Space91 вне форума Ответить с цитированием
Старый 14.12.2010, 23:09   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Можно на KeyPress повесить ограничение ввода
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key in ['а'..'я'] + ['А'..'Я']+ ['0'..'9'] then Key := #0
end;
Или проверку поставить
Код:
procedure TForm1.Button2Click(Sender: TObject);
var i: Integer;
begin
  for i := 0 to Length(Edit1.Text) do
    if (Edit1.Text[i] in ['0'..'9'] + ['а'..'я'] + ['А'..'Я']) then
    begin
      ShowMessage('Неверно введены символы');
      Break;
    end;
end;
_SERGEYX_ вне форума Ответить с цитированием
Старый 15.12.2010, 15:35   #6
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
Сообщение от flyinsky Посмотреть сообщение
Здравствуйте всем. Есть Edit1 и DBEdit1 как мне сделать так чтобы пользователь мог вводить в Edit1 число не меньше 0 но и не больше числа отображаемого в DBEdit1
а не проше SpinEdit1, вкладка Samples, использовать?

Код:
SpinEdit1.MinValue:=0;
SpinEdit1.MaxValue:=StrToInt(DBEdit1.Text);
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в TEdit ограничить ввод чисел? XerSon Общие вопросы Delphi 8 08.06.2010 11:50
Как ограничить ввод? alsq Общие вопросы Delphi 8 24.03.2007 14:30