亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? statcurvebig_f.~pas

?? 汽車行駛記錄儀數據采集處理系統
?? ~PAS
字號:
unit StatCurveBig_F;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, DB, ADODB;

type
  TRePaintType = (
    mNoPaint,       //未畫線
    mRePaint,       //重畫
    mPaintNext);    //畫新的線
  rPoint = record   //定義坐標上的點
    x,y,z:single;
  end;
  rLine=array[0..99] of rPoint;   //定義由100個點的連成的曲線
  TfrmStatCurveBig = class(TForm)
    Panel1: TPanel;
    GroupBox2: TGroupBox;
    Label1: TLabel;
    edt_X: TEdit;
    Label2: TLabel;
    edt_Y: TEdit;
    GroupBox1: TGroupBox;
    StatusBar1: TStatusBar;
    imgCanvas: TImage;
    pbCanvas: TPaintBox;
    btnClose: TButton;
    lab_X: TLabel;
    lab_Y: TLabel;
    lab_Z: TLabel;
    ADOConnection: TADOConnection;
    ADOQuery: TADOQuery;
    btnPrint: TButton;
    labCarLic: TLabel;
    labCarType: TLabel;
    labDriverLic: TLabel;
    labDateTime: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure btnCloseClick(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; pbCanvas: TPaintBox);   //連接所有點
    procedure SetPaintBoxPosition(imgCanvas: TImage; pbCanvas: TPaintBox);
    procedure FormCreate(Sender: TObject);
    procedure pbCanvasPaint(Sender: TObject);
    procedure pbCanvasMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure DrawLine(Sender: TObject);
    procedure DrawSwitch(rl: rLine; pbCanvas: TPaintBox);
    procedure btnPrintClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmStatCurveBig: TfrmStatCurveBig;
  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;
  old_x,old_y:integer;
  DotNum:integer;
implementation
uses
  StatCurveBig_IMP;
{$R *.dfm}

procedure TfrmStatCurveBig.btnCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TfrmStatCurveBig.OriginAndScale(Sender: TObject);
begin
  x_min:=50;
  y_min:=imgCanvas.Height-30;
  x_max:=imgCanvas.Width-40;
  y_max:=15;
  x_scale:=trunc((x_max-x_min-60)/20);   //x軸1刻度的象素
  y_scale:=trunc((y_min-y_max-5)/180);   //y軸1刻度的象素
end;

procedure TfrmStatCurveBig.EstablishXYWorld(imgCanvas: TImage);
var
  i,j:integer;
begin
  imgCanvas.Canvas.Pen.Color:=clBlack; //黑色畫筆
  imgCanvas.Canvas.MoveTo(0,0);
  imgCanvas.Canvas.LineTo(imgCanvas.Width-1,0);
  imgCanvas.Canvas.LineTo(imgCanvas.Width-1,imgCanvas.Height-1);
  imgCanvas.Canvas.LineTo(0,imgCanvas.Height-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-7,y_min-7);
  imgCanvas.Canvas.MoveTo(x_max,y_min);
  imgCanvas.Canvas.LineTo(x_max-7,y_min+7);
  imgCanvas.Canvas.Font.Size:=8;
  //imgCanvas.Canvas.TextOut(x_max+10,y_min-8,'t(s)');    //畫x軸
  imgCanvas.Canvas.TextOut(x_max+10,y_min-8,'時間');    //畫x軸
  imgCanvas.Canvas.TextOut(x_max+10,y_min+6,'(s)');
  imgCanvas.Canvas.MoveTo(x_min,y_min);
  imgCanvas.Canvas.LineTo(x_min,y_max);
  imgCanvas.Canvas.LineTo(x_min,y_max+30);
  imgCanvas.Canvas.LineTo(x_min-7,y_max+9+30);
  imgCanvas.Canvas.MoveTo(x_min,y_max+30);
  imgCanvas.Canvas.LineTo(x_min+7,y_max+9+30);
  imgCanvas.Canvas.Font.Size:=8;
  //imgCanvas.Canvas.TextOut(x_min-25,y_max-20,'v(km/h)');      //畫y軸
  imgCanvas.Canvas.TextOut(x_min-40,y_max+25,'速度');      //畫y軸
  imgCanvas.Canvas.TextOut(x_min-40,y_max+40,'(km/h)');
  imgCanvas.Canvas.Font.Size:=8;
  imgCanvas.Canvas.TextOut(x_min-16,y_min+5,'0');      //坐標原點
  imgCanvas.Canvas.TextOut(x_min-40,y_max+5,'制動');
  i:=y_min;
  j:=0;
  while (i>y_max+20) and (j<180) 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軸刻度
  x_scale:=trunc((x_max-x_min-30)/20);   //x軸1刻度的象素
  i:=x_min;
  j:=0;
  while (i<x_max-50) and (j<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軸刻度
end;

procedure TfrmStatCurveBig.XYWorldToScreen(x, y: single; var xx, yy: integer);
begin
  xx:=trunc(x*x_scale);
  yy:=trunc(py_min-y*y_scale);
end;

procedure TfrmStatCurveBig.pMoveTo(x, y: single; pbCanvas: TPaintBox);
var
  sx, sy: integer;
begin
  XYWorldToScreen(x, y, sx, sy);      //把XY系坐標轉換為實際坐標
  pbCanvas.Canvas.MoveTo(sx, sy);    //移動刷子到要畫的點
end;

procedure TfrmStatCurveBig.pLineTo(x, y: single; pbCanvas: TPaintBox);
var
  sx, sy: integer;
begin
  XYWorldToScreen(x, y, sx, sy);        //把XY系坐標轉換為實際坐標
  pbCanvas.Canvas.LineTo(sx, sy);      //連接兩點
end;

procedure TfrmStatCurveBig.pPolyline(rl: rLine; pbCanvas: TPaintBox);
var
  i: integer;
begin
  pbCanvas.Canvas.Pen.Color:=clRed;
  pMoveto(rl[0].x, rl[0].y, pbCanvas);
  for i := 1 to DotNum-1 do
    pLineto(rl[i].x, rl[i].y, pbCanvas);
end;

procedure TfrmStatCurveBig.SetPaintBoxPosition(imgCanvas: TImage; pbCanvas: TPaintBox);
begin
  pbCanvas.Left:=imgCanvas.Left+50;
  pbCanvas.Top:=imgCanvas.Top+30;
  pbCanvas.Width:=imgCanvas.Width-90;
  pbCanvas.Height:=imgCanvas.Height-60;
  px_min:=0;
  px_max:=pbCanvas.Width;
  py_min:=pbCanvas.Height;
  py_max:=0;
end;

procedure TfrmStatCurveBig.FormCreate(Sender: TObject);
var
  strSql: string;
  i: integer;
begin
  ADOConnection.ConnectionString := DataString;
  ADOConnection.Connected := True;
  strSql:='select Car_LicensePlate,Car_LicensePlateColor,Driver_ID,AccidentDoubtful_Time,AccidentDoubtful_Speed,AccidentDoubtful_Switch,AccidentDoubtful_ID from View_Data_AccidentDoubtful where Car_ID='+strCarID+' and AccidentDoubtful_CurveID='+strCurveID+' order by AccidentDoubtful_ID';
  ADOQuery.Close;
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Add(strSql);
  ADOQuery.Open;
  for i:=0 to 99 do
  begin
    tmpLine[i].x:=ADOQuery.FieldByName('AccidentDoubtful_Time').Value;
    tmpLine[i].y:=ADOQuery.FieldByName('AccidentDoubtful_Speed').Value;
    tmpLine[i].z:=ADOQuery.FieldByName('AccidentDoubtful_Switch').Value;
    ADOQuery.Next;
  end;
  strSql:='select Car_LicensePlate,Car_Type from Info_Car where Car_ID='+strCarID;
  ADOQuery.Close;
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Add(strSql);
  ADOQuery.Open;
  if NOT(ADOQuery.FieldByName('Car_LicensePlate').Value=NULL) then
    labCarLic.Caption:='車牌號碼:'+ADOQuery.FieldByName('Car_LicensePlate').AsString;
  if NOT(ADOQuery.FieldByName('Car_Type').Value=NULL) then
    labCarType.Caption:='車輛分類:'+ADOQuery.FieldByName('Car_Type').AsString;
  strSql:='select TOP 1 Driver_Licence,AccidentDoubtful_RealTime from View_Data_AccidentDoubtful where Car_ID='+strCarID+' and AccidentDoubtful_CurveID='+strCurveID+' order by AccidentDoubtful_ID DESC';
  ADOQuery.Close;
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Add(strSql);
  ADOQuery.Open;
  if NOT(ADOQuery.FieldByName('Driver_Licence').Value=NULL) then
    labDriverLic.Caption:='駕駛證號:'+ADOQuery.FieldByName('Driver_Licence').AsString;
  if NOT(ADOQuery.FieldByName('AccidentDoubtful_RealTime').Value=NULL) then
    labDateTime.Caption:='實時日期、時間(對應坐標20s處):'+ADOQuery.FieldByName('AccidentDoubtful_RealTime').AsString;
  rePaintType:=mNoPaint;
  SetPaintBoxPosition(imgCanvas,pbCanvas);
  OriginAndScale(Sender);
  EstablishXYWorld(imgCanvas);
  old_x:=-1;
  old_y:=-1;
  DotNum:=100;//length(tmpLine);
  DrawLine(Sender);
  DrawSwitch(tmpLine,pbCanvas);
end;

procedure TfrmStatCurveBig.pbCanvasPaint(Sender: TObject);
begin
  if rePaintType=mRePaint then
    DrawLine(Sender);
end;

procedure TfrmStatCurveBig.pbCanvasMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  edt_X.Text:=formatfloat('0.00',(x/x_scale));
  edt_Y.Text:=formatfloat('0.00',(py_min-y)/y_scale);
  lab_X.Visible:=true;
  lab_Y.Visible:=true;
  lab_X.Caption:='x: '+formatfloat('0.00',(x/x_scale));
  lab_Y.Caption:='y: '+formatfloat('0.00',(py_min-y)/y_scale);
  lab_X.Left:=pbCanvas.Left+x+10;
  lab_X.Top:=pbCanvas.Top+y-20;
  lab_Y.Left:=pbCanvas.Left+x+60;
  lab_Y.Top:=pbCanvas.Top+y-20;
  if (old_x<>-1) and (old_x>5) and (old_y<pbCanvas.Height-5) then
  begin
    pbCanvas.Canvas.Pen.Color:=clWhite;
    pbCanvas.Canvas.MoveTo(old_x,pbCanvas.Height-5);
    pbCanvas.Canvas.LineTo(old_x,0);
    pbCanvas.Canvas.MoveTo(5,old_y);
    pbCanvas.Canvas.LineTo(pbCanvas.Width,old_y);
  end;
  if rePaintType=mRePaint then
    DrawLine(Sender);
  if (x>5) and (y<pbCanvas.Height-5) then
  begin
    pbCanvas.Canvas.Pen.Color:=clBtnFace;
    pbCanvas.Canvas.MoveTo(x,pbCanvas.Height-5);
    pbCanvas.Canvas.LineTo(x,0);
    pbCanvas.Canvas.MoveTo(5,y);
    pbCanvas.Canvas.LineTo(pbCanvas.Width,y);
    old_x:=x;
    old_y:=y;
  end;
end;

procedure TfrmStatCurveBig.DrawLine(Sender: TObject);
begin
  pbCanvas.Canvas.Pen.Color := clRed;
  rePaintType:=mRePaint;
  pPolyline(tmpLine,pbCanvas);
  DrawSwitch(tmpLine,pbCanvas);
end;

procedure TfrmStatCurveBig.DrawSwitch(rl: rLine; pbCanvas: TPaintBox);
var
  i: Integer;
  j: Integer;
  intWritePrepare: Integer;
begin
  j:= y_max-8;
  //i:=0;
  intWritePrepare:=0;  //寫標志,0為不寫,1為準備寫
  pbCanvas.Canvas.Pen.Color := clBlue;
  pbCanvas.Canvas.MoveTo(0, j);
  {if rl[0].z = 1 then
  begin
    pbCanvas.Canvas.MoveTo(0, j-5);
    pbCanvas.Canvas.LineTo(trunc(rl[0].x*x_scale),j-5);
  end
  else
  begin
    pbCanvas.Canvas.MoveTo(0, j+5);
    pbCanvas.Canvas.LineTo(trunc(rl[0].x*x_scale),j+5);
  end;
  for i := 1 to DotNum-1 do
  begin
    if rl[i].z = 1 then
    begin
      pbCanvas.Canvas.LineTo(trunc(rl[i-1].x*x_scale),j-5);
      pbCanvas.Canvas.LineTo(trunc(rl[i].x*x_scale),j-5);
    end
    else
    begin
      pbCanvas.Canvas.LineTo(trunc(rl[i-1].x*x_scale),j+5);
      pbCanvas.Canvas.LineTo(trunc(rl[i].x*x_scale),j+5);
    end;
  end;}
  for i:=0 to DotNum-1 do
  begin
    if (intWritePrepare=0) and (rl[i].z=0) then
    begin
      CONTINUE;
    end;
    if (intWritePrepare=1) and (rl[i].z=0) then
    begin
      pbCanvas.Canvas.LineTo(trunc(rl[i].x*x_scale),j-5);
      intWritePrepare:=0;
    end;
    if (intWritePrepare=0) and (rl[i].z=1) then
    begin
      pbCanvas.Canvas.MoveTo(trunc(rl[i].x*x_scale), j-5);
      intWritePrepare:=1;
    end;
    if (intWritePrepare=1) and (rl[i].z=1) then
    begin
      if i=DotNum then
        pbCanvas.Canvas.LineTo(trunc(rl[i].x*x_scale),j-5)
      else
        CONTINUE;
    end;
  end;
end;

procedure TfrmStatCurveBig.btnPrintClick(Sender: TObject);
begin
  Print;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
3d动漫精品啪啪一区二区竹菊| 2欧美一区二区三区在线观看视频| 欧美特级限制片免费在线观看| 日韩亚洲欧美在线| 中文字幕一区免费在线观看| 蜜臀久久99精品久久久画质超高清| 国产高清亚洲一区| 91精品国产综合久久久久久漫画 | 欧美一区二区三区公司| 国产精品亲子乱子伦xxxx裸| 欧美aaaaa成人免费观看视频| 99久久亚洲一区二区三区青草| 欧美成人vr18sexvr| 国产精品中文字幕一区二区三区| 色妹子一区二区| 国产精品萝li| 国产精品一区二区三区四区 | 99久久精品情趣| 久久久99久久| 极品尤物av久久免费看| 91麻豆精品国产无毒不卡在线观看| 亚洲精品老司机| thepron国产精品| 国产欧美日韩视频一区二区| 国产一区二区三区免费观看| 日韩一本二本av| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美另类一区二区三区| 亚洲卡通欧美制服中文| 97精品国产露脸对白| 欧美激情一区二区三区不卡 | 五月婷婷激情综合网| 欧美在线三级电影| 高清视频一区二区| 欧美xxxx老人做受| 狠狠色综合色综合网络| 欧美久久久久久久久久| 午夜电影久久久| 欧美日韩国产另类一区| 天天色天天操综合| 日韩欧美成人一区| 国产原创一区二区三区| 国产午夜精品在线观看| 国产精品一级在线| 久久久三级国产网站| 国产v日产∨综合v精品视频| 国产精品欧美一区喷水| 91麻豆精品视频| 亚洲va欧美va人人爽午夜| 制服.丝袜.亚洲.中文.综合| 极品销魂美女一区二区三区| 久久久久成人黄色影片| 91性感美女视频| 午夜欧美2019年伦理| 欧美成人精品二区三区99精品| 国产精品亚洲第一| 亚洲视频 欧洲视频| 欧美日韩国产大片| 久久爱www久久做| 亚洲欧洲99久久| 欧美日韩精品一区视频| 国内精品国产成人国产三级粉色| 亚洲国产精品国自产拍av| 欧美中文字幕久久| 久久99精品视频| 樱桃视频在线观看一区| 欧美一区二区久久| 成人免费毛片高清视频| 一区二区三区精品视频| 精品久久国产老人久久综合| 99国产精品国产精品久久| 日韩国产欧美在线观看| 国产精品午夜在线| 欧美另类一区二区三区| eeuss鲁片一区二区三区| 视频一区国产视频| 中文字幕亚洲欧美在线不卡| 日韩一级免费一区| 一本色道久久综合亚洲aⅴ蜜桃| 蜜桃av噜噜一区| 亚洲品质自拍视频| 精品蜜桃在线看| 色婷婷亚洲精品| 国产伦精一区二区三区| 亚洲国产精品久久久久秋霞影院| 偷偷要91色婷婷| 亚洲欧美另类在线| 亚洲精品在线观| 7777精品久久久大香线蕉| av影院午夜一区| 国产成人av电影在线| 日韩国产高清影视| 亚洲最新视频在线观看| 国产欧美精品日韩区二区麻豆天美| 91精品国产入口在线| 在线观看亚洲专区| www.久久精品| 成人亚洲一区二区一| 久久69国产一区二区蜜臀| 亚洲一区在线视频| 亚洲人成网站精品片在线观看| 中文一区二区完整视频在线观看 | 色就色 综合激情| 成人性色生活片| 国产麻豆成人精品| 极品尤物av久久免费看| 青草国产精品久久久久久| 日韩国产精品久久久久久亚洲| 亚洲一区二区三区影院| 成人免费在线播放视频| 国产精品久久久久久久久晋中| 久久九九久精品国产免费直播| 欧美成人精品1314www| 精品少妇一区二区三区免费观看| 欧美精品久久久久久久多人混战| 色婷婷综合久久久久中文一区二区 | 国产精品欧美一级免费| 欧美国产日韩a欧美在线观看| 久久久久久免费| 久久综合精品国产一区二区三区| 精品国产乱码久久| 日韩精品一区二区三区三区免费| 欧美一级日韩不卡播放免费| 4438x成人网最大色成网站| 91精品国产综合久久国产大片| 69堂亚洲精品首页| 日韩欧美中文一区| 久久视频一区二区| 国产欧美日韩不卡免费| 亚洲婷婷在线视频| 亚洲一区影音先锋| 免费成人美女在线观看| 国产在线一区观看| 国产成人午夜精品5599| 99久久免费视频.com| 在线视频国产一区| 日韩一区二区在线观看| 国产欧美日韩中文久久| 亚洲激情网站免费观看| 日韩精品国产精品| 国产久卡久卡久卡久卡视频精品| 成人一区二区三区在线观看| 色哟哟国产精品| 欧美日韩一本到| 欧美精品一区二区三区蜜桃视频| 国产精品国产三级国产普通话99| 亚洲国产精品久久一线不卡| 久久精品免费观看| 91小视频在线观看| 日韩精品中文字幕在线不卡尤物| 国产精品天干天干在线综合| 亚洲一区二区三区国产| 国产一区二区三区日韩| 日本道精品一区二区三区| 精品国产乱码久久久久久蜜臀| 国产精品动漫网站| 美女网站视频久久| 色悠久久久久综合欧美99| 精品国产一区二区三区忘忧草| 国产精品不卡一区| 久久成人综合网| 欧美日韩一级片在线观看| 国产亚洲午夜高清国产拍精品| 亚洲一区二区成人在线观看| 国产精品911| 91麻豆精品国产91久久久| 中文字幕欧美一| 国产乱色国产精品免费视频| 欧美日韩国产在线观看| 成人欧美一区二区三区小说 | 亚洲国产精品久久不卡毛片 | 在线免费观看日韩欧美| 久久精品夜夜夜夜久久| 日韩av二区在线播放| av中文字幕亚洲| 久久久久久免费网| 久久国产日韩欧美精品| 欧美日韩色综合| 亚洲永久免费视频| a4yy欧美一区二区三区| 久久综合久久综合久久综合| 天堂久久久久va久久久久| 97精品国产露脸对白| 国产精品剧情在线亚洲| 国产精品一级黄| 亚洲欧洲日本在线| 91精品国产aⅴ一区二区| 中文字幕亚洲精品在线观看| 久99久精品视频免费观看| 欧美日韩中文字幕精品| 综合欧美一区二区三区| 成人av在线网站| 久久精品免视看| 国产精品一区二区在线观看不卡 | 国产福利一区二区三区| 精品国产伦一区二区三区观看体验 | 欧美亚洲一区三区| 一区二区在线观看不卡| 91视频免费播放| 亚洲品质自拍视频|