⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 statcurve_f.~pas

📁 汽车行驶记录仪数据采集处理系统
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
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 + -