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

📄 kxianmain.~pas

📁 delphi写的读股票K线源代码
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
       I:=LeftDate;
       While (I<RightDate) Or  (I=RightDate) Do
       Begin
           kpjg:=DayData[1][I];
           spjg:=DayData[4][I];
           zgjg:=DayData[2][I];
           zdjg:=DayData[3][I];
           x1:=x1+DefaultWidth;
           x2:=x1+DefaultWidth-1;
           x3:=Round((x1+x2)/2);
           x4:=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;
               y1:=PageTopY-Round((kpjg-MinJg)/HeightXiShu)-2;
               y2:=PageTopY-Round((spjg-MinJg)/HeightXiShu)-2;
               y4:=PageTopY-Round((zdjg-MinJg)/HeightXiShu)-2;
               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-MinJg)/HeightXiShu)-2;
               y1:=PageTopY-Round((spjg-MinJg)/HeightXiShu)-2;
               y2:=PageTopY-Round((kpjg-MinJg)/HeightXiShu)-2;
               y4:=PageTopY-Round((zdjg-MinJg)/HeightXiShu)-2;
               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;//收盘价大于开盘价,阳线
              I:=I+1;
       End;//画K线图


     Canvas.Font.Color := clRed;
     Canvas.Brush.Color:=clBlack;
     Canvas.Font.Size:=11;
     Canvas.Font.name:='宋体';
     //输出证券名称
     TempString:=ZqjcData[ZqRecordNo];
     Canvas.TextOut(1,1,TempString);
     //输出基本信息
     TempString:='代码 ';
     TempString:=TempString+ZqdmData[ZqRecordNo]+' ';
     TempString:=TempString+'流通股本';
     TempString:=TempString+IntToStr(ZqltgbData[ZqRecordNo])+' ';
     Canvas.TextOut(LeftX+1,1,TempString);
     End;//数据集中数据个数大于0
End;

Procedure  TFormKXianMain.DrawNowLine(Sender: Tobject);
Var TempStr,OutStr:String;
Var TempLen,StrLen:Integer;
Begin
   If DayCount>0 Then
   Begin
   Canvas.Pen.Color:=clred;
   OutStr:='.';
   Canvas.Font.Color := clRed;
   Canvas.Brush.Color:=clBlack;
   Canvas.Font.Size:=11;
   Canvas.Font.name:='宋体';
   //输出日期
   TempStr:='-'+IntToStr(DayData[0][CurrentDate])+'-';
   Canvas.TextOut(2,PaintHeight-BottomY+1,TempStr);
   //输出开盘价
   TempStr:=IntToStr(DayData[1][CurrentDate]);
   TempLen:=Length(TempStr);
   Insert(OutStr,TempStr,TempLen-2);
   StrLen:=Length(TempStr);
   If TempStr[StrLen]='0' Then
      TempStr[StrLen]:=' ';
   Canvas.TextOut(1,TopY+1,'开盘');
   Canvas.TextOut(41,TopY+1,TempStr);
   //输出最高价
   TempStr:=IntToStr(DayData[2][CurrentDate]);
   TempLen:=Length(TempStr);
   Insert(OutStr,TempStr,TempLen-2);
   StrLen:=Length(TempStr);
   If TempStr[StrLen]='0' Then
      TempStr[StrLen]:=' ';
   Canvas.TextOut(1,TopY+21,'最高');
   Canvas.TextOut(41,TopY+21,TempStr);
   //输出最低价
   TempStr:=IntToStr(DayData[3][CurrentDate]);
   TempLen:=Length(TempStr);
   OutStr:='.';
   Insert(OutStr,TempStr,TempLen-2);
   StrLen:=Length(TempStr);
   If TempStr[StrLen]='0' Then
      TempStr[StrLen]:=' ';
   Canvas.TextOut(1,TopY+41,'最低');
   Canvas.TextOut(41,TopY+41,TempStr);
   //输出收盘价
   TempStr:=IntToStr(DayData[4][CurrentDate]);
   TempLen:=Length(TempStr);
   Insert(OutStr,TempStr,TempLen-2);
   StrLen:=Length(TempStr);
   If TempStr[StrLen]='0' Then
      TempStr[StrLen]:=' ';
   Canvas.TextOut(1,TopY+61,'收盘');
   Canvas.TextOut(41,TopY+61,TempStr);


   Canvas.MoveTo(LeftX-1,0);
   Canvas.LineTo(LeftX-1,PaintHeight);

   Canvas.Pen.Color:=clwhite;
   Canvas.Brush.style:=bsSolid;
   Canvas.MoveTo(CurrentX,TopY);
   Canvas.LineTo(CurrentX,PaintHeight-BottomY);

 End;//DayCount>1
End;


Procedure  TFormKXianMain.MoveLineLeft(Sender: Tobject);
Var CurrentNow:Integer;
Begin
  If CurrentDate>BeginDate 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;
     DrawLine(EditCode);
     DrawNowLine(EditCode);
  End;
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;
     DrawLine(EditCode);
     DrawNowLine(EditCode);
  End;
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.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.EditCodeKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
If (key=VK_RETURN) And (EditCode.Text<>CurrentCode) Then
   Begin
      CurrentCode:='';
      If ZqdmFind(EditCode.Text)<>-1 Then
         CurrentCode:=ZqdmData[ZqRecordNo]
      Else If ZqkjmFind(EditCode.Text)<>-1 Then
         CurrentCode:=ZqdmData[ZqRecordNo]
      Else
         MessageDlg('证券代码不存在,请重新输入!', mtInformation,[mbOk], 0);
      EditCode.Text:='';
      If CurrentCode<>'' Then
      Begin
      ReadData(EditCode);
      DrawLineInit(EditCode);
      DrawLine(EditCode);
      DrawNowLine(EditCode);
      End;
   End;
If (Key=VK_PRIOR) Then//Page Up key
   Begin
   If (ZqRecordNo=0) Then
      ZqRecordNo:=ZqRecordCount-1;
   ZqRecordNo:=ZqRecordNo-1;
   CurrentCode:=ZqdmData[ZqRecordNo];
   ReadData(EditCode);
   DrawLineInit(EditCode);
   DrawLine(EditCode);
   DrawNowLine(EditCode);
   End;
If (Key=VK_NEXT) Then//Page Down key
   Begin
   If (ZqRecordNo=(ZqRecordCount-1)) Then
      ZqRecordNo:=0;
   ZqRecordNo:=ZqRecordNo+1;
   CurrentCode:=ZqdmData[ZqRecordNo];
   ReadData(EditCode);
   DrawLineInit(EditCode);
   DrawLine(EditCode);
   DrawNowLine(EditCode);
   End;
If (Key=VK_DOWN) And (DefaultWidth>3) Then//Virtual key codes
   Begin
   DefaultWidth:=DefaultWidth-2;
   ReadData(EditCode);
   DrawLineInit(EditCode);
   DrawLine(EditCode);
   DrawNowLine(EditCode);
   End;
If (Key=VK_UP) And (DefaultWidth<50) Then
   Begin
   DefaultWidth:=DefaultWidth+2;
   ReadData(EditCode);
   DrawLineInit(EditCode);
   DrawLine(EditCode);
   DrawNowLine(EditCode);
   End;
If (Key=VK_HOME) Then
   MoveLineHome(EditCode);
If (Key=VK_END) Then
   MoveLineEnd(EditCode);
If (Key=VK_LEFT) Then
   MoveLineLeft(EditCode);
If (Key=VK_RIGHT) Then
   MoveLineRight(EditCode);
end;

procedure TFormKXianMain.PaintBoxMainPaint(Sender: TObject);
Begin
      If CurrentCode<>'' Then
      Begin
         ReadData(EditCode);
         DrawLineInit(EditCode);
         DrawLine(EditCode);
         DrawNowLine(EditCode);
      End;
end;


procedure TFormKXianMain.NTuiChuClick(Sender: TObject);
begin
   FormKXianMain.Close;
end;


procedure TFormKXianMain.NShuJuYuanSheZhiClick(Sender: TObject);
begin
   FormShuJuYuanSheZhi.ShowModal;
end;



procedure TFormKXianMain.PaintBoxMainMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Var DayNumber:Integer;
begin
     MouseX:=X;
     MouseY:=Y;
     If CurrentCode<>'' Then
     Begin
     If (X>CurrentX) Then
        Begin
        DayNumber:=Trunc((X-CurrentX)/DefaultWidth+0.5);
        If DayNumber>(RightDate-CurrentDate) Then
           DayNumber:=RightDate-CurrentDate;
        CurrentDate:=CurrentDate+DayNumber;
        CurrentX:=CurrentX+DayNumber*DefaultWidth;
        DrawLine(EditCode);
        DrawNowLine(EditCode);
        End
     Else If (X<CurrentX) Then
        Begin
        DayNumber:=Trunc((CurrentX-X)/DefaultWidth+0.5);
        If DayNumber>(CurrentDate-LeftDate) Then
           DayNumber:=CurrentDate-LeftDate;
        CurrentDate:=CurrentDate-DayNumber;
        CurrentX:=CurrentX-DayNumber*DefaultWidth;        
        DrawLine(EditCode);
        DrawNowLine(EditCode);
        End;
     End;

end;

end.

⌨️ 快捷键说明

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