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