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

📄 kxianmain.~pas

📁 该系统将温度数据以类似股票K线显示方式进行分析
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:
               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;//收盘价大于开盘价,阳线

               Canvas.Pen.Color:=clBlack;//CLYELLOW;
               Canvas.MoveTo(PREAX,PREAY);
               Canvas.LineTo(AX,AY);
               PREAX := AX;
               PREAY := AY;
               I:=I+1;
       End;//画K线图
       if (SeclineData[SecleftDate].dtDateTime<=tRefTimeSec) and (SecLineData[SecrightDate].dtDateTime>= tRefTimeSec) then
       begin   //处理起始时间
            i:= leftDate;
            while (SecLineData[i].dtDateTime<tRefTimeSec) and (i<SecRightDate) do i :=i+1;
            Canvas.Pen.Color:=clRed;
            Canvas.pen.width :=2;
            X1:=LeftX +(i-SecLeftDate)*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:=' 参照批数据';
        Canvas.TextOut(1,1,TempString);
     End;
   end;
End;

//画活动日期的数据和线
Procedure  TFormKXianMain.DrawNowLine(Sender: Tobject);
Var TempStr:String;
var my,TEMPT,i :integer;
Begin
with ImageWork do
   If DayCount>0 Then
   Begin
        Canvas.Pen.Color:=clred;
        Canvas.Font.name:='宋体';
        Canvas.Font.Color := clRED;//clWhite;
        Canvas.Brush.Color:=clWhite;//clBlack;
        Canvas.Font.Size:= 9;
    //输出批号、控制点、分组信息
        Canvas.TextOut(1,TopY+2,'批号'+'--['+inttostr(batid)+'/'+inttostr(length(batchs))+']');
        Canvas.TextOut(1,TopY+20,CURRENTCODE );
        Canvas.TextOut(1,TopY+38,'控制点');
        Canvas.TextOut(1,TopY+56, '['+LineData[currentDate].sActorId +']' + LineData[currentdate].sActorName);
        Canvas.TextOut(1,TopY+74,'分组:[' + LineData[currentdate].sGroupName +']');

        Canvas.TextOut(1,TopY+94,'开始');
        TempStr :=FloatToStrF(LineData[CurrentDate].iOpenT/10,ffFixed, 5,1) ;
        Canvas.TextOut(41,TopY+94,TempStr);
   //输出最高价
        Canvas.TextOut(1,TopY+112,'最高');
        TempStr :=FloatToStrF(LineData[CurrentDate].iMaxT/10,ffFixed, 5,1) ;
        Canvas.TextOut(41,TopY+112,TempStr);
   //输出最低价
        Canvas.TextOut(1,TopY+130,'最低');
        TempStr :=FloatToStrF(LineData[CurrentDate].iMinT/10,ffFixed, 5,1) ;
        Canvas.TextOut(41,TopY+130,TempStr);
   //输出收盘价
        Canvas.TextOut(1,TopY+148,'结束');
        TempStr :=FloatToStrF(LineData[CurrentDate].iCloseT/10,ffFixed, 5,1) ;
        Canvas.TextOut(41,TopY+148,TempStr);

   //输出step
        TempStr := 'Step='+intToStr(ms[msi])+'Min';
        Canvas.TextOut(1,TopY+166,TempStr);
        TempStr := 'DefW='+intToStr(DefaultWidth)+'Pix';
        Canvas.TextOut(1,TopY+184,TempStr);

   //输出时间
        DateTimeToString(TempStr,'hh:mm',LineData[currentDate].dtDateTime);
        TempStr :='-' + TempStr +'-';
        Canvas.TextOut(1,TopY+212,TempStr);
   //输出日期
        DateTimeToString(TempStr,'yyyy-mm-dd',LineData[currentDate].dtDateTime);
        TempStr :='-' + TempStr +'-';
        Canvas.TextOut(1,TopY+232,TempStr);

        TempStr:='-第'+IntToStr(LineData[CurrentDate].iFlag)+'分钟-';
        Canvas.TextOut(1,TopY+262,TempStr);
   //输出开盘价
        Canvas.Pen.Color:=clBlue;//clwhite;
        Canvas.Brush.style:=bsSolid;

        Canvas.MoveTo(CurrentX,TopY);
        Canvas.LineTo(CurrentX,PaintHeight-BottomY); //

       IF MOUSEY > TOPY THEN
           IF MOUSEY < Height-BottomY THEN
                MY := MOUSEY
           ELSE
                MY := Height-BottomY -1
      ELSE
           MY := TOPY +1;

      canvas.MoveTo(leftx,my);
      canvas.lineTo( width  - RIGHTX, my);

      Canvas.Font.Color := clbLACK;//clWhite;
      TempStr :=IntToStr(LineData[currentDate].iFlag)+'Min' ;
      canvas.TextOut(currentX +2,topy +2, tempStr);
      TempT := round( minjg + heightXiShu *(Height-BottomY-my)) ;
      TempStr :=FloatToStrF(TempT/10,ffFixed, 5,1) ;
      canvas.TextOut(currentX +2,topy +14, tempStr);

      if (lineData[currentDate].dtDateTime>= tRefTimeWork) and (lineData[0].dtDateTime<= tRefTimeWork) then
      begin
        i:= MinutesBetween(tRefTimeWork,lineData[currentdate].dtDateTime);
        TempStr := IntToStr(i);
        canvas.TextOut(CurrentX +2,topy+26,TempStr+'Min');
      end;
 End;//DayCount>1
End;

Procedure  TFormKXianMain.DrawNowLineSec(Sender: Tobject);
Var TempStr:String;
VAR MY, TEMPT,i :INTEGER;
Begin
with imageSec do
   If SecDayCount>0 Then
   Begin
        Canvas.Pen.Color:=clred;
        Canvas.Font.Color := clRed;
        Canvas.Brush.Color:=clWhite;//clBlack;
        Canvas.Font.Size:= 10;
        Canvas.Font.name:='宋体';
   //输出时间
        DateTimeToString(TempStr,'hh:mm',SecLineData[SecDate].dtDateTime);
        TempStr :='-' + TempStr +'-';
        Canvas.TextOut(1,TopY+202,TempStr);
   //输出日期
        DateTimeToString(TempStr,'yyyy-mm-dd',SecLineData[SecDate].dtDateTime);
        TempStr :='-' + TempStr +'-';
        Canvas.TextOut(1,TopY+222,TempStr);

        TempStr:='-第'+IntToStr(SECLineData[SECDate].iFlag)+'分钟-';
        Canvas.TextOut(1,TopY+262,TempStr);
   //输出开盘价
        Canvas.TextOut(1,TopY+102,'开始');
        TempStr :=FloatToStrF(SecLineData[SECDate].iOpenT/10,ffFixed, 5,1) ;
        Canvas.TextOut(41,TopY+102,TempStr);
   //输出最高价
        Canvas.TextOut(1,TopY+122,'最高');
        TempStr :=FloatToStrF(SecLineData[SECDate].iMaxT/10,ffFixed, 5,1) ;
        Canvas.TextOut(41,TopY+122,TempStr);
   //输出最低价
        Canvas.TextOut(1,TopY+142,'最低');
        TempStr :=FloatToStrF(SecLineData[SECDate].iMinT/10,ffFixed, 5,1) ;
        Canvas.TextOut(41,TopY+142,TempStr);
   //输出收盘价
        Canvas.TextOut(1,TopY+162,'结束');
        TempStr :=FloatToStrF(SecLineData[SECDate].iCloseT/10,ffFixed, 5,1) ;
        Canvas.TextOut(41,TopY+162,TempStr);
   //输出批号、控制点、分组信息
        Canvas.Font.Color := clRED;////clWhite;
        Canvas.Brush.Color:=clWhite;//clBlack;
        Canvas.Font.Size:= 9;
        Canvas.TextOut(1,TopY+2,'批号');
        Canvas.TextOut(1,TopY+22,SecCurrentcode);
        Canvas.TextOut(1,TopY+42,'温度控制点');
        Canvas.TextOut(1,TopY+62, '['+SecLineData[SecDate].sActorId +']' + SecLineData[SecDate].sActorName);
        Canvas.TextOut(1,TopY+82,'分组:[' + SecLineData[SecDate].sGroupName +']');

        Canvas.Pen.Color:=clBlue;//clwhite;
        Canvas.Brush.style:=bsSolid;

        Canvas.MoveTo(SecCurrentX,TopY);
        Canvas.LineTo(SecCurrentX,PaintHeight-BottomY);

       IF SECMOUSEY > TOPY THEN
           IF SECMOUSEY < Height-BottomY THEN
                MY := SECMOUSEY
           ELSE
                MY := Height-BottomY -1
      ELSE
           MY := TOPY +1;

      canvas.MoveTo(leftx,my);
      canvas.lineTo( width  - RIGHTX, my);

      Canvas.Font.Color := clbLACK;//clWhite;
      TempStr :=IntToStr(SECLINEData[SECDate].iFlag) +'Min';

      canvas.TextOut(SECcurrentX +2,topy +2, tempStr);
      TempT := round( SECminjg + SECheightXiShu *(Height-BottomY-my)) ;

      TempStr :=FloatToStrF(TempT/10,ffFixed, 5,1) ;
      canvas.TextOut(SECcurrentX +2,topy +14, tempStr);
      if( SeclineData[SecDate].dtDateTime>= tRefTimeSec) and (SeclineData[0].dtDateTime<= tRefTimeSec) then
      begin
        i:= MinutesBetween(tRefTimeSec,SeclineData[Secdate].dtDateTime);
        TempStr := IntToStr(i);
        canvas.TextOut(SecCurrentX +2,topy+26,TempStr+'Min');
      end;
   End;//SecDayCount>1
End;

Procedure  TFormKXianMain.MoveLineLeft(Sender: Tobject);
Var CurrentNow:Integer;
VAR SECOLD, CURROLD :INTEGER;
Begin
  SECOLD := SECDATE;
  CURROLD := CURRENTDATE;

  If (CURROLD>BeginDate) and ( SECOLD  <= EndDate) Then
  Begin
     CurrentNow:=CurrentX;
     If CurrentDate<>LeftDate Then
        CurrentNow:=CurrentX-DefaultWidth
     Else
        Begin
        LeftDate:=LeftDate-1;
        RightDate:=RightDate-1;
        End;
     CurrentDate:=CurrentDate-1;
     CurrentX:=CurrentNow;
  End;

  If (SecOLD>SecBeginDate) and ( CurrOLD <= SecEndDate) Then
  Begin
     CurrentNow:=SecCurrentX;
     If SecDate<>SecLeftDate Then
        CurrentNow:=SecCurrentX-DefaultWidth
     Else
        Begin
        SecLeftDate:=SecLeftDate-1;
        SecRightDate:=SecRightDate-1;
        End;
     SecDate:=SecDate-1;
     SecCurrentX:=CurrentNow;
  End;
  DrawLine(EditCode);
  DrawNowLine(EditCode);
  DrawLineSec(EditCode);
  DrawNowLineSec(EditCode);

End;

Procedure  TFormKXianMain.MoveLineRight(Sender: Tobject);
Var CurrentNow:Integer;
Begin
   If CurrentDate<EndDate Then
  Begin
     CurrentNow:=CurrentX;
     If CurrentDate<>RightDate Then
        CurrentNow:=CurrentX+DefaultWidth
     Else
        Begin
        LeftDate:=LeftDate+1;
        RightDate:=RightDate+1;
        End;
     CurrentDate:=CurrentDate+1;
     CurrentX:=CurrentNow;

  End;
  If SecDate<SecEndDate Then
  Begin
     CurrentNow:=SecCurrentX;
     If SecDate<>SecRightDate Then
        CurrentNow:=SecCurrentX+DefaultWidth
     Else
        Begin
        SecLeftDate:=SecLeftDate+1;
        SecRightDate:=SecRightDate+1;
        End;
     SecDate:=SecDate+1;
     SecCurrentX:=CurrentNow;

  End;
     DrawLine(EditCode);
     DrawNowLine(EditCode);

     DrawLineSec(EditCode);
     DrawNowLineSec(EditCode);
End;

Procedure  TFormKXianMain.MoveLineHome(Sender: Tobject);
Begin
  If CurrentDate<>BeginDate Then
  Begin
     CurrentDate:=LeftDate;
     CurrentX:=LeftX+Round(DefaultWidth/2);
     DrawLine(EditCode);
     DrawNowLine(EditCode);
  End;
End;

Procedure  TFormKXianMain.MoveLineHomeSec(Sender: Tobject);
Begin
  If SecDate<>SecBeginDate Then
  Begin
     SecDate:=SecLeftDate;
     SecCurrentX:=LeftX+Round(DefaultWidth/2);
     DrawLineSec(EditCode);
     DrawNowLineSec(EditCode);
  End;
End;

Procedure  TFormKXianMain.MoveLineEnd(Sender: Tobject);
Var CurrentNow:Integer;
Begin
  If CurrentDate<>EndDate Then
  Begin
     CurrentNow:=CurrentX;
     While (CurrentDate<>RightDate) Do
        Begin
        CurrentNow:=CurrentNow+DefaultWidth;
        CurrentDate:=CurrentDate+1;
        End;
     CurrentX:=CurrentNow;
     DrawLine(EditCode);
     DrawNowLine(EditCode);
  End;
End;

Procedure  TFormKXianMain.MoveLineEndSec(Sender: Tobject);
Var CurrentNow:Integer;
Begin
  If SecDate<>SecEndDate Then
  Begin
     CurrentNow:=SecCurrentX;
     While (SecDate<>SecRightDate) Do
        Begin
        CurrentNow:=CurrentNow+DefaultWidth;
        SecDate:=SecDate+1;
        End;
     SecCurrentX:=CurrentNow;
     DrawLineSec(EditCode);
     DrawNowLineSec(EditCode);
  End;
End;

procedure TFormKXianMain.EditCode1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
Var TmpStr, sBatch :string;
begin
    Tmpstr := EditCode.Text;
    sBatch := TmpStr;

  If (key=VK_RETURN) And (sBatch<>CurrentCode) Then
  Begin
      CurrentCode:='';
      Editcode.Text :='';
      If batFind(sBatch)<>-1 Then
         CurrentCode:=batchs[batID]
      Else
      begin
         MessageDlg('批号不存在!', mtInformation,[mbOk], 0);
         drawempty(editcode);
      end;
      EditCode.Text:='';
      If CurrentCode<>'' Then
      Begin
        ReadData(EditCode);
        IF DAYCOUNT <=0 THEN DRAWEMPTY(EditCode)
        ELSE;
        BEGIN
              DrawLineInit(EditCode);
              DrawLine(EditCode);

⌨️ 快捷键说明

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