亚洲欧美第一页_禁久久精品乱码_粉嫩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-1 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一区二区三区免费野_久草精品视频
欧美偷拍一区二区| 中文字幕一区二区三区四区| 久久久久久久久岛国免费| 亚洲精品国产一区二区三区四区在线| 污片在线观看一区二区 | 欧美精品一区二区三区在线| 日本一区二区不卡视频| 热久久免费视频| 在线视频国内自拍亚洲视频| 久久综合精品国产一区二区三区| 亚洲综合免费观看高清完整版 | 青青草原综合久久大伊人精品| 成人午夜电影网站| 日韩精品综合一本久道在线视频| 一区二区三区 在线观看视频| 国产在线精品国自产拍免费| 91精品国产欧美一区二区成人| 亚洲丝袜自拍清纯另类| 国产成人精品免费在线| 日韩欧美在线网站| 日本伊人精品一区二区三区观看方式| 波多野结衣亚洲一区| 久久久综合精品| 久久精品国产77777蜜臀| 正在播放亚洲一区| 日韩高清一区在线| 欧美久久久影院| 午夜久久久久久久久| 91激情五月电影| 一区二区三区四区不卡在线| 91同城在线观看| 综合久久久久久| 99视频超级精品| 亚洲精品五月天| 色香蕉久久蜜桃| 亚洲国产一区视频| 欧美日韩精品是欧美日韩精品| 亚洲第一会所有码转帖| 欧美日产国产精品| 日本亚洲免费观看| 日韩欧美激情一区| 国产一区二区在线免费观看| 久久久精品天堂| 成人免费视频国产在线观看| 国产精品理伦片| 色噜噜狠狠成人中文综合| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美刺激午夜性久久久久久久| 免费一区二区视频| 2023国产一二三区日本精品2022| 国模冰冰炮一区二区| 久久久久国产精品麻豆| 成人18精品视频| 亚洲一区在线免费观看| 欧美一区二区三区男人的天堂| 九一久久久久久| 国产日韩av一区二区| 成人激情午夜影院| 亚洲午夜激情网站| 久久新电视剧免费观看| 91无套直看片红桃| 日韩av一区二| 国产精品理伦片| 欧美日韩免费电影| 国产一区91精品张津瑜| 伊人性伊人情综合网| 欧美一级片在线看| 成人丝袜18视频在线观看| 亚洲一级不卡视频| 久久欧美中文字幕| 欧美综合在线视频| 激情av综合网| 一级日本不卡的影视| 久久综合丝袜日本网| 在线精品视频小说1| 黑人巨大精品欧美一区| 一区二区三区 在线观看视频| 日韩欧美国产精品| 91丨porny丨国产入口| 蜜乳av一区二区三区| 亚洲精品成人在线| 久久综合九色综合欧美就去吻| 欧美在线一二三四区| 国产精品亚洲成人| 午夜精品国产更新| 亚洲欧洲国产日本综合| 久久综合色8888| 欧美精品在线视频| 91网站最新网址| 国产91精品一区二区麻豆亚洲| 日本vs亚洲vs韩国一区三区二区 | 在线不卡免费欧美| av一区二区三区在线| 麻豆国产欧美日韩综合精品二区| 一区二区三区中文字幕电影| 久久精品男人天堂av| 日韩精品一区二区三区在线播放 | 在线电影欧美成精品| 97精品久久久久中文字幕| 国模冰冰炮一区二区| 强制捆绑调教一区二区| 亚洲一二三四区不卡| 一区二区高清免费观看影视大全| 国产调教视频一区| 久久婷婷国产综合国色天香| 91精品免费在线观看| 欧洲视频一区二区| 欧美这里有精品| 日本电影欧美片| 99精品国产热久久91蜜凸| 床上的激情91.| 成人一级视频在线观看| 国产精品一区二区在线观看不卡| 免费在线观看成人| 毛片不卡一区二区| 蜜桃传媒麻豆第一区在线观看| 日韩av中文字幕一区二区| 亚洲成人综合网站| 午夜影视日本亚洲欧洲精品| 五月综合激情网| 午夜精品福利在线| 七七婷婷婷婷精品国产| 免费在线观看一区| 久久se这里有精品| 国产一区二区三区蝌蚪| 国产成人免费视频| 99精品一区二区三区| 色婷婷综合久久久久中文 | 精品一区二区三区欧美| 精品综合久久久久久8888| 国产一区二区在线影院| 成人黄色在线视频| 日本高清免费不卡视频| 欧美老人xxxx18| 欧美va亚洲va| 国产精品网站在线| 一区二区三区四区激情| 首页国产欧美久久| 精品无人码麻豆乱码1区2区| 国产成人在线免费| 91免费看`日韩一区二区| 欧美视频日韩视频| 欧美第一区第二区| 国产精品久久久久三级| 亚洲国产精品久久人人爱蜜臀| 免费一级欧美片在线观看| 国产精品自拍毛片| 色综合久久中文综合久久97| 欧美精品一级二级| 久久久影视传媒| 加勒比av一区二区| av爱爱亚洲一区| 欧美人妖巨大在线| 国产日韩在线不卡| 亚洲午夜日本在线观看| 韩日av一区二区| 在线观看日韩一区| 精品国产成人系列| 亚洲人成人一区二区在线观看| 免播放器亚洲一区| 99国产精品国产精品久久| 欧美一区欧美二区| 最新欧美精品一区二区三区| 久久精品国产99国产| 91福利小视频| 中文字幕乱码一区二区免费| 日韩中文字幕1| 91天堂素人约啪| 国产欧美一区二区精品秋霞影院| 亚洲国产wwwccc36天堂| 成人亚洲精品久久久久软件| 日韩欧美成人激情| 亚洲aaa精品| 91丝袜美女网| 日本一区二区三区免费乱视频| 日本在线不卡视频一二三区| 91一区二区在线观看| 久久精品亚洲乱码伦伦中文| 青娱乐精品在线视频| 日本韩国欧美在线| 中文字幕亚洲综合久久菠萝蜜| 国内精品免费**视频| 欧美片在线播放| 一区二区三区日韩欧美精品| 国产91对白在线观看九色| 欧美成人福利视频| 日韩avvvv在线播放| 欧美日高清视频| 不卡的av网站| 国产精品天天摸av网| 国内精品国产成人国产三级粉色| 欧美精选一区二区| 亚洲成av人片一区二区三区| 色哟哟一区二区三区| 亚洲欧美另类综合偷拍| 91蝌蚪porny九色| 亚洲女性喷水在线观看一区| 91小视频在线| 亚洲精品免费播放| 色天使久久综合网天天|