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

📄 kxianmain.~pas

📁 该系统将温度数据以类似股票K线显示方式进行分析
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:

       TMPT := LineData[LEFTDATE].iFlag + ROUND(KWIDTH*5/6*KXISHU);
       TempStr:=IntToStr(TMPT);
       Canvas.TextOut(LEFTX+ ROUND(KWIDTH*5/6)+1,PaintHeight-BottomY+1,TempStr);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH*5/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH*5/6),PaintHeight-BottomY);

       TMPT := LineData[LEFTDATE].iFlag + ROUND(KWIDTH*6/6*KXISHU);
       TempStr:=IntToStr(TMPT);
       Canvas.TextOut(LEFTX+ ROUND(KWIDTH*6/6)-20,PaintHeight-BottomY+1,TempStr);

       Canvas.FONT.COLOR:=CLRED;
       Canvas.Pen.style:=psSolid;
       //求价格的最大、最小值
       Maxjg:=lineData[LeftDate].iMaxT;
       MinJg:=LineData[LeftDate].iMinT;
       I:=LeftDate;
       While (I<RightDate) Or (I=RightDate) Do
       Begin
           If LineData[I].iMaxT>MaxJg Then
              MaxJg:=LineData[I].iMaxT;
           If LineData[I].iMinT<MinJg Then
              MinJg:=LineData[I].iMinT;
           I:=I+1;
       End;
       if Maxjg = minjg then            //
       begin
        IF MAXJG =0 THEN MAXJG := 1;
        maxjg := round(maxjg *1.25);
        minjg := round(minjg *0.75);
       end;
       //画右侧成交价格坐标数值
      OutStr:='.';
      Canvas.Font.Color := clRed;
      Canvas.Brush.Color:=clWhite;//clBlack;
      Canvas.Font.Size:=9;
      Canvas.Font.name:='宋体';
      Canvas.Brush.style:=bsSolid;
      Canvas.Pen.color:=clred;

      TempString :=FloatToStrF((MinJg+(MaxJg-MinJg)*0/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*6/6)-9,TempString);

      TempString :=FloatToStrF((MinJg+(MaxJg-MinJg)*1/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*5/6)-9,TempString);

      TempString :=FloatToStrF((MinJg+(MaxJg-MinJg)*2/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*4/6)-9,TempString);

      TempString :=FloatToStrF((MinJg+(MaxJg-MinJg)*3/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*3/6)-9,TempString);

      TempString :=FloatToStrF((MinJg+(MaxJg-MinJg)*4/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*2/6)-9,TempString);

      TempString :=FloatToStrF((MinJg+(MaxJg-MinJg)*5/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*1/6)+2,TempString);

      TempString :=FloatToStrF((MinJg+(MaxJg-MinJg)*6/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*0/6)+2,TempString);
      //画K线图
       Kheight:=height-TopY-bottomy -10;
       HeightXiShu:=(MaxJg-MinJg)/Kheight;
       x1:=LeftX-DefaultWidth;
       I:=LeftDate;
       PJJG := LineData[I].iAvgT;
       PREAX := LEFTX;       //Round((x1+x2)/2);
       PREAY := PageTopY-Round((PJJG-MinJg)/HeightXiShu)-2+topy;

       While (I<RightDate) Or  (I=RightDate) Do
       Begin
           kpjg:=LineData[I].iOpenT;
           spjg:=LineData[I].iCloseT;
           zgjg:=LineData[I].iMaxT;
           zdjg:=LineData[I].iMinT;
           PJJG := LineData[I].iAvgT;
           x1:=x1+DefaultWidth;
           x2:=x1+DefaultWidth-1;
           x3:=Round((x1+x2)/2);
           x4:=x3;
           AX :=X3;
           If spjg<kpjg Then
           Begin
               Canvas.Pen.Color:=clAqua;
               Canvas.Brush.Color:=clAqua;
               Canvas.Brush.style:=bsSolid;
               y3:=PageTopY-Round((zgjg-MinJg)/HeightXiShu)-2 +topy;
               y1:=PageTopY-Round((kpjg-MinJg)/HeightXiShu)-2 +topy;
               y2:=PageTopY-Round((spjg-MinJg)/HeightXiShu)-2+topy;
               y4:=PageTopY-Round((zdjg-MinJg)/HeightXiShu)-2+topy;
                If (y1=y2) Then
                  y2:=y2+1;
               If (zgjg=kpjg) Then
                   y3:=y1;
               If (zdjg=spjg) Then
                   y4:=y2;
               If (zgjg<>kpjg) And (y1=y3) Then
                   y3:=y3-1;
               If (zdjg<>spjg) And (y2=y4) Then
                   y4:=y4+1;
               Canvas.MoveTo(x3,y3);
               Canvas.LineTo(x3,y1);
               Canvas.FillRect(Rect(x1,y1,x2,y2));
               Canvas.MoveTo(x4,y2);
               Canvas.LineTo(x4,y4);
           End//收盘价小于开盘价,阴线
           Else
           Begin
               Canvas.Pen.Color:=clred;
//               Canvas.Brush.Color:=clyellow;//
               x2:=x2-1;
               y3:=PageTopY-Round((zgjg-MinJg)/HeightXiShu)-2 +topy;
               y1:=PageTopY-Round((spjg-MinJg)/HeightXiShu)-2+topy;
               y2:=PageTopY-Round((kpjg-MinJg)/HeightXiShu)-2+topy;
               y4:=PageTopY-Round((zdjg-MinJg)/HeightXiShu)-2+topy;
               If (y1=y2) And (spjg<>kpjg) Then
                  y2:=y2+1;
               If (zdjg=kpjg) Then
                   y4:=y2;
               If (zgjg=spjg) Then
                   y3:=y1;
               If (zdjg<>kpjg) And (y2=y4) Then
                   y4:=y4+1;
               If (zgjg<>spjg) And (y1=y3) Then
                   y3:=y3-1;
               Canvas.MoveTo(x3,y3);
               Canvas.LineTo(x3,y1);
               Canvas.MoveTo(x1,y1);
               Canvas.LineTo(x2,y1);
               Canvas.LineTo(x2,y2);
               Canvas.LineTo(x1,y2);
               Canvas.LineTo(x1,y1);
               Canvas.MoveTo(x4,y2);
               Canvas.LineTo(x4,y4);
           End;//收盘价大于开盘价,阳线
              AY:=PageTopY-Round((PJJG-MinJg)/HeightXiShu)-2 +topy;
              Canvas.Pen.Color:=clBlack;//CLyellow;
              Canvas.MoveTo(PREAX,PREAY);
              Canvas.LineTo(AX,AY);
              PREAX := AX;
              PREAY := AY;
              I:=I+1;
       End;//画K线图
       if (lineData[leftDate].dtDateTime<=tRefTimeWork) and (LineData[rightDate].dtDateTime>= tRefTimeWork) then
       begin   //处理起始时间
            i:= leftDate;
            while (LineData[i].dtDateTime<tRefTimeWork) and (i<RightDate) do i :=i+1;
            Canvas.Pen.Color:=clRed;
            Canvas.pen.width :=2;
            X1:=LeftX +(i-LeftDate)*DefaultWidth + Round((DefaultWidth-1)/2);
            Canvas.MoveTo(X1,TopY);
            Canvas.lineTo(x1,PaintHeight-BottomY);
            Canvas.pen.width :=1;
        End;//数据集中数据个数大于0
        Canvas.Font.Color := clRED;
        Canvas.Brush.Color:=clWhite;//clBlack;
        Canvas.Font.Size:=11;
        Canvas.Font.name:='宋体';
        TempString:=' 批温度记录查看器 V1.0, Designed by 黄春森, 2007.7';
        Canvas.TextOut(1,1,TempString);
     End;//数据集中数据个数大于0
End;

Procedure  TFormKXianMain.DrawLineSec(Sender: Tobject);
Var kpjg,spjg,zgjg,zdjg,PJJG:Integer;
Var x1,x2,y1,y2,x3,y3,x4,y4,PREAX,PREAY,AX,AY:Integer;
Var I,Kheight:Integer;
Var TempString,OutStr,TEMPSTR:String;
Var TempLen,StrLen:Integer;
VAR kWIDTH ,TMPT,KTMP:INTEGER;
VAR KXISHU :REAL;
Begin

with imagesec do
  begin
    If SecDayCount>0 Then
    Begin
      Canvas.Brush.Color:=clWhite;//clBLACK;
      Canvas.Brush.style:=bsSolid;
      Canvas.Pen.Style:=psSolid;
      Canvas.FillRect(Rect(0,TOPY,PaintWidth,PaintHeight));      //左边竖直线
       Canvas.Pen.Color:=clRED;//CLWHITE;//clred;
       Canvas.MoveTo(LeftX-1,Topy);
       Canvas.LineTo(LeftX-1,PaintHeight);   //上边水平线
       Canvas.MoveTo(0,TopY);
       Canvas.LineTo(PaintWidth,TopY);
       Canvas.MoveTo(0,TopY-2);
       Canvas.LineTo(PaintWidth,TopY-2);   //右边竖直线
       Canvas.MoveTo(PaintWidth-RightX,TopY);
       Canvas.LineTo(PaintWidth-RightX,PaintHeight);    //下边水平线
       Canvas.MoveTo(0,PaintHeight-BottomY);
       Canvas.LineTo(PaintWidth-RightX,PaintHeight-BottomY);
//画1/6线
       PageTopY:=Height-BottomY-topy;

       Canvas.Pen.Style:=psDot;
       Canvas.Pen.Color:=clMaroon;//CLGRAY;//
       Canvas.MoveTo(LeftX ,topy + Round(PageTopY/6));
       Canvas.LineTo(PaintWidth-RightX,topy + Round(PageTopY/6));
       Canvas.MoveTo(LeftX ,topy + Round(2*PageTopY/6));
       Canvas.LineTo(PaintWidth-RightX,topy + Round(2*PageTopY/6));
       Canvas.Pen.style:=psSolid;
       Canvas.MoveTo(LeftX ,topy + Round(3*PageTopY/6));
       Canvas.LineTo(PaintWidth-RightX,topy + Round(3*PageTopY/6));

       Canvas.Pen.style:=psDot;
       Canvas.MoveTo(LeftX ,topy + Round(4*PageTopY/6));
       Canvas.LineTo(PaintWidth-RightX,topy + Round(4*PageTopY/6));
       Canvas.MoveTo(LeftX ,topy + Round(5*PageTopY/6));
       Canvas.LineTo(PaintWidth-RightX,topy + Round(5*PageTopY/6));

       Canvas.FONT.size:=9;
       Canvas.FONT.COLOR:=CLRED;
       KWIDTH := PAINTWIDTH - LEFTX - RIGHTX;
       KTMP :=  SECLineData[SECRIGHTDATE].iFlag-SECLineData[SECLEFTDATE].iFlag;
       KXISHU := KTMP / ((SECRIGHTDATE-SECLEFTDATE)*(DEFAULTWIDTH ));

       TMPT := SECLineData[SECLEFTDATE].iFlag + ROUND(0*KXISHU);
       TempStr:=IntToStr(TMPT);
       Canvas.TextOut(LEFTX +1,PaintHeight-BottomY+1,TempStr);

       TMPT := SECLineData[SECLEFTDATE].iFlag + ROUND(KWIDTH/6*KXISHU);
       TempStr:=IntToStr(TMPT);
       Canvas.TextOut(LEFTX+ ROUND(KWIDTH/6)+1,PaintHeight-BottomY+1,TempStr);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH/6),PaintHeight-BottomY);


       TMPT := SECLineData[SECLEFTDATE].iFlag + ROUND(KWIDTH*2/6*KXISHU);
       TempStr:=IntToStr(TMPT);
       Canvas.TextOut(LEFTX+ ROUND(KWIDTH*2/6)+1,PaintHeight-BottomY+1,TempStr);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH*2/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH*2/6),PaintHeight-BottomY);

       TMPT := SECLineData[SECLEFTDATE].iFlag+ ROUND(KWIDTH*3/6*KXISHU);
       TempStr:=IntToStr(TMPT);
       Canvas.TextOut(LEFTX+ ROUND(KWIDTH*3/6)+1,PaintHeight-BottomY+1,TempStr);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH*3/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH*3/6),PaintHeight-BottomY);

       TMPT := SECLineData[SECLEFTDATE].iFlag + ROUND(KWIDTH*4/6*KXISHU);
       TempStr:=IntToStr(TMPT);
       Canvas.TextOut(LEFTX+ ROUND(KWIDTH*4/6)+1,PaintHeight-BottomY+1,TempStr);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH*4/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH*4/6),PaintHeight-BottomY);

       TMPT := SECLineData[SECLEFTDATE].iFlag + ROUND(KWIDTH*5/6*KXISHU);
       TempStr:=IntToStr(TMPT);
       Canvas.TextOut(LEFTX+ ROUND(KWIDTH*5/6)+1,PaintHeight-BottomY+1,TempStr);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH*5/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH*5/6),PaintHeight-BottomY);

       TMPT := SECLineData[SECLEFTDATE].iFlag + ROUND(KWIDTH*6/6*KXISHU);
       TempStr:=IntToStr(TMPT);
       Canvas.TextOut(LEFTX+ ROUND(KWIDTH*6/6)-20,PaintHeight-BottomY+1,TempStr);
       Canvas.FONT.COLOR:=CLRED;//ClWhite;
       Canvas.Pen.style:=psSolid;
       //求价格的最大、最小值
       SecMaxjg:=SecLineData[SecLeftDate].iMaxT;
       SecMinJg:=SECLineData[SecLeftDate].iMinT;
       I:=SecLeftDate;
       While (I<SecRightDate) Or (I=SecRightDate) Do
       Begin
           If SecLineData[I].iMaxT>SecMaxJg Then
              SecMaxJg:=SecLineData[I].iMaxT;
           If SecLineData[I].iMinT<SecMinJg Then
              SecMinJg:=SecLineData[I].iMinT;
           I:=I+1;
       End;
       if SecMaxjg = SecMinjg then            //
       begin
        IF SecMAXJG =0 THEN SecMAXJG := 1;
        SecMaxjg := round(SecMaxjg *1.25);
        SecMinjg := round(SecMinjg *0.75);
       end;
       //画右侧成交价格坐标数值
      OutStr:='.';
      Canvas.Font.Color := clRed;
      Canvas.Brush.Color:=clWhite;//clBlack;
      Canvas.Font.Size:=9;
      Canvas.Font.name:='宋体';
      Canvas.Brush.style:=bsSolid;
      Canvas.Pen.color:=clred;

      TempString :=FloatToStrF((SecMinJg+(SecMaxJg-SecMinJg)*0/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*6/6)-9,TempString);

      TempString :=FloatToStrF((SecMinJg+(SecMaxJg-SecMinJg)*1/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*5/6)-9,TempString);

      TempString :=FloatToStrF((SecMinJg+(SecMaxJg-SecMinJg)*2/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*4/6)-9,TempString);

      TempString :=FloatToStrF((SecMinJg+(SecMaxJg-SecMinJg)*3/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*3/6)-9,TempString);

      TempString :=FloatToStrF((SecMinJg+(SecMaxJg-SecMinJg)*4/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*2/6)-9,TempString);

      TempString :=FloatToStrF((SecMinJg+(SecMaxJg-SecMinJg)*5/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*1/6)+2,TempString);

      TempString :=FloatToStrF((SecMinJg+(SecMaxJg-SecMinJg)*6/6)/10,ffFixed, 5,1) ;
      Canvas.TextOut(PaintWidth-RightX+2,topy + Round(PageTopY*0/6)+2,TempString);
      //画K线图
       Kheight:=height-bottomy-TopY-10;
       SecHeightXiShu:=(SecMaxJg-SecMinJg)/Kheight;
       x1:=LeftX-DefaultWidth;
       I:=SecLeftDate;
       PJJG :=  SecLineData[I].iAvgT;

       PREAX := LEFTX;//Round((x1+x2)/2);
       PREAY := PageTopY-Round((PJJG-SecMinJg)/SecHeightXiShu)-2 +topy;

       While (I<SecRightDate) Or  (I=SecRightDate) Do
       Begin
           kpjg:=secLineData[I].iOpenT;
           spjg:=secLineData[I].iCloseT;
           zgjg:=secLineData[I].iMaxT;
           zdjg:=secLineData[I].iMinT;
           PJJG :=secLineData[I].iAvgT;

           x1:=x1+DefaultWidth;
           x2:=x1+DefaultWidth-1;
           x3:=Round((x1+x2)/2);
           x4:=x3;
           AX := X3;
           AY:=PageTopY-Round((PJJG-SECMinJg)/SecHeightXiShu)-2+topy;
           If spjg<kpjg Then
           Begin
               Canvas.Pen.Color:=clAqua;
               Canvas.Brush.Color:=clAqua;
               Canvas.Brush.style:=bsSolid;
               y3:=PageTopY-Round((zgjg-SecMinJg)/SecHeightXiShu)-2+topy;
               y1:=PageTopY-Round((kpjg-SecMinJg)/SecHeightXiShu)-2+topy;
               y2:=PageTopY-Round((spjg-SecMinJg)/SecHeightXiShu)-2+topy;
               y4:=PageTopY-Round((zdjg-SecMinJg)/SecHeightXiShu)-2+topy;
               If (y1=y2) Then
                  y2:=y2+1;
               If (zgjg=kpjg) Then
                   y3:=y1;
               If (zdjg=spjg) Then
                   y4:=y2;
               If (zgjg<>kpjg) And (y1=y3) Then
                   y3:=y3-1;
               If (zdjg<>spjg) And (y2=y4) Then
                   y4:=y4+1;
               Canvas.MoveTo(x3,y3);
               Canvas.LineTo(x3,y1);
               Canvas.FillRect(Rect(x1,y1,x2,y2));
               Canvas.MoveTo(x4,y2);
               Canvas.LineTo(x4,y4);
           End//收盘价小于开盘价,阴线
           Else
           Begin
               Canvas.Pen.Color:=clred;
               x2:=x2-1;
               y3:=PageTopY-Round((zgjg-SecMinJg)/SecHeightXiShu)-2+topy;
               y1:=PageTopY-Round((spjg-SecMinJg)/SecHeightXiShu)-2+topy;
               y2:=PageTopY-Round((kpjg-SecMinJg)/SecHeightXiShu)-2+topy;
               y4:=PageTopY-Round((zdjg-SecMinJg)/SecHeightXiShu)-2+topy;
               If (y1=y2) And (spjg<>kpjg) Then
                  y2:=y2+1;
               If (zdjg=kpjg) Then
                   y4:=y2;
               If (zgjg=spjg) Then
                   y3:=y1;
               If (zdjg<>kpjg) And (y2=y4) Then
                   y4:=y4+1;
               If (zgjg<>spjg) And (y1=y3) Then
                   y3:=y3-1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -