📄 parser1.pas
字号:
{******************************************************************
* (c)copyrights Capella Development Group, Donetsk 1999-2000
* Project: Zeos Library
* Module: Formula Parser Test
* Author: Sergey Seroukhov E-Mail: voland@kita.dgtu.donetsk.ua
* Date: 23/09/99
*
* List of changes:
******************************************************************}
unit Parser1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ZParser, StdCtrls, ExtCtrls, ZExtra;
type
TfrmMain = class(TForm)
pnMain: TPanel;
edtFormula: TEdit;
lblFormula: TLabel;
btnPlot: TButton;
btnCancel: TButton;
lblXmin: TLabel;
lblXmax: TLabel;
lblYmin: TLabel;
lblYmax: TLabel;
edtXmin: TEdit;
edtXmax: TEdit;
edtYmin: TEdit;
edtYmax: TEdit;
pnFunc: TPanel;
pbFunc: TPaintBox;
prMain: TZParser;
procedure btnCancelClick(Sender: TObject);
procedure btnPlotClick(Sender: TObject);
procedure pbFuncPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.DFM}
// On Exit Button Click
procedure TfrmMain.btnCancelClick(Sender: TObject);
begin
Close;
end;
// Plot Graph click
procedure TfrmMain.btnPlotClick(Sender: TObject);
var
Xmin, Xmax, Ymin, Ymax: Double;
X, dX, Y, kX, kY: Double;
// Calculate X coordinate
function Xcoord(X: Double): Integer;
begin
Result := Trunc((X-Xmin)/kX);
end;
// Calculate Y coordinate
function Ycoord(Y: Double): Integer;
begin
Result := pbFunc.Height-Trunc((Y-Ymin)/kY);
end;
begin
prMain.Equation := edtFormula.Text;
Xmin := StrToFloatDefEx(edtXmin.Text,-100);
Xmax := StrToFloatDefEx(edtXmax.Text,100);
Ymin := StrToFloatDefEx(edtYmin.Text,-100);
Ymax := StrToFloatDefEx(edtYmax.Text,100);
kX := (Xmax-Xmin)/pbFunc.Width;
kY := (Ymax-Ymin)/pbFunc.Height;
if (kX=0) or (kY=0) then exit;
with pbFunc.Canvas do begin
Pen.Color := clBlack;
Rectangle(0,0,pbFunc.Width,pbFunc.Height);
Pen.Width := 2;
MoveTo(Xcoord(Xmin),Ycoord(0));
LineTo(Xcoord(Xmax),Ycoord(0));
MoveTo(Xcoord(0),Ycoord(Ymin));
LineTo(Xcoord(0),Ycoord(Ymax));
end;
dX := (Xmax-Xmin)/pbFunc.Width;
X := Xmin;
pbFunc.Canvas.Pen.Color := clBlue;
pbFunc.Canvas.Pen.Width := 1;
while X<=Xmax do begin
prMain.Variables['X'] := X;
Y := prMain.Evalute;
if X=Xmin then pbFunc.Canvas.MoveTo(Xcoord(X),Ycoord(Y))
else pbFunc.Canvas.LineTo(Xcoord(X),Ycoord(Y));
X := X+dX;
end;
end;
// On Paint Box paint event
procedure TfrmMain.pbFuncPaint(Sender: TObject);
begin
try
btnPlotClick(Sender);
except
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -