|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Калькулятор
Всем привет. Вот хотел присвоить переменной реал типа через strtofloat введённое выражение типа 2*3-5 и т.п. Но пишет ошибку выражения не конвертирует. Помогите пожалуйста.
Delphi 7. |
#2
|
||||
|
||||
можно посчитать значение выражения через IScriptControl. метод Eval. подробнее уже есть на форуме.
Пишу программы за еду. __________________ |
#3
|
||||
|
||||
Цитата:
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
|||
|
|||
Цитата:
|
#5
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |
#6
|
||||
|
||||
Цитата:
|
#7
|
||||
|
||||
Цитата:
|
#8
|
||||
|
||||
Код:
with CreateComObject(CLASS_ScriptControl) as IScriptControl do begin Language:='JScript'; ShowMessage(Eval('2*3-5')); end; Пишу программы за еду. __________________ |
#9
|
||||
|
||||
Цитата:
Я спрашивал у UnrealFire как он "сделал по другому" |
#10
|
||||
|
||||
но можно и так:
Код:
.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
|
||||
|
||||
Код:
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
|
||||
|
||||
ужс, бррр... за такой код в приличном обществе линейкой по рукам бьют...
Числа стоило бы записать вот так: Код:
procedure TForm1.SpeedButtonNumberClick(Sender: TObject); begin edit2.Text:=edit2.Text + (Sender as TSpeedButton).Caption; end; Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#13
|
||||
|
||||
уж, извините! моя вторая программа на delphi! потихоньку всё выучу, но пока вам придётся потерпеть ещё одного новичка.
|
#14
|
||||
|
||||
Если не сложно исправьте мой код (что вместо чего, а то навьездом пока сложновато). И есть какие нибудь книжки пошире чем Самоучитель по Delphi 7? Я имею ввиду простые приёмы вроте того что был у DJ PhoeniX. Соваться в графику пока не охота.
|
#15
|
||||
|
||||
Любые статьи по оптимизации, принципам ООП, и так далее. Моим простым приёмом мы заменяем 10 обработчиков на один... И это только то, что бросилось в глаза...
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|