Форум по программированию Delphi Sources

 


   Сайт  
   Исходники  
   Компоненты  
   Статьи  
   FAQ  
   Поиск по исходникам  
   Футболки  

Вернуться   Форум по программированию Delphi Sources > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.07.2017, 23:59
Shaitanking163Rus Shaitanking163Rus вне форума
Прохожий
 
Регистрация: 24.03.2017
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию ввод в edit десятичные числа через точку

Пишу для себя прогу на завод для генерации G-кодов, если ввожу данные целые, то всё работает как нужно, но если ввожу десятичное число, то всё ошибка и не важно через точку или запятую, мне нужно то бы я мог вводить дробные числа через точку что нужно поправить в коде?
Код:
memo1.Text:='';
x1:= strtoint(edit1.text)-strtoint(edit7.text);
x2:= strtoint(edit1.text)+strtoint(edit7.text);

y1:=strtoint(edit2.Text);

z:=strtoint(edit3.Text);
snat:=strtoint(edit8.Text);
byf:=z-snat;
s:='G01'+' X'+inttostr(x2)+'. Y'+inttostr(y1)+'. Z'+inttostr(byf)+'. F'+edit4.Text+'.';


 memo1.Lines.Add(s);
z:=byf;
 byf:=z-snat;
If (RadioGroup1.ItemIndex=0) or (RadioGroup1.ItemIndex=2) then s2:='G02';
If (RadioGroup1.ItemIndex=1) or (RadioGroup1.ItemIndex=3) then s2:='G03';
s:=s2+' X'+inttostr(x1)+' Z'+inttostr(byf)+'. R'+edit7.Text+'. F'+edit4.Text+'.';

memo1.Lines.Add(s);
              z:=byf;
           byf:=z-snat;


while z*(-1)<strtoint(edit6.Text) do

           begin
            z:=byf;
           byf:=z-snat;

               if (RadioGroup3.ItemIndex=0) then Begin
              memo1.Lines.Add('X'+inttostr(x1)+'. Z'+inttostr(z)+'.');
                 z:=byf;
                 byf:=z-snat;
              memo1.Lines.Add('X'+inttostr(x2)+'. Z'+inttostr(z)+'.');
                 end
                 else
                      begin
                                       memo1.Lines.Add('X'+inttostr(x1)+'.');
                                       memo1.Lines.Add('X'+inttostr(x2)+'.');
                                       memo1.Lines.Add('G80');
                                       memo1.Lines.Add('G01 Z'+inttostr(z)+'.');
                                       memo1.Lines.Add(s2+' X'+inttostr(x1)+'. R'+edit7.Text+'. F'+edit4.Text+'.')
                      end;
           end;
 memo1.Lines.Add('G80');
 memo1.Lines.Add('G00 X'+edit1.text+'. Y'+edit2.text+' .');
 memo1.Lines.Add('Z'+edit3.text+'.');
end;
Ответить с цитированием
  #2  
Старый 09.07.2017, 00:41
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Адрес: Город на Бире
Сообщения: 260
Версия Delphi: XE7
Репутация: 429
Сообщение

Цитата:
Сообщение от Shaitanking163Rus
...но если ввожу десятичное число, то всё ошибка и не важно через точку или запятую...
Конечно будет ошибка, StrToInt переводит строку в целочисленное значение. Для получения вещественного значения нужно использовать StrToFloat. Также нужно все твои переменные x1, x2, y1 и прочие сделать вещественным типом.
Цитата:
Сообщение от Shaitanking163Rus
...мне нужно то бы я мог вводить дробные числа через точку...
Вообще-то StrToFloat работает через запятую. Для этого нужно:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
    '0'..'9', #8: ;
    ',':
      begin
        if Pos(',', (Sender as TEdit).Text) > 0 then
          Key := #0;
      end;
    else
      Key:= #0;
  end;
end;
Но если уж очень нужно через точку, тогда при создании форму нужно поменять разделитель:
Код:
FormatSettings.DecimalSeparator := '.';
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #3  
Старый 09.07.2017, 07:28
Shaitanking163Rus Shaitanking163Rus вне форума
Прохожий
 
Регистрация: 24.03.2017
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Но если уж очень нужно через точку, тогда при создании форму нужно поменять разделитель:
Код:
1
FormatSettings.DecimalSeparator := '.';
что-то не пойму куда это вставить, или в каком свойстве прописать, можно подробней?
Ответить с цитированием
  #4  
Старый 10.07.2017, 00:19
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Адрес: Город на Бире
Сообщения: 260
Версия Delphi: XE7
Репутация: 429
Сообщение

Ну куда-то сюда
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  FormatSettings.DecimalSeparator := '.';
end;
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
Ответ



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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:09.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2017

ВКонтакте   Facebook   Twitter