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

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

?? sgr_data.pas

?? 一個delphi的好用的畫二維曲線的控件Simple Graph v2.3
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
   begin
     fLineAttr.SetPenAttr(Pen);
     Brush.Style:=bsClear;
     with pa[0] do
     begin
       x:=XA.V2P(pxa^[0]); y:=V2P(pya^[0]);
       if (x<-16000) or (y<-16000) or (x>16000) or (y>16000) then is_out:=op_out
       else is_out:=0;
     end;
     for j:=1 to Count-1 do
     begin
       with pa[1] do
       begin
         x:=XA.V2P(pxa^[j]); y:=V2P(pya^[j]);
         if (x<-16000) or (y<-16000) or (x>16000) or (y>16000) then
         is_out:=is_out or ep_out;
       end;
       //draw line if at least one point inside
       if (is_out and both_out)<>both_out then PolyLine(pa);
       is_out:=is_out shl 1;
       pa[0]:=pa[1];
     end;
   end;
 end; //DrawLines

 procedure DrawPoints(const pxa, pya : pDbls; const XA, YA : Tsp_Axis);
 var
    j:integer; p:TPoint;
 begin
    with fCanvas, YA  do
    begin
     fPA.SetPenAttr(Pen);
     Brush.Assign(fPA);
     if (fPA.Kind=ptCustom) then begin
       if Assigned(fOnDrawCustomPoint) then
       for j:=0 to Count-1 do with p do
       begin
         x:=XA.V2P(pxa^[j]); y:=V2P(pya^[j]);
         if PtInRect(fPlot.FieldRect, p) then
            fOnDrawCustomPoint(Self,pxa^[j],pya^[j],x,y);
       end;
     end else
       for j:=0 to Count-1 do with p do
       begin
         x:=XA.V2P(pxa^[j]); y:=V2P(pya^[j]);
         if PtInRect(fPlot.FieldRect, p) then DrawPointProc(x,y);
       end;
    end;
 end; //DrawPoints


begin  //Draw
 if (Count<1) or Not Assigned(fPlot) or
    Not(fPA.fVisible or ((fLineAttr.Visible) and (Count>1)))then Exit;
 with Plot do begin
   fCanvas:=DCanvas;    //assign canvas to where draw
   if XAxis=dsxBottom then XA:=BottomAxis else XA:=TopAxis;
   GetXMin(i); GetXMax(a);
   if (i>XA.Max) or (a<XA.Min) then Exit;
   GetYMin(i); GetYMax(a);
   if YAxis=dsyLeft then YA:=LeftAxis else YA:=RightAxis;
   if (i>YA.Max) or (a<YA.Min) then Exit;
 end;
 pdx:=VarArrayLock(XV);
 pdy:=VarArrayLock(YV);
 try
   if (Count>1) and fLineAttr.Visible and (fLineAttr.Style<>psClear)
   then DrawLines(pdx,pdy,XA,YA);
   if fPA.fVisible then DrawPoints(pdx,pdy,XA,YA);
 finally
   VarArrayUnlock(YV);
   VarArrayUnlock(XV);
 end;
end;

procedure Tsp_XYLine.DrawLegendMarker(const LCanvas:TCanvas; MR:TRect);
var OP:TPen; OB:TBrush; x,y:integer;
begin
 if (fLineAttr.Visible or fPA.Visible) then
 begin
   fDLM:=True;          //note that drawing legend marker
   fCanvas:=LCanvas;
   OP:=TPen.Create;   OP.Assign(fCanvas.Pen); //save pen
   OB:=TBrush.Create; OB.Assign(fCanvas.Brush); //save brush
   with MR do y:=(Bottom+Top) div 2;
   if fLineAttr.Visible then with fCanvas do begin
     fLineAttr.SetPenAttr(fCanvas.Pen);
     Brush.Style:=bsClear;
     with MR do PolyLine([Point(Left+1, y), Point(Right, y)]);
   end;
   if fPA.Visible then with fCanvas do begin
     fPA.SetPenAttr(Pen);
     Brush.Assign(fPA);
     with MR do x:=(Left+Right) div 2;
     if (fPA.Kind=ptCustom) and Assigned(fOnDrawCustomPoint) then
        fOnDrawCustomPoint(Self, 0,0, x,y)
     else DrawPointProc(x,y);
   end;
   fCanvas.Brush.Assign(OB); OB.Free;  //restore brush
   fCanvas.Pen.Assign(OP); OP.Free; //restore pen
   fDLM:=False;
 end;
end;

function Tsp_XYLine.GetX(i:integer):double;
begin
 Result:=XV[i];
end;

function Tsp_XYLine.GetY(i:integer):double;
begin
 Result:=YV[i];
end;

procedure Tsp_XYLine.QuickAddXY(aX,aY:double);
//don't spends time to update Plot, instead simply draw next segment,
//therefore AutoMin and AutoMax are ignored
var l,e:TPoint; A:Tsp_Axis;  inside:boolean;
begin
 if fPN >= fCapacity        //has free space in series data storage?
    then Expand;            //if no then expand data storage
 XV[fPN]:=aX;  YV[fPN]:=aY; //add values to data storage
 TryUpdateMinMax(aX,aY);    //serve data min & max
 inc(fPN);                  //points nubmer was increased
 //instead InvalidatePlot(rsDataChanged) we simply draw line segment;
 //but first check if we can draw
 if CanPlot and Active //has parent plot, can invalidate it & series is active?
 then with Plot do
 begin
   //if plot painted through draw buffer, then mark buffer as invalid
   if BufferedDisplay
      then BufferIsInvalid; //draw buffer will be freshed on next Paint
   with FieldRect do IntersectClipRect(DCanvas.Handle, Left, Top, Right, Bottom);
   if fLineAttr.Visible and (fPN>1) then
   begin
     if XAxis=dsxBottom then A:=BottomAxis else A:=TopAxis;
     with A do  begin       //ask horiz. axis for the scaling
       l.x:=V2P(XV[fPN-2]);
       e.x:=V2P(XV[fPN-1]);       //find x pos new line segment
     end;
     if YAxis=dsyLeft then A:=LeftAxis else A:=RightAxis;
     with A do  begin      //ask vert. axis for the scaling
       l.y:=V2P(YV[fPN-2]);
       e.y:=V2P(YV[fPN-1]);       //find y pos new line segment
     end;
     inside:=PtInRect(FieldRect, e);
     if (PtInRect(FieldRect, l) or inside) then with DCanvas do  begin
       fLineAttr.SetPenAttr(DCanvas.Pen); //set line draw attributes
       if DCanvas.Brush.Style<>bsClear then DCanvas.Brush.Style:=bsClear;
       MoveTo(l.x,l.y);
       LineTo(e.x,e.y);           //draw line
     end;
   end
   else
   begin
     if XAxis=dsxBottom then A:=BottomAxis else A:=TopAxis;
     with A do e.x:=V2P(XV[fPN-1]);       //find x pos new line segment
     if YAxis=dsyLeft then A:=LeftAxis else A:=RightAxis;
     with A do e.y:=V2P(YV[fPN-1]);       //find y pos new line segment
     inside:=PtInRect(FieldRect, e);
   end;
   if fPA.fVisible and inside then begin
     fCanvas:=DCanvas;
     with fCanvas do begin
//     if not (Pen.Style in [psSolid, psClear]) then Pen.Style:=psSolid;
       fPA.SetPenAttr(Pen);
       Brush.Assign(fPA);
     end;
     if (fPA.Kind=ptCustom) and Assigned(fOnDrawCustomPoint) then
        fOnDrawCustomPoint(Self, XV[fPN-1],YV[fPN-1], e.x,e.y)
     else DrawPointProc(e.x,e.y);
   end;
 end;
end;



{*** Tsp_SpectrLines ***}

constructor Tsp_SpectrLines.Create(AOwner:TComponent);
begin
 Inherited Create(AOwner);
 fBLVisible:=True;
 fLabelFormat:='###0.##';
 fLFont:=TFont.Create;
 fLFont.OnChange:=AtrributeChanged;
end;

destructor Tsp_SpectrLines.Destroy;
begin
 if Assigned(fLFont) then fLFont.Free;
 inherited;
end;

procedure Tsp_SpectrLines.SetBaseValue(V:double);
begin
 if fBaseValue<>V then
 begin
  fBaseValue:=V;
  AtrributeChanged(Self);
 end;
end;

procedure Tsp_SpectrLines.SetYOrigin(V:Tsp_YOrigin);
begin
 if fYOrigin<>V then
 begin
  fYOrigin:=V;
  AtrributeChanged(Self);
 end;
end;

procedure Tsp_SpectrLines.SetWhatValues(V:Tsp_WhatValues);
begin
 if fWhatValues<>V then
 begin
  fWhatValues:=V;
  AtrributeChanged(Self);//if CanPlot then PLot.Invalidate;
 end;
end;

procedure Tsp_SpectrLines.SetLabelFormat(const V:string);
begin
 if fLabelFormat<>V then
 begin
  fLabelFormat:=V;
  AtrributeChanged(Self);//if CanPlot then PLot.Invalidate;
 end;
end;

procedure Tsp_SpectrLines.SetLFont(V:TFont);
begin
 fLFont.Assign(V);
end;

procedure Tsp_SpectrLines.SetLVisible(const V:boolean);
begin
 if fLVisible<>V then
 begin
  fLVisible:=V;
  AtrributeChanged(Self);//if CanPlot then PLot.Invalidate;
 end;
end;

procedure Tsp_SpectrLines.SetBLVisible(const V:boolean);
begin
 if fBLVisible<>V then
 begin
  fBLVisible:=V;
  AtrributeChanged(Self);//if CanPlot then PLot.Invalidate;
 end;
end;

procedure Tsp_SpectrLines.Draw;
var    ps:pLP;
       pdx, pdy:pDbls;
       XA,YA:Tsp_Axis;  i,a:double;
       by:integer; j:integer;

 procedure DrawBars(ps:pLP; by:integer);
 var j,lx,rx:integer;
 begin
  with Plot do
  begin
    lx:=fLineAttr.Width div 2;  rx:=fLineAttr.Width-lx;
    //begin darw
    if fLineAttr.Width=1 then begin   //draw line if BarWidth=1
      fLineAttr.SetPenAttr(fCanvas.Pen);
      for j:=0 to Count-1 do with DCanvas, ps^[j] do begin
        if y<by then begin MoveTo(x, by); LineTo(x, y); end
        else begin  MoveTo(x, y); LineTo(x, by); end
      end
    end
    else begin                      //draw rectangle if BarWidth=1
      with fCanvas do begin
        Brush.Color:=fLineAttr.Color;
        Brush.Style:=bsSolid;
        Pen.Style:=psClear;
      end;
      inc(rx);
      for j:=0 to Count-1 do with fCanvas, ps^[j] do begin
        if y<by then Rectangle(x-lx, y-1, x+rx, by+1)
        else Rectangle(x-lx, by, x+rx, y+1);
      end;
    end;
  end; //with
 end; //DrawBars

 procedure DrawLabels(pdx,pdy:pDbls; ps:pLP);
 var j,lx,ly:integer; LS:string;
 begin
   lx:=fLineAttr.Width-fLineAttr.Width div 2;
   with fCanvas do begin
     Brush.Style:=bsClear;
     Font:=fLFont;
     ly:=TextHeight('8') div 2;
   end;
   if fWhatValues=wvYValues then
   for j:=0 to Count-1 do with fCanvas, ps^[j] do begin
     LS:=FormatFloat(fLabelFormat,pdy[j]);
     if Assigned(fOnGetLabel) then fOnGetLabel(Self, j, pdx^[j], pdy^[j], LS);
     TextOut(x+lx, y-ly,LS);
   end
   else
   for j:=0 to Count-1 do with fCanvas, ps^[j] do begin
     LS:=FormatFloat(fLabelFormat,pdx[j]);
     if Assigned(fOnGetLabel) then fOnGetLabel(Self, j, pdx^[j], pdy^[j], LS);
     TextOut(x+lx, y-ly,LS);
   end;
 end;    //DrawLabels(pdx,pdy,ps);

begin
 if (Count<1) or Not Assigned(Plot) then Exit;
 with Plot do begin
  fCanvas:=Plot.DCanvas;
  if XAxis=dsxBottom then XA:=BottomAxis else XA:=TopAxis;
  GetXMin(i); GetXMax(a);
  if (i>XA.Max) or (a<XA.Min) then Exit;
 end;
 GetMem(ps, Count*SizeOf(TPoint));
 pdx:=VarArrayLock(XV);
 pdy:=VarArrayLock(YV);
 try
  with Plot do begin
    //find where begin draw bar
    if YAxis=dsyLeft then YA:=LeftAxis else YA:=RightAxis;
    if YOrigin=yoBaseLine then begin
      with YA do by:=V2P(fBaseValue);
      if by>BottomAxis.OY then by:=BottomAxis.OY+2
      else if by<TopAxis.OY then by:=TopAxis.OY-2;
    end
    else begin //if YAxis min at top then from top and vice versa
      if YA.Inversed then by:=TopAxis.OY-2 else by:=BottomAxis.OY+2
    end;
    //calc coordinate
    for j:=0 to Count-1 do with ps^[j], XA do begin
     x:=V2P(pdx^[j]);
    end;
    for j:=0 to Count-1 do with ps^[j], YA do begin
     y:=V2P(pdy^[j]);
    end;
    if fLineAttr.Visible then DrawBars(ps, by);
    //draw base line
    if fBLVisible and (YOrigin=yoBaseLine) then
    begin
      with fCanvas, FieldRect do
      begin
        fLineAttr.SetPenAttr(Pen);
        Pen.Width:=1;
        MoveTo(Left, by);
        LineTo(Right+1,by);
      end;
    end;
    //darw value label
    if fLVisible then DrawLabels(pdx,pdy,ps);
  end;
 finally
  FreeMem(ps, Count*SizeOf(TPoint));
  VarArrayUnlock(YV);
  VarArrayUnlock(XV);
 end;
end;

function  Tsp_SpectrLines.GetYMin;
begin
 Result:=inherited GetYMin(V);
 if Not(Result) then Exit;
 if YOrigin=yoBaseLine then
 begin
   if V>fBaseValue then V:=fBaseValue
 end else
 begin
   if V>0 then V:=0
 end;
end;

function  Tsp_SpectrLines.GetYMax;
begin
 Result:=GetYMax(V);;
 if Not(Result) then Exit;  // V:=inherited GetYMax(V);
 if YOrigin=yoBaseLine then
 begin
   if V<fBaseValue then V:=fBaseValue
 end else
 begin
   if V<0 then V:=0
 end;
end;


END.


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费观看日韩av| 欧美日韩五月天| 欧美视频日韩视频| 日本一区二区三区四区在线视频| 亚洲一区二区成人在线观看| 国产一区二区三区国产| 欧美日韩成人综合| 亚洲精品午夜久久久| 成人午夜在线视频| 日韩一区二区视频| 亚洲va在线va天堂| 欧美性感一类影片在线播放| 欧美国产日韩a欧美在线观看| 日韩av中文字幕一区二区| 欧美专区日韩专区| 国产精品午夜免费| 国产成人av电影免费在线观看| 欧美一级二级三级蜜桃| 性做久久久久久久免费看| 色狠狠色狠狠综合| 伊人色综合久久天天人手人婷| www.亚洲色图| 国产精品女同互慰在线看| 国产成人av在线影院| 国产午夜精品一区二区三区嫩草| 毛片av一区二区| 日韩一级成人av| 日韩专区中文字幕一区二区| 欧美日韩久久一区二区| 午夜精品免费在线观看| 欧美日韩在线综合| 天天综合色天天| 欧美一卡二卡三卡| 美女任你摸久久| 欧美大胆一级视频| 加勒比av一区二区| 国产日本亚洲高清| caoporn国产一区二区| 国产精品伦理一区二区| 99精品久久99久久久久| 亚洲狠狠丁香婷婷综合久久久| 在线中文字幕一区二区| 偷拍日韩校园综合在线| 精品日韩成人av| 国产成人av在线影院| 亚洲品质自拍视频| 欧美三区在线观看| 激情欧美一区二区三区在线观看| 2020国产成人综合网| 国产电影一区在线| 亚洲一区在线观看免费 | 一二三区精品福利视频| 在线观看视频一区| 久久精品国产一区二区| 中文子幕无线码一区tr| 色呦呦一区二区三区| 日韩不卡一区二区三区| 国产农村妇女毛片精品久久麻豆| 91在线国内视频| 日韩电影免费在线看| 欧美国产精品v| 欧美喷水一区二区| 国产91精品精华液一区二区三区| 亚洲欧美精品午睡沙发| 日韩视频123| 91麻豆国产香蕉久久精品| 午夜电影久久久| 国产欧美一区二区三区鸳鸯浴| 在线免费不卡视频| 国产在线麻豆精品观看| 亚洲精品视频在线看| 精品久久国产字幕高潮| 一本一本大道香蕉久在线精品 | 国产精品香蕉一区二区三区| 亚洲精品福利视频网站| 2024国产精品| 欧美日韩国产经典色站一区二区三区| 久久电影国产免费久久电影| 亚洲免费在线视频一区 二区| 日韩三级在线免费观看| 欧美性色欧美a在线播放| 国产一区二区精品久久91| 天天操天天干天天综合网| 国产精品天天看| 欧美xxxx老人做受| 欧美又粗又大又爽| 成人一道本在线| 精品在线一区二区| 日韩精品一级二级| 亚洲美腿欧美偷拍| 国产精品欧美一级免费| 久久综合九色综合欧美亚洲| 欧美精品xxxxbbbb| 欧美在线你懂得| 91丨porny丨首页| 丁香激情综合国产| 国产精华液一区二区三区| 麻豆精品精品国产自在97香蕉| 亚洲高清免费视频| 一区二区三区日韩在线观看| 日韩一区欧美小说| 国产精品午夜电影| 中文字幕不卡在线| 欧美激情一二三区| 欧美国产日产图区| 国产精品全国免费观看高清| 中文字幕精品在线不卡| 国产欧美精品一区二区三区四区 | 国产大陆精品国产| 久久精品免费观看| 美国一区二区三区在线播放| 亚洲不卡在线观看| 日韩高清一区在线| 蜜臀久久99精品久久久画质超高清 | 久久美女艺术照精彩视频福利播放 | 日韩午夜av电影| 日韩一卡二卡三卡国产欧美| 欧美一区二区视频在线观看2020| 色88888久久久久久影院按摩| 91首页免费视频| 欧美日韩一区二区在线观看视频| 日本精品一区二区三区四区的功能| 色婷婷精品久久二区二区蜜臀av| 91在线视频免费观看| 色视频欧美一区二区三区| 欧美亚洲国产一区二区三区va | 国产91丝袜在线播放0| 懂色av一区二区三区免费看| 成人午夜精品一区二区三区| 不卡的av网站| 欧美羞羞免费网站| 欧美一级高清片在线观看| 久久久99久久| 亚洲精品日韩专区silk| 午夜精品久久久久久不卡8050| 久久精品国产网站| 成人高清免费观看| 欧美吞精做爰啪啪高潮| 欧美一区二区美女| 国产亚洲精品超碰| 一区二区日韩av| 毛片一区二区三区| 91在线播放网址| 91精品麻豆日日躁夜夜躁| 久久夜色精品一区| 一区二区欧美视频| 国产一区二区三区精品视频| 91在线精品秘密一区二区| 日韩午夜中文字幕| 自拍偷拍欧美激情| 婷婷丁香激情综合| eeuss影院一区二区三区| 91精品国产入口| 国产精品久久久一本精品| 午夜视频在线观看一区二区 | 欧美精品一区二区三| 国产精品二三区| 日本不卡一区二区| 成人不卡免费av| 日韩丝袜情趣美女图片| 日韩毛片视频在线看| 捆绑紧缚一区二区三区视频| 91在线视频观看| 国产日韩欧美制服另类| 午夜精品久久久久久久蜜桃app | 久久机这里只有精品| 色又黄又爽网站www久久| 久久久久久久久久久久久久久99| 亚洲最新视频在线播放| 国产成人免费网站| 欧美一区二区啪啪| 亚洲国产精品麻豆| 91视频www| 国产喂奶挤奶一区二区三区| 美女视频免费一区| 欧美久久久久中文字幕| 自拍偷在线精品自拍偷无码专区| 国产一区二区三区久久悠悠色av| 欧美年轻男男videosbes| 亚洲欧美经典视频| 波多野结衣一区二区三区 | 亚洲日本在线观看| 久久国产婷婷国产香蕉| 欧美日韩国产综合一区二区| 亚洲精品亚洲人成人网| 成人av综合在线| 国产精品视频在线看| 国产精品一区2区| 欧美精品一区二区三区蜜臀| 美洲天堂一区二卡三卡四卡视频| 欧美色手机在线观看| 亚洲美女视频一区| 在线欧美日韩国产| 综合电影一区二区三区| av电影天堂一区二区在线观看| 久久久久综合网| 懂色一区二区三区免费观看 | 污片在线观看一区二区| 欧美精品18+| 日产精品久久久久久久性色|