Тема: Delphi подскажите...

Ответить в теме
Показано с 1 по 12 из 12
  1. Вверх #1
    Постоялец форума Аватар для r-tem
    Пол
    Мужской
    Сообщений
    1,426
    Репутация
    212

    По умолчанию Delphi подскажите...

    ребят помогите, суть в том, что нужно для Edit'ов сделать проверку, не ввели ли случайно символы вместо цифр, причем только с помощью Val(таково требование препода). Как ни пробовал не получается.
    procedure TForm1.N8Click(Sender: TObject);
    const a=0.44;
    b=2.28;
    var x,l,x1,x2,d:real;
    y:real;
    f:textfile;
    s1,:string;

    begin

    If Edit1.Text <> '' then x1:=strtofloat(Edit1.Text);
    if Edit2.Text <> '' then x2:=strtofloat(Edit2.Text);
    if Edit3.Text <> '' then d:=strtofloat(Edit3.Text)
    else
    l:=messagedlg('ошибка',mterror,[mbOk],0);

    x:=x1;

    while x<=x2 do
    if checkbox2.Checked then begin assignfile(f,'text.txt');
    rewrite(f);end;
    s1:=' x'+' '+'f(x)';
    memo1.Lines.Add(' x'+' '+'f(x)');

    begin

    begin

    y:=a*sqr(sin(x/2)/cos(x/2))/(b+0.7*x);
    s1:=floattostr(x)+' '+floattostrf(y,fffixed,10,5);
    if CheckBox1.checked then
    memo1.LineS.add(s1);
    if checkbox2.checked then
    writeln(f,s1);
    if checkbox3.checked then
    series1.addxy(x,y,'',clred);
    end;

    x:=x+d;


    end;
    end;


  2. Вверх #2
    Постоялец форума Аватар для r-tem
    Пол
    Мужской
    Сообщений
    1,426
    Репутация
    212
    неужели никто не знает?

  3. Вверх #3
    Постоялец форума Аватар для SamKV
    Пол
    Мужской
    Сообщений
    2,005
    Репутация
    459
    Ну так в чем проблема?
    пишем что-то типа
    procedure checkfortext(inv:string);
    var
    retcod, retval: integer
    begin
    val(inv,retval, retcod);
    if retcod<>0 then
    messagedlg('ошибка',mterror,[mbOk],0);
    end;

  4. Вверх #4
    Постоялец форума Аватар для r-tem
    Пол
    Мужской
    Сообщений
    1,426
    Репутация
    212
    маленькая поправка, проверку нужно сделать через цикл repeat until.

  5. Вверх #5
    Постоялец форума Аватар для r-tem
    Пол
    Мужской
    Сообщений
    1,426
    Репутация
    212
    сделал так,проверку выполняет, делает проверку, если некорректный ввод, выводит сообщение о ошибке, и на этом и останавливается, как сделать чтоб после этого прога возвращалась к началу?

    procedure TForm1.N8Click(Sender: TObject);
    const a=0.44;
    b=2.28;
    var x,x1,x2,d:real;
    y:real;
    c1,c2,c3:integer;
    f:textfile;
    s1:string;
    begin
    repeat
    val(edit1.Text,x1,c1);
    val(edit2.Text,x2,c2);
    val(edit3.Text,d,c3);
    if c1<>0 then
    if c2<>0 then
    if c3<>0 then
    messagedlg('ошибка',mterror,[mbOk],0);

    until (c1=0) and (c2=0) and (c3=0);

    x:=x1;


    if checkbox2.Checked then
    begin assignfile(f,'text.txt');
    rewrite(f);
    end;
    s1:=' x'+' '+'f(x)';
    memo1.Lines.Add(' x'+' '+'f(x)');

    while x<=x2 do
    begin
    if (x>0) and (x<>1) then
    begin
    y:=a*sqr(sin(x/2)/cos(x/2))/(b+0.7*x);
    s1:=floattostr(x)+' '+floattostrf(y,fffixed,10,5);
    if CheckBox1.checked then
    memo1.LineS.add(s1);
    if checkbox2.checked then
    writeln(f,s1);


    if checkbox3.checked then
    series1.addxy(x,y,'',clred);
    end;
    x:=x+d;

    end;
    end;

  6. Вверх #6
    Постоялец форума Аватар для cTcangel
    Пол
    Мужской
    Адрес
    Одесса
    Сообщений
    1,276
    Репутация
    75
    для того чтобы выходило из процедуры, используй оператор exit или break.
    а чтоб куда то перейти, можно использовать goto, только не помню синтаксис.

  7. Вверх #7
    Бывалый
    Аватар для fatman
    Пол
    Мужской
    Возраст
    46
    Сообщений
    9,111
    Репутация
    1666
    exit, break, а тем более goto - это дурной тон в программировании, если вы не на бейсике пишете.
    если честно, требования препода мягко говоря - умиляет. Странные они. Вообще проверка ввода в TEdit пишется в событии OnKeyPress этого контрола. и выглядит она так
    Код:
    procedure TForm.EditKeyPress(Sender: TObject; var Key: Char);
    begin
     Case Key of
       '0'..'9':begin end; // разрешенные символы, ничего не делаем
       #8:begin end; //код кнопки ТАВ
       'A'..'F':Begin end; // это ввод шестнадцатиричных чисел
       'a'..'f':begin Key:=chr(ord(Key)-32); end; // перевод маленьких HEX в большие
       #13:
       begin
        (FindNextControl(Sender as TEdit,True,True,False)).SetFocus; // завершение ввода по нажатию Enter --> переход на следующий по порядку TabOrder контрол
        Key:=#0; // и глушим отображение Enter в TEdit
       end;
       else
       Key:=#0; //иначе глушим любой неправильный символ
     end;
    
    end;
    вот так вот.. просто и достаточно изящно.

  8. Вверх #8
    Постоялец форума Аватар для SamKV
    Пол
    Мужской
    Сообщений
    2,005
    Репутация
    459
    Цитата Сообщение от fatman Посмотреть сообщение
    exit, break, а тем более goto - это дурной тон в программировании, если вы не на бейсике пишете.
    Позволю себе не согласится. Если goto, без крайней необходимости (и такое бывает, хоть и не приходилось) лучше не использовать, но вот break continue и еxit, вполне себе нормальные конструкции и зачастую улучшают читаемость.
    А по поводу приведенного кода, помоему там не хватает backspace, и delete...

  9. Вверх #9
    Бывалый
    Аватар для fatman
    Пол
    Мужской
    Возраст
    46
    Сообщений
    9,111
    Репутация
    1666
    backspace и delete - не являются символьными клавишами. Они обрабатыватся хуком по двусимвольным скан-кодам и не дают отображаемых символов в TEdit. А значит - не требуют обработки.
    Еще раз по поводу безусловных прерываний кода - это "индийский код"
    если вы не можете сделать рефакторинг кода так, чтобы обойтись без них - значит изначально неверно были построены условия.
    ИМХО

  10. Вверх #10
    Постоялец форума Аватар для SamKV
    Пол
    Мужской
    Сообщений
    2,005
    Репутация
    459
    Если имеешь ввиду goto то согласен, однако не всегда есть возможность этого рефакторинга и тогда бывает что с goto код более акуратен чем без.
    А по поводу того что
    backspace и delete - не являются символьными клавишами. Они обрабатыватся хуком по двусимвольным скан-кодам и не дают отображаемых символов в TEdit. А значит - не требуют обработки.
    Ты не прав, и очень даже обробатывается и вслучае замены кода нифига не работают, я только что специально проверил.
    P.S. вернее бэкспэйс обробатывается а delete нет.

  11. Вверх #11
    Посетитель Аватар для Phoenixxe
    Пол
    Мужской
    Адрес
    Одесса
    Возраст
    42
    Сообщений
    355
    Репутация
    73

    Post onChange

    может onChange сработает лучше?
    если новое значение ок, созраняем в глоб. переменную
    иначе восстанавливаем значение Edit'а из глобальной переменной
    <ctrl>+<C> && <ctrl>+<V> к тому же никто не отменял

  12. Вверх #12
    Посетитель Аватар для grinch
    Пол
    Мужской
    Сообщений
    190
    Репутация
    22
    '0'..'9':begin end;
    Можно просто
    '0'..'9':;
    Последний раз редактировалось grinch; 19.12.2007 в 19:15.


Ответить в теме

Похожие темы

  1. Изоброжения и Delphi
    от Shadow_exe в разделе Программирование
    Ответов: 9
    Последнее сообщение: 20.10.2006, 21:47
  2. компилятор для Delphi
    от oz(skyline) в разделе Программирование
    Ответов: 3
    Последнее сообщение: 25.06.2006, 21:36
  3. Подскажите Delphi 6
    от U391 в разделе Программирование
    Ответов: 11
    Последнее сообщение: 22.05.2006, 10:05
  4. помогите в Delphi 7
    от U391 в разделе Программирование
    Ответов: 6
    Последнее сообщение: 22.05.2006, 09:57
  5. Delphi 7
    от Shadow_exe в разделе Программирование
    Ответов: 29
    Последнее сообщение: 26.03.2006, 14:54

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения