📄 statcurve_f.~pas
字号:
unit StatCurve_F;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, ComObj, DB, ADODB;
type
TRePaintType = (
mNoPaint, //未画线
mRePaint, //重画
mPaintNext); //画新的线
rPoint = record //定义坐标上的点
x,y:single;
end;
rLine=array[1..10] of array[0..99] of rPoint; //定义由100个点的连成的曲线
TfrmStatCurve = class(TForm)
Panel1: TPanel;
GroupBox11: TGroupBox;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
GroupBox5: TGroupBox;
GroupBox6: TGroupBox;
GroupBox7: TGroupBox;
GroupBox8: TGroupBox;
GroupBox9: TGroupBox;
GroupBox10: TGroupBox;
GroupBox12: TGroupBox;
edtCarLicense: TEdit;
Label1: TLabel;
btnSelect: TButton;
btnOK: TButton;
StatusBar1: TStatusBar;
GroupBox13: TGroupBox;
Label3: TLabel;
edtCarID: TEdit;
Label4: TLabel;
edtCarTeam: TEdit;
Label5: TLabel;
edtCarType: TEdit;
Label7: TLabel;
edtMaxSpeed: TEdit;
img1: TImage;
img2: TImage;
img3: TImage;
img4: TImage;
img5: TImage;
img6: TImage;
img7: TImage;
img8: TImage;
img9: TImage;
img10: TImage;
pb1: TPaintBox;
pb2: TPaintBox;
pb3: TPaintBox;
pb4: TPaintBox;
pb5: TPaintBox;
pb6: TPaintBox;
pb7: TPaintBox;
pb8: TPaintBox;
pb9: TPaintBox;
pb10: TPaintBox;
Label8: TLabel;
edtLicenseColor: TEdit;
Label9: TLabel;
btnClose: TButton;
ADOConnection: TADOConnection;
ADOQuery: TADOQuery;
btnDataList: TButton;
lbCarLicList: TListBox;
procedure pb1Click(Sender: TObject);
procedure pb2Click(Sender: TObject);
procedure pb3Click(Sender: TObject);
procedure pb4Click(Sender: TObject);
procedure pb5Click(Sender: TObject);
procedure pb6Click(Sender: TObject);
procedure pb7Click(Sender: TObject);
procedure pb8Click(Sender: TObject);
procedure pb9Click(Sender: TObject);
procedure pb10Click(Sender: TObject);
procedure OriginAndScale(Sender: TObject); //确定坐标原点位置和刻度长度
procedure EstablishXYWorld(imgCanvas: TImage); //画坐标系
procedure XYWorldToScreen(x, y: single; var xx, yy: integer); //把xy坐标转换成屏幕坐标
procedure pMoveTo(x, y: single; pbCanvas: TPaintBox); //移动画笔到(x,y)点
procedure pLineTo(x, y: single; pbCanvas: TPaintBox); //从当前点画线到(x,y)点
procedure pPolyline(rl: rLine; intCurveID: integer; DotNum: integer; pbCanvas: TPaintBox); //连接所有点
procedure SetPaintBoxPosition(imgCanvas: TImage; pbCanvas: TPaintBox);
procedure FormCreate(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure pb1Paint(Sender: TObject);
procedure pb2Paint(Sender: TObject);
procedure pb3Paint(Sender: TObject);
procedure pb4Paint(Sender: TObject);
procedure pb5Paint(Sender: TObject);
procedure pb6Paint(Sender: TObject);
procedure pb7Paint(Sender: TObject);
procedure pb8Paint(Sender: TObject);
procedure pb9Paint(Sender: TObject);
procedure pb10Paint(Sender: TObject);
function SetInfo:Boolean;
function GetData(intCurveID: integer):Boolean;
procedure btnSelectClick(Sender: TObject);
procedure InitSet;
procedure btnDataListClick(Sender: TObject);
procedure edtCarLicenseDblClick(Sender: TObject);
procedure lbCarLicListClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure edtCarLicenseKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmStatCurve: TfrmStatCurve;
x_min,y_min,x_max,y_max:integer; //在坐标系中的xy的最值相对于paintbox容器的实际位置
x_scale,y_scale:integer; //x和y轴1刻度的实际象素值
px_min,py_min,px_max,py_max:integer;
tmpLine: rLine;
rePaintType:TRePaintType;
strCarID: String;
arrCurveSign: Array[1..10] of Integer;
implementation
uses
StatCurve_IMP, StatCurve_DataList_F;
{$R *.dfm}
procedure TfrmStatCurve.pb1Click(Sender: TObject);
var
TempCOM: Variant;
TmpStr: String;
begin
if arrCurveSign[1]=1 then
ShowMessage('没有数据!')
else
begin
TempCOM := CreateComObject(StringToGUID('{02233CC9-FC5A-4A8D-A1D1-737FECB6EECF}')) as IDispatch;
TmpStr := TempCOM.MMInvoke(strCarID,'1',DataString);
end;
end;
procedure TfrmStatCurve.pb2Click(Sender: TObject);
var
TempCOM: Variant;
TmpStr: String;
begin
if arrCurveSign[2]=1 then
ShowMessage('没有数据!')
else
begin
TempCOM := CreateComObject(StringToGUID('{02233CC9-FC5A-4A8D-A1D1-737FECB6EECF}')) as IDispatch;
TmpStr := TempCOM.MMInvoke(strCarID,'2',DataString);
end;
end;
procedure TfrmStatCurve.pb3Click(Sender: TObject);
var
TempCOM: Variant;
TmpStr: String;
begin
if arrCurveSign[3]=1 then
ShowMessage('没有数据!')
else
begin
TempCOM := CreateComObject(StringToGUID('{02233CC9-FC5A-4A8D-A1D1-737FECB6EECF}')) as IDispatch;
TmpStr := TempCOM.MMInvoke(strCarID,'3',DataString);
end;
end;
procedure TfrmStatCurve.pb4Click(Sender: TObject);
var
TempCOM: Variant;
TmpStr: String;
begin
if arrCurveSign[4]=1 then
ShowMessage('没有数据!')
else
begin
TempCOM := CreateComObject(StringToGUID('{02233CC9-FC5A-4A8D-A1D1-737FECB6EECF}')) as IDispatch;
TmpStr := TempCOM.MMInvoke(strCarID,'4',DataString);
end;
end;
procedure TfrmStatCurve.pb5Click(Sender: TObject);
var
TempCOM: Variant;
TmpStr: String;
begin
if arrCurveSign[5]=1 then
ShowMessage('没有数据!')
else
begin
TempCOM := CreateComObject(StringToGUID('{02233CC9-FC5A-4A8D-A1D1-737FECB6EECF}')) as IDispatch;
TmpStr := TempCOM.MMInvoke(strCarID,'5',DataString);
end;
end;
procedure TfrmStatCurve.pb6Click(Sender: TObject);
var
TempCOM: Variant;
TmpStr: String;
begin
if arrCurveSign[6]=1 then
ShowMessage('没有数据!')
else
begin
TempCOM := CreateComObject(StringToGUID('{02233CC9-FC5A-4A8D-A1D1-737FECB6EECF}')) as IDispatch;
TmpStr := TempCOM.MMInvoke(strCarID,'6',DataString);
end;
end;
procedure TfrmStatCurve.pb7Click(Sender: TObject);
var
TempCOM: Variant;
TmpStr: String;
begin
if arrCurveSign[7]=1 then
ShowMessage('没有数据!')
else
begin
TempCOM := CreateComObject(StringToGUID('{02233CC9-FC5A-4A8D-A1D1-737FECB6EECF}')) as IDispatch;
TmpStr := TempCOM.MMInvoke(strCarID,'7',DataString);
end;
end;
procedure TfrmStatCurve.pb8Click(Sender: TObject);
var
TempCOM: Variant;
TmpStr: String;
begin
if arrCurveSign[8]=1 then
ShowMessage('没有数据!')
else
begin
TempCOM := CreateComObject(StringToGUID('{02233CC9-FC5A-4A8D-A1D1-737FECB6EECF}')) as IDispatch;
TmpStr := TempCOM.MMInvoke(strCarID,'8',DataString);
end;
end;
procedure TfrmStatCurve.pb9Click(Sender: TObject);
var
TempCOM: Variant;
TmpStr: String;
begin
if arrCurveSign[9]=1 then
ShowMessage('没有数据!')
else
begin
TempCOM := CreateComObject(StringToGUID('{02233CC9-FC5A-4A8D-A1D1-737FECB6EECF}')) as IDispatch;
TmpStr := TempCOM.MMInvoke(strCarID,'9',DataString);
end;
end;
procedure TfrmStatCurve.pb10Click(Sender: TObject);
var
TempCOM: Variant;
TmpStr: String;
begin
if arrCurveSign[10]=1 then
ShowMessage('没有数据!')
else
begin
TempCOM := CreateComObject(StringToGUID('{02233CC9-FC5A-4A8D-A1D1-737FECB6EECF}')) as IDispatch;
TmpStr := TempCOM.MMInvoke(strCarID,'10',DataString);
end;
end;
procedure TfrmStatCurve.OriginAndScale(Sender: TObject);
begin
x_min:=10;
y_min:=97-10;
x_max:=169-10;
y_max:=8;
x_scale:=trunc((x_max-x_min-5)/20); //x轴1刻度的象素
y_scale:=trunc((y_min-y_max-10)/60); //y轴1刻度的象素
end;
procedure TfrmStatCurve.EstablishXYWorld(imgCanvas: TImage);
var
i:integer;
begin
imgCanvas.Canvas.Pen.Color:=clBlack; //黑色画笔
imgCanvas.Canvas.MoveTo(0,0);
imgCanvas.Canvas.LineTo(169-1,0);
imgCanvas.Canvas.LineTo(169-1,97-1);
imgCanvas.Canvas.LineTo(0,97-1);
imgCanvas.Canvas.LineTo(0,0); //画四周边框
imgCanvas.Canvas.MoveTo(x_min,y_min);
imgCanvas.Canvas.LineTo(x_max,y_min);
imgCanvas.Canvas.LineTo(x_max-3,y_min-3);
imgCanvas.Canvas.MoveTo(x_max,y_min);
imgCanvas.Canvas.LineTo(x_max-3,y_min+3);
imgCanvas.Canvas.Font.Size:=5;
imgCanvas.Canvas.TextOut(x_max-9,y_min-15,'t(s)'); //画x轴
imgCanvas.Canvas.MoveTo(x_min,y_min);
imgCanvas.Canvas.LineTo(x_min,y_max);
imgCanvas.Canvas.LineTo(x_min-3,y_max+3);
imgCanvas.Canvas.MoveTo(x_min,y_max);
imgCanvas.Canvas.LineTo(x_min+3,y_max+3);
imgCanvas.Canvas.Font.Size:=5;
imgCanvas.Canvas.TextOut(x_min+6,y_max-2,'v(km/h)'); //画y轴
imgCanvas.Canvas.Font.Charset:=GB2312_CHARSET;
imgCanvas.Canvas.Font.Size:=5;
imgCanvas.Canvas.TextOut(x_min-6,y_min-2,'0'); //坐标原点
i:=x_min;
//j:=0;
while i<x_max-20 do
begin
i:=i+x_scale;
//j:=j+1;
imgCanvas.Canvas.MoveTo(i,y_min);
imgCanvas.Canvas.LineTo(i,y_min-4);
//imgCanvas.Canvas.TextOut(i,y_min+5,intToStr(j));
end; //画x轴刻度
i:=y_min;
//j:=0;
while i>y_max+20 do
begin
i:=i-10*y_scale;
//j:=j+10;
imgCanvas.Canvas.MoveTo(x_min,i);
imgCanvas.Canvas.LineTo(x_min+4,i);
//imgCanvas.Canvas.TextOut(x_min-22,i,intToStr(j));
end; //画y轴刻度
end;
procedure TfrmStatCurve.XYWorldToScreen(x, y: single; var xx, yy: integer);
begin
xx:=trunc(x*x_scale);
yy:=trunc(py_min-y*y_scale);
end;
procedure TfrmStatCurve.pMoveTo(x, y: single; pbCanvas: TPaintBox);
var
sx, sy: integer;
begin
XYWorldToScreen(x, y, sx, sy); //把XY系坐标转换为实际坐标
pbCanvas.Canvas.MoveTo(sx, sy); //移动刷子到要画的点
end;
procedure TfrmStatCurve.pLineTo(x, y: single; pbCanvas: TPaintBox);
var
sx, sy: integer;
begin
XYWorldToScreen(x, y, sx, sy); //把XY系坐标转换为实际坐标
pbCanvas.Canvas.LineTo(sx, sy); //连接两点
end;
procedure TfrmStatCurve.pPolyline(rl: rLine; intCurveID: integer; DotNum: integer; pbCanvas: TPaintBox);
var
i: integer;
begin
pbCanvas.Canvas.Pen.Color:=clRed;
rePaintType:=mRePaint;
pMoveto(rl[intCurveID][0].x, rl[intCurveID][0].y, pbCanvas);
for i := 1 to DotNum-1 do
pLineto(rl[intCurveID][i].x, rl[intCurveID][i].y, pbCanvas);
end;
procedure TfrmStatCurve.SetPaintBoxPosition(imgCanvas: TImage; pbCanvas: TPaintBox);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -