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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2011, 19:09   #21
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Парни, я тут придумал так, что скажете:

Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  #8,'0'..'9': ; // цифры и <Backspace>
  #13: ;// клавиша <Enter>
  '.': // разделитель целой и дробной частей числа
  begin
    DecimalSeparator:= '.';
    if Pos(DecimalSeparator, Edit1.Text) <> 0 then Key:= Chr(0); // запрет ввода второго разделителя
  end;
  else // остальные символы запрещены
    Key := Chr(0);
end;
end;


procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_RETURN then
    begin
      if (Label37.Caption = 'Введите новое значение (диаметр):') and (Edit1.Text <> '') then
      begin
        if (StrToFloat(Edit1.Text) <= 99) and (StrToFloat(Edit1.Text) >= 1) then
          begin
            if Length(Edit1.Text) <= 4 then
            begin
              if Edit1.Text[Length(Edit1.Text)] <> '.' then
                Label24.Caption:= 'Диаметр: ' + Edit1.Text + ' мм'
              else
                Label24.Caption:= 'Диаметр: ' + Edit1.Text + '0' + ' мм'
            end;
          end
        else
          Label24.Caption:= 'Диаметр: н/а';
      end
      else
        Label24.Caption:= 'Диаметр: н/а';
    end;
end;

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

________


Разбил на 2 процедуры, вроде код работает, пойдет так или можно по лучше сделать?
сори просто на сайте автоматически первые пробелы убираются, может поэтому плохо читаемо ))
даешь высокое напряжение

Последний раз редактировалось Serge_Bliznykov; 28.06.2011 в 20:28.
Vova777 вне форума Ответить с цитированием
Старый 28.06.2011, 19:15   #22
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

А чтобы хорошо читалось, используйте тэг CODE. Это кнопка с изображением решётки

Да и потом для чего вы поменяли KeyPress на KeyDown? Какой смысл?
Вадим Мошев вне форума Ответить с цитированием
Старый 28.06.2011, 19:18   #23
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Да и потом для чего вы поменяли KeyPress на KeyDown? Какой смысл?
Просто так код Key = VK_RETURN вместо у меня не работающего Key = #13 поставил.
Key = #13 в процедуре KeyPress использовать не получилось. См. начало темы.
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 28.06.2011, 19:19   #24
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию Посмотрите так:

Код:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_RETURN then
    begin
      if (Label37.Caption = 'Введите новое значение (диаметр):') and (Edit1.Text <> '') then
      begin
        if (StrToFloat(Edit1.Text) <= 99) and (StrToFloat(Edit1.Text) >= 1) then
          begin
            if Length(Edit1.Text) <= 4 then
            begin
              if Edit1.Text[Length(Edit1.Text)] <> '.' then
                Label24.Caption:= 'Диаметр: ' + Edit1.Text + ' мм'
              else
                Label24.Caption:= 'Диаметр: ' + Edit1.Text + '0' + ' мм'
            end;
          end
        else
          Label24.Caption:= 'Диаметр: н/а';
      end
      else
        Label24.Caption:= 'Диаметр: н/а';
    end;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  #8,'0'..'9': ; // цифры и <Backspace>
  #13: ;// клавиша <Enter>
  '.': // разделитель целой и дробной частей числа
  begin
    DecimalSeparator:= '.';
    if Pos(DecimalSeparator, Edit1.Text) <> 0 then Key:= Chr(0); // запрет ввода второго разделителя
  end;
  else // остальные символы запрещены
    Key := Chr(0);
end;
end;
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 28.06.2011, 19:23   #25
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ни чего вы не поняли, я в 19-том посте красным выделил почему #13 не обрабатывалась
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.06.2011, 19:46   #26
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию посмотрите:

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ни чего вы не поняли, я в 19-том посте красным выделил почему #13 не обрабатывалась
признаю, на заметил. Вот, все исправил, код полностью:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  ddm: double;
begin
  case Key of
  #8, #13, '0'..'9', '.':  // цифры, <Backspace>, <Enter>, разделитель целой и дробной частей числа
  begin
    DecimalSeparator:= '.';
    if Pos(DecimalSeparator, Edit1.Text) <> 0 then Key:= Chr(0); // запрет ввода второго разделителя
    if Key = #13 then
    begin
      if Label37.Caption = 'Введите новое значение (диаметр):' then
      begin
        if Edit1.Text <> '' then
        begin
        ddm:= StrToFloat(Edit1.Text);
        if (ddm <= 99) and (ddm >= 1) then
          begin
            if Length(Edit1.Text) <= 4 then
            begin
              if Edit1.Text[Length(Edit1.Text)] <> '.' then
                Label24.Caption:= 'Диаметр: ' + FloatToStr(ddm) + ' мм'
              else
                Label24.Caption:= 'Диаметр: ' + FloatToStr(ddm) + '.0' + ' мм'
            end;
          end
        else
          Label24.Caption:= 'Диаметр: н/а';
        end
        else
          Label24.Caption:= 'Диаметр: н/а';
      end;

      if Label37.Caption = 'Введите новое значение (длина):' then
      begin
        if Edit1.Text <> '' then
        begin
        ddm:= StrToFloat(Edit1.Text);
        if (ddm <= 99) and (ddm >= 1) then
          begin
            if Length(Edit1.Text) <= 4 then
            begin
              if Edit1.Text[Length(Edit1.Text)] <> '.' then
                Label25.Caption:= 'Длина: ' + FloatToStr(ddm) + ' мм'
              else
                Label25.Caption:= 'Длина: ' + FloatToStr(ddm) + '.0' + ' мм'
            end;
          end
        else
          Label25.Caption:= 'Длина: н/а';
        end
        else
          Label25.Caption:= 'Длина: н/а';
      end;

      if Label37.Caption = 'Введите новое значение (ширина):' then
      begin
        if Edit1.Text <> '' then
        begin
        ddm:= StrToFloat(Edit1.Text);
        if (ddm <= 99) and (ddm >= 1) then
          begin
            if Length(Edit1.Text) <= 4 then
            begin
              if Edit1.Text[Length(Edit1.Text)] <> '.' then
                Label26.Caption:= 'Ширина: ' + FloatToStr(ddm) + ' мм'
              else
                Label26.Caption:= 'Ширина: ' + FloatToStr(ddm) + '.0' + ' мм'
            end;
          end
        else
          Label26.Caption:= 'Ширина: н/а';
        end
        else
          Label26.Caption:= 'Ширина: н/а';
      end;

      if Label37.Caption = 'Введите новое значение (радиус):' then
      begin
        if Edit1.Text <> '' then
        begin
        ddm:= StrToFloat(Edit1.Text);
        if (ddm <= 99) and (ddm >= 1) then
          begin
            if Length(Edit1.Text) <= 4 then
            begin
              if Edit1.Text[Length(Edit1.Text)] <> '.' then
                Label27.Caption:= 'Радиус: ' + FloatToStr(ddm) + ' мм'
              else
                Label27.Caption:= 'Радиус: ' + FloatToStr(ddm) + '.0' + ' мм'
            end;
          end
        else
          Label25.Caption:= 'Радиус: н/а';
        end
        else
          Label27.Caption:= 'Радиус: н/а';
      end;
    end;
  end;
  else // остальные символы запрещены
    Key := Chr(0);
end;
end;
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 29.06.2011, 15:00   #27
flexterful
Пользователь
 
Регистрация: 22.08.2008
Сообщений: 39
По умолчанию

Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 case Key of
  #8,'0'..'9': ; // цифры и <Backspace>
   #13: // клавиша <Enter> <<<<<<<<<<<< ВОТ ЖЕ ОНО

begin
  if (Label37.Caption = 'Введите новое значение (диаметр):') and ((Edit1.Text <> '') or (Edit1.Text <> '0'))
   then begin
     if Edit1.Text[1] <> '.'
      then Label24.Caption:= 'Диаметр: ' + Edit1.Text + ' мм'
      else Label24.Caption:= 'Диаметр: 0' + Edit1.Text + ' мм';
    end
    else Label24.Caption:= 'Диаметр: н/а';
  end;
   '.': // разделитель целой и дробной частей числа
    begin
      DecimalSeparator:= '.';
      if Pos(DecimalSeparator, Edit1.Text) <> 0 then Key:= Chr(0); // запрет ввода второго разделителя


end;
else // остальные символы запрещены
Key := Chr(0);
end;
end;

Коломбур, однако
Чего бы тут сделать, дабы ничего неделать?
flexterful вне форума Ответить с цитированием
Старый 29.06.2011, 15:05   #28
flexterful
Пользователь
 
Регистрация: 22.08.2008
Сообщений: 39
По умолчанию

опознднул....
Чего бы тут сделать, дабы ничего неделать?
flexterful вне форума Ответить с цитированием
Старый 29.06.2011, 15:10   #29
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от flexterful Посмотреть сообщение
опознднул....
пояснять надо, где каламбур
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 30.06.2011, 11:39   #30
flexterful
Пользователь
 
Регистрация: 22.08.2008
Сообщений: 39
По умолчанию

#13: ;// клавиша <Enter>

if Key = #13 then // и причём это - в обработке разделителя.
Чего бы тут сделать, дабы ничего неделать?
flexterful вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OnKeyPress VS Edit1 :) Federal Помощь студентам 6 29.07.2010 16:00
Не работатет onkeypress. vedro-compota Мультимедиа в Delphi 4 08.06.2010 20:58
OnKeyPress aurora_87 Общие вопросы C/C++ 3 15.01.2010 12:06
OnKeyPress из NumLock`а Alex Cones Общие вопросы Delphi 2 23.04.2009 20:08