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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.08.2012, 16:35
Аватар для UnrealFire
UnrealFire UnrealFire вне форума
Новичок
 
Регистрация: 28.08.2012
Сообщения: 66
Версия Delphi: Delphi 7
Репутация: 10
Злость Калькулятор

Всем привет. Вот хотел присвоить переменной реал типа через strtofloat введённое выражение типа 2*3-5 и т.п. Но пишет ошибку выражения не конвертирует. Помогите пожалуйста.

Delphi 7.
Ответить с цитированием
  #2  
Старый 28.08.2012, 16:38
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

можно посчитать значение выражения через IScriptControl. метод Eval. подробнее уже есть на форуме.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 28.08.2012, 16:54
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от NumLock
IScriptControl
LOL , крутое программирование получается
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 28.08.2012, 17:05
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 298
Репутация: -1806
По умолчанию

Цитата:
Сообщение от UnrealFire
Всем привет. Вот хотел присвоить переменной реал типа через strtofloat введённое выражение типа 2*3-5 и т.п. Но пишет ошибку выражения не конвертирует. Помогите пожалуйста.

Delphi 7.
LOL эта функция конвертит строку в число, она не решает выражения
Ответить с цитированием
  #5  
Старый 28.08.2012, 17:06
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
LOL , крутое программирование получается
да, две строчки кода всего
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 03.09.2012, 10:46
Аватар для UnrealFire
UnrealFire UnrealFire вне форума
Новичок
 
Регистрация: 28.08.2012
Сообщения: 66
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
можно посчитать значение выражения через IScriptControl. метод Eval. подробнее уже есть на форуме.
спасибо но сделал по другому. тема закрыта.
Ответить с цитированием
  #7  
Старый 03.09.2012, 11:28
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от UnrealFire
спасибо но сделал по другому. тема закрыта.
Так напиши здесь как сделал - может кому-то ещё пригодится.
Ответить с цитированием
  #8  
Старый 03.09.2012, 11:33
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

Код:
  with CreateComObject(CLASS_ScriptControl) as IScriptControl do
  begin
    Language:='JScript';
    ShowMessage(Eval('2*3-5'));
  end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #9  
Старый 03.09.2012, 11:35
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от NumLock
Код:
  with CreateComObject(CLASS_ScriptControl) as IScriptControl do
  begin
    Language:='JScript';
    ShowMessage(Eval('2*3-5'));
  end;
Это я знаю
Я спрашивал у UnrealFire как он "сделал по другому"
Ответить с цитированием
  #10  
Старый 03.09.2012, 11:35
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

но можно и так:
Код:
.ExecuteStatement('Edit1.Tag=Edit1.Tag / 2');
Код:
.ExecuteStatement('Edit1.Text = "*" + Edit1.Text + "*"');
Код:
.ExecuteStatement('Memo1.Lines(1)="ok"');
Код:
.ExecuteStatement('Memo2.Align="alRight"');
Код:
.ExecuteStatement('Memo2.Visible=!Memo2.Visible');
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #11  
Старый 03.09.2012, 17:33
Аватар для UnrealFire
UnrealFire UnrealFire вне форума
Новичок
 
Регистрация: 28.08.2012
Сообщения: 66
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Logo: TImage;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    SpeedButton7: TSpeedButton;
    SpeedButton8: TSpeedButton;
    SpeedButton9: TSpeedButton;
    SpeedButton10: TSpeedButton;
    SpeedButton11: TSpeedButton;
    SpeedButton12: TSpeedButton;
    SpeedButton13: TSpeedButton;
    SpeedButton14: TSpeedButton;
    SpeedButton15: TSpeedButton;
    SpeedButton17: TSpeedButton;
    SpeedButton18: TSpeedButton;
    SpeedButton19: TSpeedButton;
    Edit1: TEdit;
    SpeedButton4: TSpeedButton;
    Edit2: TEdit;
    Edit3: TEdit;
    SpeedButton16: TSpeedButton;
    SpeedButton20: TSpeedButton;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    SpeedButton21: TSpeedButton;
    Label1: TLabel;
    Label2: TLabel;
    Edit9: TEdit;
    SpeedButton22: TSpeedButton;
    SpeedButton23: TSpeedButton;
    SpeedButton24: TSpeedButton;
    SpeedButton25: TSpeedButton;
    background: TImage;
    SpeedButton26: TSpeedButton;
    procedure SpeedButton9Click(Sender: TObject);
    procedure SpeedButton10Click(Sender: TObject);
    procedure SpeedButton11Click(Sender: TObject);
    procedure SpeedButton5Click(Sender: TObject);
    procedure SpeedButton6Click(Sender: TObject);
    procedure SpeedButton7Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure SpeedButton12Click(Sender: TObject);
    procedure SpeedButton8Click(Sender: TObject);
    procedure SpeedButton13Click(Sender: TObject);
    procedure SpeedButton14Click(Sender: TObject);
    procedure SpeedButton15Click(Sender: TObject);
    procedure SpeedButton19Click(Sender: TObject);
    procedure SpeedButton18Click(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure SpeedButton17Click(Sender: TObject);
    procedure SpeedButton16Click(Sender: TObject);
    procedure SpeedButton20Click(Sender: TObject);
    procedure SpeedButton21Click(Sender: TObject);
    procedure SpeedButton22Click(Sender: TObject);
    procedure SpeedButton23Click(Sender: TObject);
    procedure SpeedButton24Click(Sender: TObject);
    procedure SpeedButton25Click(Sender: TObject);
    procedure SpeedButton26Click(Sender: TObject);


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

var
  Form1: TForm1;
  input,input2,output,prozent:real;
  znachenie{1-+,2--,3-*,4-/},stepen:integer;
implementation

{$R *.dfm}

function ShellExecute (hWnd: HWND; Operation, FileName, Parameters, Directory: PAnsiChar; ShowCmd: Integer): LongWord; stdcall; external 'Shell32.dll' name 'ShellExecuteA';

procedure TForm1.SpeedButton9Click(Sender: TObject);
begin
 edit2.Text:=edit2.Text + '1';
end;

procedure TForm1.SpeedButton10Click(Sender: TObject);
begin
 edit2.Text:=edit2.Text + '2';
end;

procedure TForm1.SpeedButton11Click(Sender: TObject);
begin
 edit2.Text:=edit2.Text + '3';
end;

procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
 edit2.Text:=edit2.Text + '4';
end;

procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
 edit2.Text:=edit2.Text + '5';
end;

procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
 edit2.Text:=edit2.Text + '6';
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 edit2.Text:=edit2.Text + '7';
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
 edit2.Text:=edit2.Text + '8';
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
 edit2.Text:=edit2.Text + '9';
end;

procedure TForm1.SpeedButton12Click(Sender: TObject);
begin
 edit2.Text:=edit2.Text + '0';
end;

procedure TForm1.SpeedButton8Click(Sender: TObject);
begin
 edit2.Text:=edit2.Text + ',';
end;

procedure TForm1.SpeedButton13Click(Sender: TObject);

begin
  input:=strtofloat(edit2.Text);
  edit2.Text:='';
  znachenie:=1;
end;

procedure TForm1.SpeedButton14Click(Sender: TObject);
begin
  input2:=strtofloat(edit2.Text);
  edit2.Text:='';

  if znachenie=1 then
  begin
    output:=input+input2;
  end;

  if znachenie=2 then
  begin
    output:=input-input2;
  end;

  if znachenie=3 then
  begin
    output:=input*input2;
  end;

  if znachenie=4 then
  begin
    output:=input/input2;
  end;

  edit2.Text:=floattostr(output);
end;

procedure TForm1.SpeedButton15Click(Sender: TObject);
begin
  input:=strtofloat(edit2.Text);
  edit2.Text:='';
  znachenie:=2;
end;

procedure TForm1.SpeedButton19Click(Sender: TObject);
begin
  input:=strtofloat(edit2.Text);
  edit2.Text:='';
  znachenie:=3;
end;

procedure TForm1.SpeedButton18Click(Sender: TObject);
begin
  input:=strtofloat(edit2.Text);
  edit2.Text:='';
  znachenie:=4;
end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
  prozent:=strtofloat(edit1.Text);
  input:=strtofloat(edit2.Text);

  output:=input*prozent/100;

  edit2.Text:=floattostr(output);
end;

procedure TForm1.SpeedButton17Click(Sender: TObject);
begin
  input:=strtofloat(edit2.text);
  output:=sqrt(input);
  edit2.Text:=floattostr(output);
end;

procedure TForm1.SpeedButton16Click(Sender: TObject);
begin
  stepen:=strtoint(edit3.Text)-1;
  input:=strtofloat(edit2.Text);
  output:=input;

  if stepen=0 then
  begin
    edit2.Text:='0';
  end;

  while stepen>0 do
  begin
    output:=output*input;
    stepen:=stepen-1;
  end;

  edit2.Text:=floattostr(output);
end;

procedure TForm1.SpeedButton20Click(Sender: TObject);
begin
  Edit1.Text:='0';
  Edit2.Text:='0';
  Edit3.Text:='0';
  Edit4.Text:='0';
  Edit5.Text:='0';
  Edit6.Text:='0';
  Edit7.Text:='0';
  Edit8.Text:='0';
  Edit9.Text:='0';
end;

procedure TForm1.SpeedButton21Click(Sender: TObject);

var
a,b,c,x1,x2,d,p:real;

begin

  a:=strtofloat(edit4.Text);
  b:=strtofloat(edit6.Text);
  c:=strtofloat(edit5.Text);

  if a=0 then
  begin
    ShowMessage('a=0. Неверноное значение a');
  end;

  d:=(b*b)-(4*a*c);

  if d<0 then
  begin
    ShowMessage('Уравнение не имеет корней');
  end;

  p:=sqrt(d);

  x1:=(-b+p)/(2*a);
  x2:=(-b-p)/(2*a);

  edit8.Text:='X1='+floattostr(x1);
  edit7.Text:='X2='+floattostr(x2);
end;

procedure TForm1.SpeedButton22Click(Sender: TObject);

var
g,r,s:real;
s2:string;

begin

  g:=strtofloat(edit9.Text);

  if (g>360) or (g=360) then
  begin
    g:=g-360;
   end;

  r:=PI*g/180;
  s:=sin(r);
  s2:=floattostr(s);

  if (g=0) or (g=180) then
  begin
    s2:='0';
   end;

  if (g=90) or (g=270) then
  begin
    s2:='1';
  end;

  if (g=30) or (g=210) then
  begin
    s2:='1/2';
  end;

  if (g=45) or (g=225) then
  begin
    s2:='(Квадратный корень от 2)/2';
  end;

  if (g=60) or (g=240) then
  begin
    s2:='(Квадратный корень от 3)/2';
  end;

  edit2.Text:=s2;

end;

procedure TForm1.SpeedButton23Click(Sender: TObject);

var
g,r,c:real;
c2:string;

begin

  g:=strtofloat(edit9.Text);

  if (g>360) or (g=360) then
  begin
    g:=g-360;
   end;

  r:=PI*g/180;
  c:=cos(r);
  c2:=floattostr(c);

  if (g=0) or (g=180) then
  begin
    c2:='1';
   end;

  if (g=90) or (g=270) then
  begin
    c2:='0';
  end;

  if (g=30) or (g=210) then
  begin
    c2:='(Квадратный корень от 3)/2';
  end;

  if (g=45) or (g=225) then
  begin
    c2:='(Квадратный корень от 2)/2';
  end;

  if (g=60) or (g=240) then
  begin
    c2:='1/2';
  end;

  edit2.Text:=c2;

end;

procedure TForm1.SpeedButton24Click(Sender: TObject);

var
g,r,t,c,s:real;
t2:string;

begin

  g:=strtofloat(edit9.Text);

  if (g>360) or (g=360) then
  begin
    g:=g-360;
   end;

  r:=PI*g/180;
  c:=Cos(r);  
  s:=Sin(r);
  t:=s/c;
  t2:=floattostr(t);

  if (g=0) or (g=180) then
  begin
    t2:='0';
   end;

  if (g=90) or (g=270) then
  begin
    t2:='Не определён';
  end;

  if (g=30) or (g=210) then
  begin
    t2:='(Квадратный корень от 3)/3';
  end;

  if (g=45) or (g=225) then
  begin
    t2:='1';
  end;

  if (g=60) or (g=240) then
  begin
    t2:='Квадратный корень от 3';
  end;

  edit2.Text:=t2;

end;

procedure TForm1.SpeedButton25Click(Sender: TObject);

var
g,r:real;

begin

  g:=strtofloat(edit9.Text);
  r:=g*PI/180;

  edit2.Text:=floattostr(r);

end;

procedure TForm1.SpeedButton26Click(Sender: TObject);
begin
ShellExecute(0, 'open', 'Calc by UnrealFire.chm','','', sw_show);
end;

end.



вот в этой теме помогите пожалуйста, а то вместо проги херня получается. выглядит на каждом компе по разному. Потом выложу прогу и исходники.
Ответить с цитированием
  #12  
Старый 03.09.2012, 17:38
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

ужс, бррр... за такой код в приличном обществе линейкой по рукам бьют...
Числа стоило бы записать вот так:
Код:
procedure TForm1.SpeedButtonNumberClick(Sender: TObject);
begin
 edit2.Text:=edit2.Text + (Sender as TSpeedButton).Caption;
end;
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #13  
Старый 03.09.2012, 19:10
Аватар для UnrealFire
UnrealFire UnrealFire вне форума
Новичок
 
Регистрация: 28.08.2012
Сообщения: 66
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

уж, извините! моя вторая программа на delphi! потихоньку всё выучу, но пока вам придётся потерпеть ещё одного новичка.
Ответить с цитированием
  #14  
Старый 03.09.2012, 19:15
Аватар для UnrealFire
UnrealFire UnrealFire вне форума
Новичок
 
Регистрация: 28.08.2012
Сообщения: 66
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Если не сложно исправьте мой код (что вместо чего, а то навьездом пока сложновато). И есть какие нибудь книжки пошире чем Самоучитель по Delphi 7? Я имею ввиду простые приёмы вроте того что был у DJ PhoeniX. Соваться в графику пока не охота.
Ответить с цитированием
  #15  
Старый 03.09.2012, 21:13
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Любые статьи по оптимизации, принципам ООП, и так далее. Моим простым приёмом мы заменяем 10 обработчиков на один... И это только то, что бросилось в глаза...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter