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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2011, 21:33   #1
pimple2006
Пользователь
 
Регистрация: 29.11.2011
Сообщений: 26
По умолчанию не работает написанная функция через Tbutton

здравствуйте,собственно вопрос:при нажатии кнопки Button1 не идет выполнение функции ReturnTrueFloat,не могу понять почему,если создать отдельный компонент Tedit,не участвующий в формуле в процедуре Main_conside,то функция выполняется,а так нет,вылетает ошибка о том,что '' не является Float значением,это понятно,не понятно почему не выполняется функция? Form1.Edit4 содержится в groupbox.

функция
Код:
function ReturnTrueFloat(var Edit:Tedit):string;
  begin
    if (Edit.Text = '') or (edit.Text = ' ') then
      begin
        Result:='0,01';
      end;
   { else if StrToFloat(Edit.Text) = 0 then
      begin
        Edit.Text:='0,01';
      end; }
  end;
кнопка Выполнить:
Код:
procedure TForm1.Button1Click(Sender: TObject);
  begin
    Form1.Edit4.Text:=ReturnTrueFloat(Form1.Edit4);
    Main_conside();
    Form1.Edit3.Text:=FloatToStrF(resistance,ffGeneral,5,7);
    if English1.Checked=true then
      begin
        Form1.Edit6.Text:=FloatToStrF(Presistance,ffGeneral,3,2)+W;
        Form1.Edit8.Text:=Power+W;
      end
    else
      begin
        Form1.Edit6.Text:=FloatToStrF(Presistance,ffGeneral,3,2)+Wt;
        Form1.Edit8.Text:=Power+Wt;
      end;

  end;
Поясняю. Edit4.text содержит Ампераж для расчета в процедуре
Код:
Procedure Main_conside();
  begin

    volume:=StrToInt(Form1.Edit7.Text);
    voltage:=StrToFloat(Form1.Edit1.Text);
    voltage_diod:=StrToFloat(Form1.Edit2.Text);
    amperage:=StrToFloat(Form1.Edit4.Text);
    k:=StrToFloat(Form1.Edit5.Text);
    resistance:=(voltage-volume*voltage_diod)/(amperage*k);
    Presistance:=amperage*(voltage-volume*voltage_diod);
    g2(Presistance);
  end;

Последний раз редактировалось Stilet; 10.12.2011 в 22:06.
pimple2006 вне форума Ответить с цитированием
Старый 10.12.2011, 21:36   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

потому что у вас вылетает ошибка и соответственно код выходит из процедуры.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.12.2011, 21:38   #3
pimple2006
Пользователь
 
Регистрация: 29.11.2011
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
потому что у вас вылетает ошибка и соответственно код выходит из процедуры.
вот эту ошибку я хочу исключить "на лету"
для этого и была написана функция,которая подменяет значение '' пока что только на 0,01
я уже 2 недели сижу,не могу сделать ,перепробывал все,писать условия в кнопке выполнить,процедуру создавал,в процедуре мэйн консид делать ...ничего

Последний раз редактировалось pimple2006; 10.12.2011 в 21:45.
pimple2006 вне форума Ответить с цитированием
Старый 10.12.2011, 22:20   #4
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Если обработать исключение, то выполнение кода будет продолжаться.
Или так:
Код:
  if not TryStrToFloat(Edit1.Text, Result) then
    Result := 0.01;
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 10.12.2011, 22:56   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Ошибка в том, что Вы указываете строку '0,01' в то время как правильная float-запись значения будет '0.01' , поэтому и есть ошибка перевода, лучше сделайте как предложил Chertovich или же везде поменяйте запятые на точки в подобных строках. Также гляньте в справке DecimalSeparator - тогда сможете сделать универсальное решение.
phomm вне форума Ответить с цитированием
Старый 10.12.2011, 23:40   #6
pimple2006
Пользователь
 
Регистрация: 29.11.2011
Сообщений: 26
По умолчанию

Код:
Procedure ReturnTrueFloat(var Edit:Tedit);
  begin
    {while Result <> '0,01' do
      begin
        Edit.Text:='0,01'
        {(Edit.Text = '') or (edit.Text = ' ') or (StrToFloat(Edit.Text)=0) }
      {end; }
    if (Edit.Text = '') or (edit.Text = ' ') or (StrToFloat(Edit.Text)=0) then
      begin
        Edit.Text:='0,01';
      end;

  end;
работает!!!! :-) осталось проверочку на правильность введеных данных,кстати,Phom,почему-то в Tedit правильно вводить 0,01 это если через делфи то через точку.

ошибку нашел прочитав на другом сайте про function

Цитата:
Определяет функцию, которой передаётся один или более параметров, и возвращает определённный тип данных. Из функции может быть возвращено только одно значение.
извините,мб это флудом будет,но я могу задать вопрос по своей программе, только по другому аспекту?

Последний раз редактировалось pimple2006; 10.12.2011 в 23:51.
pimple2006 вне форума Ответить с цитированием
Старый 11.12.2011, 00:04   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

одна тема - один вопрос.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает функция max400 PHP 13 29.07.2011 10:28
Не работает написанная мною процедура градиент. ВНИМАНИЕ: МОЙ ПРЕКТ НАПИСАН С ИСПОЛЬЗОВАНИЕМ ALPHACONTROLS hjkdhgu Помощь студентам 0 09.06.2011 14:38
Не работает функция artem611 Паскаль, Turbo Pascal, PascalABC.NET 3 11.04.2011 10:10
Вручную написанная функция не работает Ananasinka SQL, базы данных 2 16.05.2010 21:26
Не работает функция gets()!!! Ilya'91 Общие вопросы C/C++ 1 28.07.2008 23:16