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