Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [delphi] ограничение на Edit


Автор: porsche 23.9.2010, 15:27
Код

case Key of
    '1'..'9': begin
    if vrlength=1 then //vrlength длинна строки в поле edit
    if edit1.Text[1]='0' then begin delete (s,1,1); edit1.Text:=s;end;//s строка
     if vrlength=2 then
    if (edit1.Text[1]in['-','+']) and (edit1.Text[2]='0') then
     begin edit1.Clear;delete (s,2,1);edit1.text:=s;end;

        //проверяем положение курсора и количество знаков после запятой
        if (vrPos > 0) and (vrLength - vrPos > I) and (vrSelStart >= vrPos) then
          Key := #0; //"погасить" клавишу
      end;

Проблема в том что в поле Edit должна произойти замена при вводе допусти -09 на -9 а вместо этого он заменяет на 9- не могу сообразить в чем проблема в первом случаем все работает где 09 заменяет автоматически на 9...знания в Delphi малы помогайте)

Автор: Данкинг 23.9.2010, 15:59
Код

if (edit1.Text[1]in['-','+']) and (edit1.Text[2]='0') then
     edit1.text:=edit1.text[1]+trim(copy(edit1.text,3,200));

Автор: porsche 23.9.2010, 16:11
не помогло все так же  мб проблема в другом месте? http://forum.vingrad.ru/forum/topic-310671/kw-%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%B8-edit.html может поможет посмотрите пожалуйста завтра сдавать...точнее сегодня)

Автор: БелАмор 23.9.2010, 16:41
Цитата(porsche @  23.9.2010,  15:27 Найти цитируемый пост)
Проблема в том что в поле Edit должна произойти замена при вводе допусти -09 на -9

Учитесь правильно формулировать задачу...
Как я её понял (возможно, неправильно):
Имеется строка, представляющая положительное или отрицательное число, укладывающееся в диапазон типа Integer, возможно, с лидирующими нулями. Требуется проверить правильность формата и убрать лидирующие нули.
Код

var
  IntVal: Integer;
begin
  try
    IntVal := StrToInt(Edit1.Text);
    Edit1.Text := IntToStr(IntVal);
  except
    //...
  end;

Автор: porsche 23.9.2010, 16:56
Цитата(БелАмор @ 23.9.2010,  16:41)
Цитата(porsche @  23.9.2010,  15:27 Найти цитируемый пост)
Проблема в том что в поле Edit должна произойти замена при вводе допусти -09 на -9

Учитесь правильно формулировать задачу...
Как я её понял (возможно, неправильно):
Имеется строка, представляющая положительное или отрицательное число, укладывающееся в диапазон типа Integer, возможно, с лидирующими нулями. Требуется проверить правильность формата и убрать лидирующие нули.
Код

var
  IntVal: Integer;
begin
  try
    IntVal := StrToInt(Edit1.Text);
    Edit1.Text := IntToStr(IntVal);
  except
    //...
  end;

Мне требуется возможность допускания одного "0" вначале и после "-" или "+" только тогда когда после него следует "," во всех остальных случаях когда после "0" идет другая цифра убрать "0"... я только начал изучать delphi и не знаком с конструкциями try .. except и try .. finally можешь поподробнее объяснить что и как?

Автор: БелАмор 23.9.2010, 17:27
Цитата(porsche @  23.9.2010,  16:11 Найти цитируемый пост)
 Тут полный код может поможет посмотрите пожалуйста 

Однако-же...
Так в чём реально состоит задача?
Ввести два числа с плавающей запятой и выполнить с ними действия с нужными проверками?
Для этого не надо ничего ловить на лету. Достаточно сделать проверку перед вычислениями и выдать сообщение, если числа введены неправильно.
Корректировка на лету - это ваша придумка или всё-таки часть задания?

Цитата

я только начал изучать delphi и не знаком с конструкциями try .. except и try .. finally можешь поподробнее объяснить что и как?


try-except
Если в блоке try происходит исключение, то его дальнейшее выполнение прерывается и происходит переход в блок except При этом исключение будет считаться обработанным.
Если в блоке try исключения не произошло, блок except не выполняется.

try-finally
Если в блоке try происходит исключение, то его дальнейшее выполнение прерывается.
Независимо от того, произошло исключение или нет, блок finally будет выполнен в любом случае. Если было исключение, то оно не считается обработанным и после завершения блока finally летит дальше и требует обработки.

Если вы этого не проходили и делать через исключения нежелательно, можно воспользоваться функцией TryStrToFloat, которая в случае ошибки просто возвращает False
Код

var
  FloatVal: Double;
begin
  if TryStrToFloat(Edit1.Text, FloatVal) then
    Edit1.Text := FloatToStr(FloatVal);

Ошибку можно обработать по else

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)