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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2008, 15:22   #11
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Цитата:
может лучше StrToFloat ?
Конечно лучше =)

Код:
unit vrun1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
  
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// щелчок на кнопке Вычислить
procedure TForm1.Button1Click(Sender: TObject);
var
    dist : integer; // дистанция, метров
    t:     real;    // время, как дробное число

    min : integer;  // время, минуты
    sek : integer;   // время, секунды

    v: real;        // скорость
begin
    //если пользователь не ввел данные
    if (Edit1.Text = '') or
      (Edit2.Text = '') or
      (StrToInt(Edit1.Text) <= 0) or
      (StrToFloat(Edit2.Text) <= 0) then
    begin
      ShowMessage('Некорректные данные!');
      exit;
    end;
    // получить исходные данные из полей ввода
    dist := StrToInt(Edit1.Text);
    t := StrToFloat(Edit2.Text);

    // предварительные преобразования
    min := Trunc(t);  // кол-во минут - это целая часть числа t
    sek := Trunc(t*100) mod 100; // кол-во секунд - это дробная часть числа t

    // вычисление
    v := (dist/1000) / ((min*60 + sek)/3600);

    // вывод результата
    label4.Caption := 'Дистанция: '+ Edit1.Text + ' м' + #13 +
                      'Время: ' + IntToStr(min) + ' мин ' +
                                 IntToStr(sek) + ' сек ' + #13 +
                      'Скорость: ' + FloatToStrF(v,ffFixed,4,2) + ' км/час';

end;

// щелчок на кнопке Завершить
procedure TForm1.Button2Click(Sender: TObject);
begin
        Form1.Close;
end;

// нажатие клавиши в поле Дистанция
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    // Key - символ, соответствующий нажатой клавише.
    // Если символ недопустимый, то процедура заменяет его
    // на символ с кодом 0. В результате этого символ в поле
    // редактирования не появляется и у пользователя создается
    // впечатление, что программа не реагирует на нажатие некоторых
    // клавиш.
    case Key of
      '0'..'9':                  ; // цифра
      #8      :                  ; // <Backspace>
      #13     : Edit2.SetFocus   ; // <Enter>

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



procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
    case Key of
      '0'..'9':   ; // цифра

      ',','.' :
          // точка или запятая
          begin
             if Key = '.' then Key := ','; // подменим точку запятой
             // проверим, есть ли в поле Edit2 запятая
             if Pos(',',Edit2.Text) <> 0 // запятая уже есть
                 then Key:=Char(0);      // вторую запятую не отображать
          end;

      #8      :                  ; // <Backspace>

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

end.
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Старый 24.12.2008, 16:33   #12
Наталья111
Пользователь
 
Регистрация: 22.12.2008
Сообщений: 59
По умолчанию

почему когда я вожу в поле время мин.сек (мин,сек) он выдает ошибку?
например: 5.6 (5,6).
Наталья111 вне форума Ответить с цитированием
Старый 24.12.2008, 16:52   #13
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Цитата:
почему когда я вожу в поле время мин.сек (мин,сек) он выдает ошибку?
Используйте последний код, двумя сообщениями выше, чем это.
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Старый 24.12.2008, 17:19   #14
Наталья111
Пользователь
 
Регистрация: 22.12.2008
Сообщений: 59
По умолчанию

вот еще один вопрос возник. почему когда я ввожу время, например 3,03
он выводит как 3 мин 2 сек?
он же должен выводить как 3 мин 3 сек.
Наталья111 вне форума Ответить с цитированием
Старый 24.12.2008, 18:31   #15
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Цитата:
Сообщение от Наталья111 Посмотреть сообщение
вот еще один вопрос возник. почему когда я ввожу время, например 3,03
он выводит как 3 мин 2 сек?
он же должен выводить как 3 мин 3 сек.
Думаю ошибка округления чисел типа Real
s.Creator вне форума Ответить с цитированием
Старый 24.12.2008, 18:32   #16
Наталья111
Пользователь
 
Регистрация: 22.12.2008
Сообщений: 59
По умолчанию

можно пару строк, а эконку создавали через код. или свойства? :-()
Наталья111 вне форума Ответить с цитированием
Старый 24.12.2008, 18:37   #17
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

В Delphi 7
в меню "Project->Options...->(вкладка Application)"
s.Creator вне форума Ответить с цитированием
Старый 28.10.2020, 17:41   #18
R_uslan
 
Регистрация: 28.10.2020
Сообщений: 8
По умолчанию

Здравстуйте, калькулятор от VVM идеально подходит для моего Д/З.
Но мне нужно другое название, убрать значек и возможно передвинуть "плитки" в приложении.
Можете подсказать как я могу это сделать, все перетыкал но найти не смог...

Последний раз редактировалось R_uslan; 28.10.2020 в 18:40.
R_uslan вне форума Ответить с цитированием
Старый 29.10.2020, 21:57   #19
R_uslan
 
Регистрация: 28.10.2020
Сообщений: 8
По умолчанию

R_uslan, Все спасибо сам сделал.)
R_uslan вне форума Ответить с цитированием
Старый 07.11.2020, 16:06   #20
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Я не понял, это что, групповое допиливание чужого проекта бесплатно и без СМС?
BLACK_RAIN вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
Проблемма: Программное отключение "защиты формы" влияет на скорость выполнения программного кода... StrikeR33 Microsoft Office Word 0 28.05.2008 20:11
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49