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

📄 kxianmain.~pas

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

             curTmp :=round(Fields.Fields[5].AsFloat *10);
             if  CurTmp >3000  then CurTmp:= lastTmp;
             if  CurTmp <-400  then CurTmp:= LastTmp;


             SecLineData[I].iOpenT:= curTmp;//OPEN
             MINT := CurTmp;
             MAXT := CurTmp;
             j :=0;
             AMT :=0;
             while (j <= MINSTEP -1)  AND (NOT adodtest.EOF) do
             begin
                  curTmp :=round(Fields.Fields[5].AsFloat *10);
                  if  CurTmp >3000  then CurTmp:= lastTmp;
                  if  CurTmp <-400  then CurTmp:= LastTmp;

                  IF MINT >CurTmp THEN   MINT := CurTmp;
                  IF MAXT <CurTmp THEN   MAXT := CurTmp;
                  SecLineData[I].iCloseT:= curTmp;   //CLOSE
                  AMT := AMT + SecLineData[I].iCloseT;
                  lastTmp := CurTmp;
                  j := j+1;
                  NEXT;
                end ;
                SecLineData[I].iMaxT:= MAXT; //High
                SecLineData[I].iMinT:= MINT; //Low
                SecLineData[i].dtDateTime := Fields.Fields[2].AsDateTime;
                SecLineData[I].iFlag:= minutesbetween(begintime, SecLineData[i].dtDateTime); //存放标识flag
                SecLineData[I].iAvgT:= ROUND(AMT/J);
                I :=I+1;
        END;
        close;
        SecDayCount := I;
  End
End;

Procedure  TFormKXianMain.DrawEMPTY(Sender: Tobject);
Var TempString:String;
VAR KWIDTH :INTEGER;
Begin
with ImageWork  do
    If DayCount<=0 Then
    Begin
      Canvas.Brush.Color:=clWhite;//clBLACK;
      Canvas.Brush.style:=bsSolid;
      Canvas.Pen.Style:=psSolid	;
      Canvas.Pen.Color:=clRed;//CLWHITE;//clMaroon;
      Canvas.FillRect(Rect(0,0,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:=PaintHeight-BottomY-topy;
       Canvas.Pen.Style:=psDot;
       Canvas.Pen.Color:=CLGRAY;//clMaroon;
       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));

       KWIDTH := PAINTWIDTH - LEFTX - RIGHTX;
       Canvas.MoveTo(LeftX + ROUND(KWIDTH/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH/6),PaintHeight-BottomY);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH*2/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH*2/6),PaintHeight-BottomY);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH*3/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH*3/6),PaintHeight-BottomY);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH*4/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH*4/6),PaintHeight-BottomY);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH*5/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH*5/6),PaintHeight-BottomY);

       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;

End;

Procedure  TFormKXianMain.DrawEMPTYSec(Sender: Tobject);
Var TempString:String;
VAR KWIDTH :INTEGER;
Begin
with imageSec do
    If SecDayCount<=0 Then
    Begin
        Canvas.Brush.Color:=clWhite;//clbLACK;
        Canvas.Brush.style:=bsSolid;
        Canvas.Pen.Style:=psSolid	;
        Canvas.Pen.Color:=clMaroon;
        Canvas.FillRect(Rect(0,0,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/3线
        PageTopY:=PaintHeight-BottomY-topy;
        Canvas.Pen.Style:=psDot;
        Canvas.Pen.Color:=CLGRAY;//clMaroon;
        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));

       KWIDTH := PAINTWIDTH - LEFTX - RIGHTX;
       Canvas.MoveTo(LeftX + ROUND(KWIDTH/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH/6),PaintHeight-BottomY);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH*2/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH*2/6),PaintHeight-BottomY);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH*3/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH*3/6),PaintHeight-BottomY);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH*4/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH*4/6),PaintHeight-BottomY);
       Canvas.MoveTo(LeftX + ROUND(KWIDTH*5/6),topy);
       Canvas.LineTo(LeftX + ROUND(KWIDTH*5/6),PaintHeight-BottomY);

        Canvas.Font.Color := clRED;
        Canvas.Brush.Color:=clBlack;
        Canvas.Font.Size:=9;
        Canvas.Font.name:='宋体';
        TempString:='标准对照';
        Canvas.TextOut(1,1,TempString);
     End;//数据集中数据个数大于0

End;


//画线的初始化
Procedure  TFormKXianMain.DrawLineInIt(Sender: Tobject);
Var li_cnt, li_num : integer;//计算总许可格子数
Begin
    If DayCount<=0 Then exit;

    BeginDate:=0;
    enddate :=daycount -1;
    li_cnt :=trunc(int((PaintWidth-RightX-leftx)/ DefaultWidth)) ;
    if currentX < leftx then CurrentX := LeftX + Round((DefaultWidth-1)/2);
    li_num := Trunc((CurrentX - leftx)/DefaultWidth+0.5);
    leftDate :=  CurrentDate - li_num;
    if leftDate <0 then leftDate :=0;
    RightDate := leftdate + li_cnt -1;
    if RightDate > endDate then RightDAte := endDate;
    CurrentX:=LeftX +(currentDate-LeftDate)*DefaultWidth + Round((DefaultWidth-1)/2);
End;

Procedure  TFormKXianMain.DrawLineInItSec(Sender: Tobject);
Var li_cnt, li_num : integer;//计算总许可格子数
Begin
    If SecDayCount<=0 Then exit;

    SecBeginDate:=0;
    SecEnddate :=SecDaycount -1;
    li_cnt :=trunc(int((PaintWidth-RightX-leftx)/ DefaultWidth)) ;
    if SeccurrentX < leftx then SecCurrentX := LeftX + Round((DefaultWidth-1)/2);
    li_num := Trunc((SecCurrentX - leftx)/DefaultWidth+0.5);
    SecLeftDate :=  SecDate - li_num;
    if SecLeftDate <0 then SecLeftDate :=0;
    SecRightDate := SecLeftdate + li_cnt -1;
    if SecRightDate > SecEndDate then SecRightDAte := SecEndDate;
    SecCurrentX:=LeftX +(SecDate-SecLeftDate)*DefaultWidth + Round((DefaultWidth-1)/2);
end;
//画线
Procedure  TFormKXianMain.EnlageLineInIt(Sender: Tobject; flag : integer);
var oldmsi , li_tmp:integer;
Var li_cnt : integer;//计算总许可格子数
Begin
   oldmsi :=0;
   If DayCount<=0 Then exit;
   if flag <0 then  oldmsi :=msi - 1;
   if flag >=0 then oldmsi :=msi+1;
   if msi <0 then msi :=0;
   if msi >length(ms)-1 then msi :=length(ms)-1;

   BeginDate:=0;
   EndDate:=DayCount-1;

   li_cnt :=trunc(int((PaintWidth-RightX-leftx)/ DefaultWidth))  ;

   currentDate:=round(currentDate*Ms[oldmsi]/MS[msi]); //计算当前位置
   if currentDate> Daycount-1 then currentDate :=Daycount -1;

   if DayCount <= Li_cnt then
   begin //总格子少时
        LeftDate :=0;
        RightDate :=EndDate;
   end
   else
   Begin  //总格子多时,放大或缩小后的当前格位置,紧接计算Leftdate和RightDate
        leftdate :=round(LeftDate*MS[oldmsi]/MS[msi]); //计算左边的起始位置
        if currentdate - leftDate > li_cnt-1 then  leftDate :=currentdate-li_cnt+1;
        RightDate := LeftDate +li_cnt-1;
        if RightDate > EndDate then
        begin
             li_tmp := RightDate - Enddate;
             RightDate := RightDate- li_tmp;
             Leftdate :=Leftdate -Li_tmp;
         end
   end;
   CurrentX:=LeftX +(currentDate-LeftDate)*DefaultWidth + Round((DefaultWidth-1)/2);
End;
Procedure  TFormKXianMain.EnlageLineInItSec(Sender: Tobject; flag : integer);
var oldmsi , li_tmp:integer;
Var li_cnt : integer;//计算总许可格子数
Begin
   oldmsi :=0;
   If SecDayCount<=0 Then exit;
   if flag <0 then  oldmsi :=msi - 1;
   if flag >=0 then oldmsi :=msi+1;
   if msi <0 then msi :=0;
   if msi >length(ms)-1 then msi :=length(ms)-1;

   SecBeginDate:=0;
   SecEndDate:=SecDayCount-1;
   li_cnt :=trunc(int((PaintWidth-RightX-leftx)/ DefaultWidth))  ;

   SecDate:=round(SecDate*Ms[oldmsi]/MS[msi]); //计算当前位置
   if SecDate> SecDaycount-1 then SecDate :=SecDaycount -1;

   if SecDayCount <= Li_cnt then
   begin //总格子少时
        SecLeftDate :=0;
        SecRightDate :=SecEndDate;
   end
   else
   Begin  //总格子多时,放大或缩小后的当前格位置,紧接计算Leftdate和RightDate
        Secleftdate :=round(SecLeftDate*MS[oldmsi]/MS[msi]); //计算左边的起始位置
        if SecDate - SecleftDate > li_cnt-1 then  SecleftDate :=Secdate-li_cnt+1;
        SecRightDate := SecLeftDate +li_cnt-1;
        if SecRightDate > SecEndDate then
        begin
             li_tmp := SecRightDate - SecEnddate;
             SecRightDate := SecRightDate- li_tmp;
             SecLeftdate :=SecLeftdate -Li_tmp;
         end
   end;
   SecCurrentX:=LeftX +(SecDate-SecLeftDate)*DefaultWidth + Round((DefaultWidth-1)/2);
End;

Procedure  TFormKXianMain.DrawLine(Sender: Tobject);
Var kpjg,spjg,zgjg,zdjg,PJJG:Integer;
Var x1,x2,y1,y2,x3,y3,x4,y4, AX,AY,PREAX,PREAY:Integer;
Var I,Kheight:Integer;
Var TempString,OutStr, TEMPSTR:String;
Var TempLen,StrLen:Integer;
VAR KWIDTH :INTEGER;
VAR KTMP,  TMPT: INTEGER;
VAR KXISHU :REAL;
Begin
with imageWork do
    If DayCount>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.COLOR:=CLRED;
       Canvas.FONT.SIZE:=9;

       KWIDTH := PAINTWIDTH - LEFTX - RIGHTX;

       KTMP :=  LineData[RIGHTDATE].iFlag-LineData[LEFTDATE].iFlag;
       KXISHU := KTMP / ((RIGHTDATE-LEFTDATE)*(DEFAULTWIDTH ));

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

       TMPT := LineData[LEFTDATE].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 := LineData[LEFTDATE].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 := LineData[LEFTDATE].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 := LineData[LEFTDATE].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);

⌨️ 快捷键说明

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