📄 kxianmain.~pas
字号:
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 + -