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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2017, 17:26   #1
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 372
По умолчанию Ошибка в вызове процедур без параметров дельфи

Делаю программу для вычисления скорости роста гриба (гифов) в миллиметрах в день. Пользователь выбирает единицы измерения и само значение для расстояния и времени. математическая часть пока не интересует.отображение результатов тоже. делал с шаблона.
Сильно не бейте,пишу раз в полгода.

процедуры before_all_length и before_all_time - это конвертеры из размерностей пользователя в миллиметры и дни.Какие нужны им параметры на входе? фактические параметры берутся из самой программы: выбран важок chekbox (mm.Checked , sm.Checked, m.Cheked и так далее) или нет.
Формальные параметры,что процедура должна обращаться к этим чекбоксам, надо указывать? вроде бы нет.

как написать процедуры?

Ошибка такая вот:
[DCC Error] vrun1.pas(91): E2035 Not enough actual parameters

Вот код:



Код:
unit vrun1;

interface

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

type
  TForm1 = class(TForm)
    Ed_Length: TEdit;
    Ed_Time: TEdit;
    Lb_annotation: TLabel;
    Lb_Length: TLabel;
    Lb_time: TLabel;
    Label4: TLabel;
    Button1: TButton;
    Button2: TButton;
    mm: TCheckBox;
    m: TCheckBox;
    sm: TCheckBox;
    hours: TCheckBox;
    days: TCheckBox;
    minuts: TCheckBox;
    other: TCheckBox;
    coefficient: TEdit;
    coeff_time: TEdit;
    other_time: TCheckBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Ed_LengthKeyPress(Sender: TObject; var Key: Char);
    procedure Ed_TimeKeyPress(Sender: TObject; var Key: Char);
    procedure before_all_length(Sender: TObject);
    procedure before_all_time( Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// щелчок на кнопке Вычислить
procedure TForm1.before_all_length( Sender: TObject);
var
 koeff_length: integer;

begin
       if mm.Checked then koeff_length:=1;
       if sm.Checked then koeff_length:=10;
       if m.Checked then koeff_length:=1000;
       if other.Checked then koeff_length:=strToint(coefficient.Text);

end;

procedure TForm1.before_all_time(Sender: TObject);

var koeff_time: integer;
begin
       if days.Checked then koeff_time:=1;
       if hours.Checked then koeff_time:=24;
       if minuts.Checked then koeff_time:=24*60;
       if other.Checked then koeff_time:=strToint(coefficient.Text);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
    dist : integer; // дистанция, миллиметров
    t:     integer;    // время, дни, дробное

    koeff_time: integer;

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

    v: real;        // скорость
    //cheked:boolean;
begin
    // получить исходные данные из полей ввода
    dist := StrToInt(Ed_Length.Text);
    t := StrToInt(Ed_Time.Text);

    // предварительные преобразования
    before_all_time();
    before_all_length();





      {case  cheked      of
      mm.Checked     : koeff:=1;
      sm.Checked     : koeff:=10;
      m.Checked      : koeff:=1000;
      other.Checked  : koeff:=strToint(coefficient.Text);

      end;}
    dist_true := dist*koeff_length;  //
    t_true := t*koeff_time ;

    // вычисление
    v := dist_true/t_true  ;

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

end;

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

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

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



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

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

      #8      :                  ; // <Backspace>

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

end.
Вложения
Тип файла: rar Скорость бега.rar (327.3 Кб, 4 просмотров)
Занимаюсь:1.зверьком- покемончиком для компьютерного затончика. 2 IT-грибами,что бы скушать потом их с вами.3. цифровым обезьянками, как куны ударяют за тянками

Последний раз редактировалось anaschu; 24.05.2017 в 12:10. Причина: нашел как код вставять и переделал файл
anaschu вне форума Ответить с цитированием
Старый 23.05.2017, 17:30   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы при описании этих процедур указали, что им передаётся параметр (Sender)

Цитата:
Сообщение от anaschu Посмотреть сообщение
Код:
procedure before_all_length(Sender: TObject);
procedure before_all_time( Sender: TObject);
Так что Вы хотите? Компилятор выполняет ваш код, он ничего сам за Вас не решает.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.05.2017, 12:08   #3
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 372
По умолчанию ошибка сендер

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы при описании этих процедур указали, что им передаётся параметр (Sender)



Так что Вы хотите? Компилятор выполняет ваш код, он ничего сам за Вас не решает.
Что мне будет правиьнее там указать? вместо сендер.
Туда входят данные с четырех чекбоксов и одного эдита

Я не знаю. как кроме указания, что данные придут со всей программы-вроде как с обьекта класса "форм1" - то есть просто обьекта...указать программе,что ей нужно обращаться как бы ко всему коду.

Короче,не знаю,что в скобках ставить. В случае описания и декларации и в случае вызова (когда формальные параметры надо ставить)
Занимаюсь:1.зверьком- покемончиком для компьютерного затончика. 2 IT-грибами,что бы скушать потом их с вами.3. цифровым обезьянками, как куны ударяют за тянками

Последний раз редактировалось anaschu; 24.05.2017 в 12:20. Причина: ошибка
anaschu вне форума Ответить с цитированием
Старый 24.05.2017, 12:18   #4
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 372
По умолчанию

и из за неправильной декларации у меня ошибка вот такая вот:



Хотя у меня две одинаковые процедуры, для пересчета времени и пересчета длинны (расстояния). процедуры before_all_length и before_all_time - это конвертеры из размерностей пользователя в миллиметры и дни.
Но почему то одну из них программа принимает,а другую нет. Почему,не понятно
Занимаюсь:1.зверьком- покемончиком для компьютерного затончика. 2 IT-грибами,что бы скушать потом их с вами.3. цифровым обезьянками, как куны ударяют за тянками
anaschu вне форума Ответить с цитированием
Старый 24.05.2017, 12:42   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
    // предварительные преобразования
    before_all_time(nil);
    before_all_length(nil);
Либо в объявлении и описании выбросите нафиг Sender'а, он в этих процедурах не нужен
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 24.05.2017, 12:45   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от anaschu Посмотреть сообщение
и из за неправильной декларации у меня ошибка вот такая вот:
Найдите переменную koeff_length в списке локальных переменных процедуры

Код:
var
    dist : integer; // дистанция, миллиметров
    t:     integer;    // время, дни, дробное

    koeff_time: integer;

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

    v: real;        // скорость
Я вот не нашёл. Компилятор, видимо, тоже.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 24.05.2017 в 13:02.
Sciv вне форума Ответить с цитированием
Старый 24.05.2017, 12:48   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Далее: даже после исправления этих ошибок у Вас ничего не заработает, потому что before_all_time и before_all_length устанавливают значения локальных переменных koeff_time и koeff_length, которые в них же самих объявлены.

Из основного кода программы эти переменные будут не видны и их значения "потеряются" после выхода из процедур
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 24.05.2017, 12:51   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Предложу исправление на одной функции:

В объявлении:
Код:
function before_all_length: integer;
В описании:
Код:
function TForm1.before_all_length: integer;
begin
       if mm.Checked then Result:=1;
       if sm.Checked then Result:=10;
       if m.Checked then Result:=1000;
       if other.Checked then Result:=strToint(coefficient.Text);
end;
Вызов в коде:
Код:
  koeff_length := before_all_length();
Вторую - по аналогии
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 06.06.2017, 15:53   #9
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 372
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Код:
function TForm1.before_all_length: integer;
begin
       if mm.Checked then Result:=1;
       if sm.Checked then Result:=10;
       if m.Checked then Result:=1000;
       if other.Checked then Result:=strToint(coefficient.Text);
end;
Я вспомнил, зачем я так писал. У меня делф на вшитую переменную Result ругается

Занимаюсь:1.зверьком- покемончиком для компьютерного затончика. 2 IT-грибами,что бы скушать потом их с вами.3. цифровым обезьянками, как куны ударяют за тянками
anaschu вне форума Ответить с цитированием
Старый 06.06.2017, 15:55   #10
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 372
По умолчанию

да, я не указал переменную koeff_length,а потом приказываю ее найти))) ищи то, не знаю что)
Занимаюсь:1.зверьком- покемончиком для компьютерного затончика. 2 IT-грибами,что бы скушать потом их с вами.3. цифровым обезьянками, как куны ударяют за тянками
anaschu вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача параметров множеству процедур и запросов Bizunov SQL, базы данных 8 07.06.2013 13:22
одномерный массив с использованием процедур и функций без параметров и с параметрами Ekaterinasoroka Паскаль, Turbo Pascal, PascalABC.NET 2 14.04.2013 08:35
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 0 02.11.2012 21:58
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 6 02.11.2012 21:46
потеря параметров при вызове формы из dll... Roof Общие вопросы Delphi 4 22.08.2008 22:08