Показать сообщение отдельно
  #7  
Старый 26.02.2009, 14:47
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
По умолчанию

Цитата:
Сообщение от Darken
Но, почему-то если ввести число 4, например - выдает ошибку, если 44 - тогда пишет, что целое...
В твоей процедуре сначала проверяется строка в Edit, а потом добавляется значение нажатой клавиши, т.е. если нажать 4 в пустом поле, то сначала провериться пустая строка (отсюда и "ошибка"), а потом добавиться "4". Чтобы этого избежать, необходимо "перенести" эту процедуру в события OnKeyUp, например так:
Код:
var
  s: string;
  i: Integer;
  f: Double;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    if Key = '.' then Key := ','      //замена точки запятой
    else
      if not ( Key in [ '0'..'9' , '.' , #8 , #46 ] ) then Key := #0;
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  s:= Edit1.Text;                //проверка ввода
  if TryStrToInt(s, i) then
  begin
    Label5.Caption:= s + ' Целое';
    exit;
  end;
  if TryStrToFloat(s, f) then
  begin
     Label5.Caption:= s + ' Дробное';
    exit;
  end;
   Label5.Caption:= s + ' Ошибка';
end;

Цитата:
Сообщение от Darken
И еще хотя это и не нужно в данном проекте, но если ввести число более 12 знаков - выдает, что оно дробное, почему?
превышен лимит Integer
Ответить с цитированием