?? statcurve_f.pas
字號(hào):
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 //定義坐標(biāo)上的點(diǎn)
x,y:single;
end;
rLine=array[1..10] of array[0..99] of rPoint; //定義由100個(gè)點(diǎn)的連成的曲線
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); //確定坐標(biāo)原點(diǎn)位置和刻度長(zhǎng)度
procedure EstablishXYWorld(imgCanvas: TImage); //畫坐標(biāo)系
procedure XYWorldToScreen(x, y: single; var xx, yy: integer); //把xy坐標(biāo)轉(zhuǎn)換成屏幕坐標(biāo)
procedure pMoveTo(x, y: single; pbCanvas: TPaintBox); //移動(dòng)畫筆到(x,y)點(diǎn)
procedure pLineTo(x, y: single; pbCanvas: TPaintBox); //從當(dāng)前點(diǎn)畫線到(x,y)點(diǎn)
procedure pPolyline(rl: rLine; intCurveID: integer; DotNum: integer; pbCanvas: TPaintBox); //連接所有點(diǎn)
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; //在坐標(biāo)系中的xy的最值相對(duì)于paintbox容器的實(shí)際位置
x_scale,y_scale:integer; //x和y軸1刻度的實(shí)際象素值
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('沒有數(shù)據(jù)!')
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('沒有數(shù)據(jù)!')
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('沒有數(shù)據(jù)!')
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('沒有數(shù)據(jù)!')
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('沒有數(shù)據(jù)!')
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('沒有數(shù)據(jù)!')
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('沒有數(shù)據(jù)!')
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('沒有數(shù)據(jù)!')
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('沒有數(shù)據(jù)!')
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('沒有數(shù)據(jù)!')
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'); //坐標(biāo)原點(diǎn)
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系坐標(biāo)轉(zhuǎn)換為實(shí)際坐標(biāo)
pbCanvas.Canvas.MoveTo(sx, sy); //移動(dòng)刷子到要畫的點(diǎn)
end;
procedure TfrmStatCurve.pLineTo(x, y: single; pbCanvas: TPaintBox);
var
sx, sy: integer;
begin
XYWorldToScreen(x, y, sx, sy); //把XY系坐標(biāo)轉(zhuǎn)換為實(shí)際坐標(biāo)
pbCanvas.Canvas.LineTo(sx, sy); //連接兩點(diǎn)
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);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -