hqchart 1.1.12513 → 1.1.12522

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5668,6 +5668,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5668
5668
 
5669
5669
  this.JSChartContainer=chart;
5670
5670
 
5671
+ if (option.DefaultCursor) chart.DefaultCursor=option.DefaultCursor;
5671
5672
  if (option.OnCreatedCallback) option.OnCreatedCallback(chart);
5672
5673
 
5673
5674
  //是否自动更新
@@ -6773,6 +6774,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6773
6774
  this.IsClickShowCorssCursor=false; //手势点击显示十字光标
6774
6775
  this.ChartSplashPaint=null; //等待提示
6775
6776
  this.LoadDataSplashTitle="数据加载中"; //下载数据提示信息
6777
+ this.DefaultCursor="default"; //crosshair , default 默认手型
6776
6778
 
6777
6779
  //绘图缓存
6778
6780
  this.CacheCanvas=null;
@@ -7252,7 +7254,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7252
7254
  event.Callback(event, sendData, this);
7253
7255
  this.CustomChartDrag=sendData.ChartDrag;
7254
7256
 
7255
- if (sendData.Cusrsor) this.UIElement.style.cursor=sendData.Cusrsor;
7257
+ this.SetCursor(sendData);
7256
7258
  }
7257
7259
 
7258
7260
  this.TryDragMove_CustomChartDrag=function(sendData)
@@ -7331,7 +7333,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7331
7333
  {
7332
7334
  if (item.Type==4)
7333
7335
  {
7334
- this.UIElement.style.cursor="pointer";
7336
+ //this.UIElement.style.cursor="pointer";
7337
+ this.SetCursor({Cursor:"pointer"});
7335
7338
  var obj={ X:e.clientX };
7336
7339
  if (this.GetXDataIndex(obj))
7337
7340
  {
@@ -7341,7 +7344,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7341
7344
  }
7342
7345
  else
7343
7346
  {
7344
- this.UIElement.style.cursor="ew-resize";
7347
+ //this.UIElement.style.cursor="ew-resize";
7348
+ this.SetCursor({Cursor:"ew-resize"});
7345
7349
  this.RectSelectDrag={ Index:item.PointIndex, Type:item.Type };
7346
7350
  JSConsole.Chart.Log("[JSChartContainer::UIOnMouseDown] drag rect select ",item);
7347
7351
  }
@@ -7355,7 +7359,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7355
7359
  var dragBorder=this.Frame.PtInFrameBorder(x,y);
7356
7360
  if (dragBorder && dragBorder.Index>=0)
7357
7361
  {
7358
- this.UIElement.style.cursor="n-resize";
7362
+ //this.UIElement.style.cursor="n-resize";
7363
+ this.SetCursor({Cursor:"n-resize"});
7359
7364
  this.BorderDrag={ Index:dragBorder.Index };
7360
7365
  JSConsole.Chart.Log("[JSChartContainer::UIOnMouseDown] DragBorder ",dragBorder);
7361
7366
  }
@@ -7367,7 +7372,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7367
7372
  var dragY=this.TryYDrag(x,y);
7368
7373
  if (dragY)
7369
7374
  {
7370
- this.UIElement.style.cursor=dragY.Position==0 ? "n-resize":"row-resize";
7375
+ //this.UIElement.style.cursor=dragY.Position==0 ? "n-resize":"row-resize";
7376
+ var cursor=dragY.Position==0 ? "n-resize":"row-resize";
7377
+ this.SetCursor({Cursor:cursor});
7371
7378
  this.YDrag=dragY;
7372
7379
  JSConsole.Chart.Log("[JSChartContainer::UIOnMouseDown] dragY ",dragY);
7373
7380
  }
@@ -7376,7 +7383,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7376
7383
  var dragUpDown=this.TryUpDownDrag(x,y);
7377
7384
  if (dragUpDown)
7378
7385
  {
7379
- this.UIElement.style.cursor="pointer";
7386
+ //this.UIElement.style.cursor="pointer";
7387
+ this.SetCursor({Cursor:"pointer"});
7380
7388
  this.UpDownDrag=dragUpDown;
7381
7389
  JSConsole.Chart.Log("[JSChartContainer::UIOnMouseDown] dragUpDown ",dragUpDown);
7382
7390
  }
@@ -7699,8 +7707,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7699
7707
 
7700
7708
  if (moveSetp<5 && yMoveSetp<5) return;
7701
7709
 
7702
- this.UIElement.style.cursor="default";
7703
-
7710
+ //this.UIElement.style.cursor="default";
7711
+ this.SetCursor({Cursor:"default"});
7704
7712
  var x=drag.Click.X-uielement.getBoundingClientRect().left;
7705
7713
  var y=drag.Click.Y-uielement.getBoundingClientRect().top;
7706
7714
  var x2=e.clientX-uielement.getBoundingClientRect().left;
@@ -7729,7 +7737,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7729
7737
  {
7730
7738
  var yMove=e.clientY-drag.LastMove.Y;
7731
7739
  JSConsole.Chart.Log("[JSChartContainer::OnDragMode_One] UpDownDrag ",this.UpDownDrag,yMove);
7732
- this.UIElement.style.cursor="pointer";
7740
+ //this.UIElement.style.cursor="pointer";
7741
+ this.SetCursor({Cursor:"pointer"});
7733
7742
  if (this.OnUpDonwFrameY(this.UpDownDrag, yMove))
7734
7743
  {
7735
7744
  bNeedDraw=true;
@@ -7776,7 +7785,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7776
7785
  var oneStepWidth=this.GetMoveOneStepWidth();
7777
7786
  if (moveSetp<oneStepWidth)
7778
7787
  {
7779
- this.UIElement.style.cursor=cursorStatus;
7788
+ //this.UIElement.style.cursor=cursorStatus;
7789
+ this.SetCursor({Cursor:cursorStatus});
7780
7790
  if (bNeedDraw) this.Draw();
7781
7791
  return;
7782
7792
  }
@@ -7806,7 +7816,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7806
7816
  if (this.DragDownloadData) this.DragDownloadData();
7807
7817
  }
7808
7818
  }
7809
- this.UIElement.style.cursor=cursorStatus;
7819
+ //this.UIElement.style.cursor=cursorStatus;
7820
+ this.SetCursor({Cursor:cursorStatus});
7810
7821
  }
7811
7822
  drag.LastMove.X=e.clientX;
7812
7823
  }
@@ -7874,7 +7885,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7874
7885
  var chartMove=this.GetExtendChartByClassName("DragMovePaint");
7875
7886
  if (chartMove && chartMove.Chart) chartMove.Chart.Clear();
7876
7887
  if (!this.OnDragChart(this.IndexChartDrag)) this.DrawDynamicInfo();
7877
- this.UIElement.style.cursor="default";
7888
+ //this.UIElement.style.cursor="default";
7889
+ this.SetCursor({Cursor:"default"});
7878
7890
  }
7879
7891
  else if (this.CustomChartDrag)
7880
7892
  {
@@ -7964,7 +7976,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7964
7976
  //清空数据
7965
7977
  JSConsole.Chart.Log('[KLineChartContainer::document.onmouseup]',e);
7966
7978
  if (this.SelectChartDrawPicture) this.SelectChartDrawPicture.DragInfo=null;
7967
- this.UIElement.style.cursor="default";
7979
+ //this.UIElement.style.cursor="default";
7980
+ this.SetCursor({Cursor:"default"});
7968
7981
  this.MouseDrag=null;
7969
7982
  this.ClickDownPoint=null;
7970
7983
  this.IsOnTouch=false;
@@ -9799,7 +9812,6 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9799
9812
  var frameID=this.Frame.PtInFrame(x,y);
9800
9813
  if (IFrameSplitOperator.IsNumber(frameID) && frameID>=0) //在K线内部移动,调整K线索引
9801
9814
  this.CursorIndex=this.Frame.GetXData(x);
9802
-
9803
9815
 
9804
9816
 
9805
9817
  if (this.EnableBorderDrag && this.Frame && !this.CurrentChartDrawPicture)
@@ -9922,13 +9934,13 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9922
9934
 
9923
9935
  if (drawPictrueData.PointIndex===100)
9924
9936
  {
9925
- if (drawPictrueData.Cursor) this.UIElement.style.cursor=drawPictrueData.Cursor;
9926
- else this.UIElement.style.cursor="move";
9937
+ if (drawPictrueData.Cursor) this.SetCursor(drawPictrueData); //this.UIElement.style.cursor=drawPictrueData.Cursor;
9938
+ else this.SetCursor({Cursor:"move"}); //this.UIElement.style.cursor="move";
9927
9939
  }
9928
9940
  else
9929
9941
  {
9930
- if (drawPictrueData.Cursor) this.UIElement.style.cursor=drawPictrueData.Cursor
9931
- else this.UIElement.style.cursor="pointer";
9942
+ if (drawPictrueData.Cursor) this.SetCursor(drawPictrueData); //this.UIElement.style.cursor=drawPictrueData.Cursor
9943
+ else this.SetCursor({Cursor:"pointer"}); //this.UIElement.style.cursor="pointer";
9932
9944
  }
9933
9945
 
9934
9946
  bDrawPicture=true;
@@ -9936,7 +9948,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9936
9948
  }
9937
9949
  else
9938
9950
  {
9939
- if (!this.MouseDrag) this.UIElement.style.cursor="default";
9951
+ if (!this.MouseDrag) this.SetCursor({Cursor:"default"}); //this.UIElement.style.cursor="default";
9940
9952
  }
9941
9953
  }
9942
9954
 
@@ -9959,7 +9971,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9959
9971
  this.DrawDynamicInfo(option);
9960
9972
  }
9961
9973
 
9962
- if (mouseStatus) this.UIElement.style.cursor=mouseStatus.Cursor;
9974
+ this.SetCursor(mouseStatus);
9963
9975
 
9964
9976
  if (this.IsShowTooltip && bDrawPicture==false)
9965
9977
  {
@@ -9987,6 +9999,17 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9987
9999
  }
9988
10000
  }
9989
10001
 
10002
+ //设置鼠标形状 {Cursor:鼠标形状 }
10003
+ this.SetCursor=function(obj)
10004
+ {
10005
+ if (!obj || !obj.Cursor) return;
10006
+
10007
+ if (obj.Cursor=="default")
10008
+ this.UIElement.style.cursor=this.DefaultCursor;
10009
+ else
10010
+ this.UIElement.style.cursor=obj.Cursor;
10011
+ }
10012
+
9990
10013
  this.OnKeyDown=function(e)
9991
10014
  {
9992
10015
  if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash == true) return;
@@ -12740,6 +12763,7 @@ function CoordinateInfo()
12740
12763
  this.Value; //坐标数据
12741
12764
  this.Message=[]; //坐标输出文字信息 0=左 1=右 2=内左 3=内右
12742
12765
  this.TextColor=g_JSChartResource.FrameSplitTextColor //文字颜色
12766
+ this.TextBGColor; //文字背景色
12743
12767
  this.TextColor2; //右侧文字颜色,空使用TextColor
12744
12768
  this.Font=g_JSChartResource.FrameSplitTextFont; //字体
12745
12769
  this.LineColor=g_JSChartResource.FrameSplitPen; //线段颜色
@@ -14252,9 +14276,10 @@ function AverageWidthFrame()
14252
14276
  this.Canvas.font=this.VerticalInfo[i].Font;
14253
14277
 
14254
14278
  var textLeft=0;
14255
- this.Canvas.fillStyle=item.TextColor;
14279
+
14256
14280
  this.Canvas.strokeStyle=item.TextColor;
14257
14281
  var testWidth=this.Canvas.measureText(this.VerticalInfo[i].Message[0]).width;
14282
+ var textHeight=this.Canvas.measureText("擎").width;
14258
14283
  if (x<testWidth/2)
14259
14284
  {
14260
14285
  this.Canvas.textAlign="left";
@@ -14288,6 +14313,15 @@ function AverageWidthFrame()
14288
14313
  yText+=lineLength+2*pixelRatio;
14289
14314
  }
14290
14315
 
14316
+ //item.TextBGColor="rgb(0,255,0)";
14317
+ if (item.TextBGColor) //文字背景色
14318
+ {
14319
+ var rtText={ Left:textLeft, Top:yText+this.XBottomOffset, Width:testWidth, Height:textHeight };
14320
+ this.Canvas.fillStyle=item.TextBGColor;
14321
+ this.Canvas.fillRect(rtText.Left-1, rtText.Top, rtText.Width+2, rtText.Height);
14322
+ }
14323
+
14324
+ this.Canvas.fillStyle=item.TextColor;
14291
14325
  this.Canvas.fillText(this.VerticalInfo[i].Message[0],x,yText+this.XBottomOffset);
14292
14326
  textRightPrev=textLeft+testWidth;
14293
14327
  }
@@ -33061,6 +33095,7 @@ function ChartStick()
33061
33095
  this.Draw=function()
33062
33096
  {
33063
33097
  if (!this.IsShow || this.ChartFrame.IsMinSize) return;
33098
+ if (this.IsHideScriptIndex()) return;
33064
33099
 
33065
33100
  if (this.NotSupportMessage)
33066
33101
  {
@@ -33086,6 +33121,8 @@ function ChartLineStick()
33086
33121
  this.Draw=function()
33087
33122
  {
33088
33123
  if (!this.IsShow || this.ChartFrame.IsMinSize) return;
33124
+ if (this.IsShowIndexTitleOnly()) return;
33125
+ if (this.IsHideScriptIndex()) return;
33089
33126
 
33090
33127
  if (this.NotSupportMessage)
33091
33128
  {
@@ -43614,7 +43651,7 @@ function DrawToolsButton()
43614
43651
  { HTML: { Title: 'M头W底', IClass: 'iconfont icon-draw_wavemw', ID: 'icon-wavemw' }, Name: 'M头W底' },
43615
43652
  { HTML: { Title: '头肩型', IClass: 'iconfont icon-draw_head_shoulders_bt', ID: 'icon-Head-Shoulders' }, Name: '头肩型' },
43616
43653
  { HTML: { Title: '波浪尺', IClass: 'iconfont icon-waveruler', ID: 'icon-wave-ruler' }, Name: '波浪尺' },
43617
- { HTML: { Title: 'AB波浪尺', IClass: 'iconfont icon-waveruler', ID: 'icon-wave-ruler' }, Name: 'AB波浪尺' },
43654
+ { HTML: { Title: 'AB波浪尺', IClass: 'iconfont icon-waveruler', ID: 'icon-wave-ruler2' }, Name: 'AB波浪尺' },
43618
43655
  { HTML: { Title: '箱型线', IClass: 'iconfont icon-draw_box', ID: 'icon-drawbox' }, Name: '箱型线' },
43619
43656
  { HTML: { Title: '涂鸦线段', IClass: 'iconfont icon-draw_line', ID: 'icon-segment2' }, Name: '涂鸦线段' },
43620
43657
 
@@ -48802,6 +48839,7 @@ function FrameSplitMinuteX()
48802
48839
  info.Value=item[0];
48803
48840
  if (this.ShowText) info.Message[0]=item[3];
48804
48841
  if (item[4]) info.LineColor=item[4]; //线段颜色
48842
+ if (item[5]) info.TextBGColor=item[5]; //文字背景色
48805
48843
  this.Frame.VerticalInfo[i]=info;
48806
48844
  }
48807
48845
  }
@@ -52596,7 +52634,8 @@ function DynamicMinuteTitlePainting()
52596
52634
 
52597
52635
  if (beforeItem && dataItem) //盘前数据
52598
52636
  {
52599
- if (beforeItem.Date>dataItem.Date || (beforeItem.Date==dataItem.Date && beforeItem.Time>dataItem.Time && afterDataVer==1.0) )
52637
+ if (beforeItem.Date>dataItem.Date || (beforeItem.Date==dataItem.Date && beforeItem.Time>dataItem.Time && beforeDataVer==1.0)
52638
+ || (beforeItem.Date==dataItem.Date && parseInt(beforeItem.Time>dataItem.Time) && beforeDataVer==2.0))
52600
52639
  return { Type:2, Data:beforeItem, Ver: beforeDataVer, Explain:beforeExplain};
52601
52640
  }
52602
52641
 
@@ -56010,7 +56049,9 @@ IChartDrawPicture.ArrayDrawPricture=
56010
56049
  { Name:"AnchoredText", ClassName:"ChartDrawAnchoredText", Create:function() { return new ChartDrawAnchoredText();} },
56011
56050
  { Name:"PriceLabel", ClassName:"ChartDrawPriceLabel", Create:function() { return new ChartDrawPriceLabel();} },
56012
56051
  { Name:"PriceNote", ClassName:"ChartDrawPriceNote", Create:function() { return new ChartDrawPriceNote();} },
56013
- { Name:"FibWedge", ClassName:"ChartDrawFibWedge", Create:function(){ return new ChartDrawFibWedge(); }}
56052
+ { Name:"FibWedge", ClassName:"ChartDrawFibWedge", Create:function(){ return new ChartDrawFibWedge(); }},
56053
+ { Name:"FibRetracement", ClassName:"ChartFibRetracement", Create:function() { return new ChartFibRetracement(); }}, //斐波那契回测
56054
+ { Name:"FibSpeedResistanceFan", ClassName:"ChartFibSpeedResistanceFan", Create:function() { return new ChartFibSpeedResistanceFan(); }} //斐波那契扇形
56014
56055
  ];
56015
56056
 
56016
56057
  IChartDrawPicture.MapIonFont=new Map(
@@ -58281,7 +58322,7 @@ function ChartDrawPictureParallelChannel()
58281
58322
  var ptCenter=new Point();
58282
58323
  ptCenter.X=linePoint.Start.X+(linePoint.End.X-linePoint.Start.X)/2;
58283
58324
  ptCenter.Y=linePoint.Start.Y+(linePoint.End.Y-linePoint.Start.Y)/2;
58284
- drawPoint[3]=ptCenter;
58325
+ drawPoint[2]=ptCenter;
58285
58326
 
58286
58327
  this.Point[2]=ptCenter;
58287
58328
  var xValue=parseInt(this.Frame.GetXData(ptCenter.X))+data.DataOffset;
@@ -58714,6 +58755,7 @@ function ChartDrawPictureGannFan()
58714
58755
  else return 3;
58715
58756
  }
58716
58757
 
58758
+
58717
58759
  //isDotline 是否是虚线
58718
58760
  this.DrawLine=function(ptStart,ptEnd,isDottedline)
58719
58761
  {
@@ -63493,6 +63535,423 @@ function ChartDrawFibWedge()
63493
63535
 
63494
63536
  }
63495
63537
 
63538
+ //////////////////////////////////////////////////////////////////////////////
63539
+ // 斐波那契回测
63540
+ //
63541
+ function ChartFibRetracement()
63542
+ {
63543
+ this.newMethod=IChartDrawPicture; //派生
63544
+ this.newMethod();
63545
+ delete this.newMethod;
63546
+
63547
+ this.ClassName='ChartFibRetracement';
63548
+ this.PointCount=2;
63549
+ this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
63550
+ this.IsPointIn=this.IsPointIn_XYValue_Line;
63551
+ this.GetXYCoordinate=this.GetXYCoordinate_default;
63552
+ this.PointToValue_Default=this.PointToValue;
63553
+ this.OnlyMoveXIndex=true;
63554
+ this.IsSupportMagnet=true;
63555
+ this.LineDash=[6,3];
63556
+ this.LineWidth=1;
63557
+ this.EnableBGColor=true;
63558
+ this.ExtendLine={ Left:false, Right: false }; //延长线
63559
+
63560
+ this.AreaConfig=
63561
+ {
63562
+ AryData:
63563
+ [
63564
+ { Value: 0, Color:"rgb(128,128,128)", Enable:true },
63565
+ { Value: 0.236, Color:"rgb(242,52,69)", Enable:true },
63566
+ { Value: 0.382, Color:"rgb(255,152,0)",Enable:true },
63567
+ { Value: 0.5, Color:"rgb(76,175,80)", Enable:true },
63568
+ { Value: 0.618, Color:"rgb(8,153,129)", Enable:true },
63569
+ { Value: 0.786, Color:"rgb(0,188,212)" ,Enable:true },
63570
+ { Value: 1, Color:"rgb(120,123,134)", Enable:true },
63571
+ { Value: 1.618, Color:"rgb(41,98,255)",Enable:true },
63572
+ { Value: 2.618, Color:"rgb(242,54,69)",Enable:false },
63573
+ ],
63574
+
63575
+ Opacity:0.3
63576
+ }
63577
+
63578
+ this.SetOption=function(option)
63579
+ {
63580
+ if (!option) return;
63581
+
63582
+ if (option.Font) this.Font=option.Font;
63583
+ if (option.LineWidth) this.LineWidth=option.LineWidth;
63584
+ if (option.LineDash) this.LineDash=option.LineDash;
63585
+ if (IFrameSplitOperator.IsBool(option.EnableBGColor)) this.EnableBGColor=option.EnableBGColor;
63586
+ if (option.ExtendLine)
63587
+ {
63588
+ var item=option.ExtendLine;
63589
+ if (IFrameSplitOperator.IsBool(item.Left)) this.ExtendLine.Left=item.Left;
63590
+ if (IFrameSplitOperator.IsBool(item.Right)) this.ExtendLine.Left=item.Right;
63591
+ }
63592
+
63593
+ if (option.AreaConfig) this.AreaConfig=option.AreaConfig;
63594
+ }
63595
+
63596
+ //导出成存储格式
63597
+ this.ExportStorageData=function()
63598
+ {
63599
+ var storageData=this.ExportBaseData();
63600
+
63601
+ storageData.Value=[];
63602
+ for(var i=0;i<this.Value.length && i<this.PointCount;++i)
63603
+ {
63604
+ var item=this.Value[i];
63605
+ storageData.Value.push( { XValue:item.XValue, YValue:item.YValue } );
63606
+ }
63607
+
63608
+ storageData.Font=this.Font;
63609
+ storageData.EnableBGColor=this.EnableBGColor;
63610
+ storageData.LineDash=this.LineDash;
63611
+ storageData.ExtendLine={ Left:this.ExtendLine.Left, Right:this.ExtendLine.Right };
63612
+ storageData.AreaConfig=CloneData(this.AreaConfig);
63613
+
63614
+ return storageData;
63615
+ }
63616
+
63617
+ this.ImportStorageData=function(storageData)
63618
+ {
63619
+ if (storageData.Font) this.Font=storageData.Font;
63620
+ if (storageData.LineDash) this.LineDash=storageData.LineDash;
63621
+ if (IFrameSplitOperator.IsBool(storageData.EnableBGColor)) this.EnableBGColor=storageData.EnableBGColor;
63622
+ if (storageData.ExtendLine) this.ExtendLine=storageData.ExtendLine;
63623
+ if (storageData.AreaConfig) this.AreaConfig=storageData.AreaConfig;
63624
+ }
63625
+
63626
+ this.Draw=function()
63627
+ {
63628
+ this.LinePoint=[];
63629
+ if (this.IsFrameMinSize()) return;
63630
+ var bCheckXY=true;
63631
+ if (this.ExtendLine.Left || this.ExtendLine.Right) bCheckXY=false;
63632
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
63633
+ if (!drawPoint) return;
63634
+ if (drawPoint.length!=2) return;
63635
+
63636
+ this.ClipFrame();
63637
+
63638
+ var ptStart=drawPoint[0];
63639
+ var ptEnd=drawPoint[1];
63640
+
63641
+ this.SetLineWidth();
63642
+ this.Canvas.strokeStyle=this.LineColor;
63643
+ this.Canvas.setLineDash(this.LineDash);
63644
+ this.Canvas.beginPath();
63645
+ this.Canvas.moveTo(ptStart.X,ptStart.Y);
63646
+ this.Canvas.lineTo(ptEnd.X,ptEnd.Y);
63647
+ this.Canvas.stroke();
63648
+ this.Canvas.setLineDash([]);
63649
+
63650
+ this.DrawBlock(ptStart, ptEnd);
63651
+
63652
+ this.RestoreLineWidth();
63653
+
63654
+ var line={Start:ptStart, End:ptEnd};
63655
+ this.LinePoint.push(line);
63656
+
63657
+ this.DrawPoint(drawPoint); //画点
63658
+ this.Canvas.restore();
63659
+ }
63660
+
63661
+ this.GetArrayAreaConfig=function()
63662
+ {
63663
+ var aryArea=[];
63664
+ for(var i=0;i<this.AreaConfig.AryData.length;++i)
63665
+ {
63666
+ var item=this.AreaConfig.AryData[i];
63667
+ if (item.Enable) aryArea.push(item);
63668
+ }
63669
+
63670
+ aryArea.sort((left,right)=>{ return right.Value-left.Value; })
63671
+
63672
+ return aryArea;
63673
+ }
63674
+
63675
+ this.DrawBlock=function(ptStart, ptEnd)
63676
+ {
63677
+ var yTop=Math.min(ptStart.Y, ptEnd.Y);
63678
+ var yBottom=Math.max(ptStart.Y, ptEnd.Y);
63679
+ var xLeft=Math.min(ptStart.X, ptEnd.X);
63680
+ var xRight=Math.max(ptStart.X, ptEnd.X);
63681
+ var height=yBottom-yTop;
63682
+ //var baseValue=Math.min(this.Value[0].YValue, this.Value[1].YValue);
63683
+ //var diffValue=Math.abs(this.Value[0].YValue-this.Value[1].YValue); //差值
63684
+
63685
+ if (this.ExtendLine.Right) xRight=this.Frame.ChartBorder.GetRight();
63686
+ if (this.ExtendLine.Left) xLeft=this.Frame.ChartBorder.GetLeft();
63687
+
63688
+ var aryArea=this.GetArrayAreaConfig();
63689
+ var yPre=null; //上一个点
63690
+ var clrArea=null;
63691
+ this.Canvas.font=this.Font;
63692
+ if (this.ExtendLine.Left) this.Canvas.textAlign="left";
63693
+ else this.Canvas.textAlign="right";
63694
+ this.Canvas.textBaseline="bottom";
63695
+
63696
+ for(var i=0;i<aryArea.length;++i)
63697
+ {
63698
+ var item=aryArea[i];
63699
+ var y=yBottom-height*item.Value;
63700
+ //var yValue=baseValue+diffValue*item.Value;
63701
+ yValue=this.Frame.GetYData(y,false);
63702
+ y=ToFixedPoint(y);
63703
+ if (this.EnableBGColor && IFrameSplitOperator.IsNumber(yPre))
63704
+ {
63705
+ var rtBG={ Left:xLeft, Right:xRight, Top:yPre, Bottom:y };
63706
+ rtBG.Width=rtBG.Right-rtBG.Left;
63707
+ rtBG.Height=rtBG.Bottom-rtBG.Top;
63708
+ this.Canvas.fillStyle=clrArea;
63709
+ this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
63710
+ }
63711
+
63712
+ this.Canvas.strokeStyle=item.Color;
63713
+ this.Canvas.beginPath();
63714
+ this.Canvas.moveTo(xLeft,y);
63715
+ this.Canvas.lineTo(xRight,y);
63716
+ this.Canvas.stroke();
63717
+
63718
+ var line={ Start:{X:xLeft, Y:y}, End:{X:xRight, Y:y} };
63719
+ this.LinePoint.push(line);
63720
+
63721
+ //文字
63722
+ var text=`${item.Value} (${yValue.toFixed(2)})`;
63723
+ this.Canvas.fillStyle=item.Color;
63724
+ if (this.ExtendLine.Left)
63725
+ this.Canvas.fillText(text,xLeft+2,y-2);
63726
+ else
63727
+ this.Canvas.fillText(text,xLeft-2,y-2);
63728
+
63729
+ yPre=y;
63730
+ clrArea=IChartDrawPicture.ColorToRGBA(item.Color, this.AreaConfig.Opacity);
63731
+ }
63732
+ }
63733
+
63734
+ }
63735
+
63736
+
63737
+ function ChartFibSpeedResistanceFan()
63738
+ {
63739
+ this.newMethod=IChartDrawPicture; //派生
63740
+ this.newMethod();
63741
+ delete this.newMethod;
63742
+
63743
+ this.ClassName='ChartFibSpeedResistanceFan';
63744
+ this.PointCount=2;
63745
+ this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
63746
+ this.IsPointIn=this.IsPointIn_XYValue_Line;
63747
+ this.GetXYCoordinate=this.GetXYCoordinate_default;
63748
+ this.PointToValue_Default=this.PointToValue;
63749
+ this.OnlyMoveXIndex=true;
63750
+ this.IsSupportMagnet=true;
63751
+ this.LineWidth=1;
63752
+ this.EnableBGColor=true;
63753
+
63754
+ this.AreaConfig=
63755
+ {
63756
+ AryYData:
63757
+ [
63758
+ { Value: 0, Color:"rgb(128,128,128)", Enable:true },
63759
+ { Value: 0.25, Color:"rgb(242,52,69)", Enable:true },
63760
+ { Value: 0.382, Color:"rgb(255,152,0)",Enable:true },
63761
+ { Value: 0.5, Color:"rgb(76,175,80)", Enable:true },
63762
+ { Value: 0.618, Color:"rgb(8,153,129)", Enable:true },
63763
+ { Value: 0.75, Color:"rgb(0,188,212)" ,Enable:true },
63764
+ { Value: 1, Color:"rgb(120,123,134)", Enable:true },
63765
+
63766
+ ],
63767
+
63768
+ AryXData:
63769
+ [
63770
+ { Value: 0, Color:"rgb(128,128,128)", Enable:true },
63771
+ { Value: 0.25, Color:"rgb(242,52,69)", Enable:true },
63772
+ { Value: 0.382, Color:"rgb(255,152,0)",Enable:true },
63773
+ { Value: 0.5, Color:"rgb(76,175,80)", Enable:true },
63774
+ { Value: 0.618, Color:"rgb(8,153,129)", Enable:true },
63775
+ { Value: 0.75, Color:"rgb(0,188,212)" ,Enable:true },
63776
+ { Value: 1, Color:"rgb(120,123,134)", Enable:true },
63777
+ ],
63778
+
63779
+ Opacity:0.3
63780
+ }
63781
+
63782
+ this.Draw=function()
63783
+ {
63784
+ this.LinePoint=[];
63785
+ if (this.IsFrameMinSize()) return;
63786
+ var bCheckXY=false;
63787
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
63788
+ if (!drawPoint) return;
63789
+ if (drawPoint.length!=2) return;
63790
+
63791
+ this.ClipFrame();
63792
+
63793
+ var ptStart=drawPoint[0];
63794
+ var ptEnd=drawPoint[1];
63795
+
63796
+ this.SetLineWidth();
63797
+ this.DrawBlock(ptEnd, ptStart);
63798
+ this.RestoreLineWidth();
63799
+
63800
+ this.DrawPoint(drawPoint); //画点
63801
+ this.Canvas.restore();
63802
+ }
63803
+
63804
+ //获取在第几象限
63805
+ this.GetQuadrant=function(ptStart,ptEnd)
63806
+ {
63807
+ if (ptStart.X<ptEnd.X && ptStart.Y>ptEnd.Y) return 1;
63808
+ else if (ptStart.X>ptEnd.X && ptStart.Y>ptEnd.Y) return 2;
63809
+ else if (ptStart.X<ptEnd.X && ptStart.Y< ptEnd.Y) return 4;
63810
+ else return 3;
63811
+ }
63812
+
63813
+ this.DrawBlock=function(ptStart, ptEnd)
63814
+ {
63815
+ var center=ptEnd;
63816
+ var xDiff=ptEnd.X-ptStart.X;
63817
+ var yDiff=ptEnd.Y-ptStart.Y;
63818
+ var quadrant=this.GetQuadrant(center,ptStart); //象限
63819
+
63820
+ var aryYData=this.GetArrayAreaConfig(this.AreaConfig.AryYData);
63821
+ var ptPre=null; //上一个点
63822
+ var clrArea=null;
63823
+ this.Canvas.font=this.Font;
63824
+ var textOffset=4;
63825
+ if (quadrant==1 || quadrant==4)
63826
+ {
63827
+ this.Canvas.textAlign="right";
63828
+ textOffset=-4;
63829
+ }
63830
+ else
63831
+ {
63832
+ this.Canvas.textAlign="left";
63833
+ textOffset=4;
63834
+ }
63835
+ this.Canvas.textBaseline="middle";
63836
+ for(var i=0;i<aryYData.length;++i)
63837
+ {
63838
+ var item=aryYData[i];
63839
+ var y=item.Value*yDiff+ptStart.Y;
63840
+
63841
+ var pt=this.CalculateExtendLineEndPoint([center, {X:ptStart.X, Y:y}]);
63842
+
63843
+ if (ptPre)
63844
+ {
63845
+ this.Canvas.beginPath();
63846
+ this.Canvas.moveTo(center.X,center.Y);
63847
+ this.Canvas.lineTo(ptPre.X,ptPre.Y);
63848
+ this.Canvas.lineTo(pt.X,pt.Y);
63849
+ this.Canvas.closePath();
63850
+ this.Canvas.fillStyle=clrArea;
63851
+ this.Canvas.fill();
63852
+ }
63853
+
63854
+ this.Canvas.strokeStyle=item.Color;
63855
+ this.Canvas.beginPath();
63856
+ this.Canvas.moveTo(center.X,center.Y);
63857
+ this.Canvas.lineTo(pt.X,pt.Y);
63858
+ this.Canvas.stroke();
63859
+
63860
+ this.LinePoint.push({Start:center, End:pt});
63861
+
63862
+ if (item.Value!=1)
63863
+ {
63864
+ this.Canvas.strokeStyle=this.LineColor;
63865
+ this.Canvas.beginPath();
63866
+ this.Canvas.moveTo(center.X,y);
63867
+ this.Canvas.lineTo(ptStart.X,y);
63868
+ this.Canvas.stroke();
63869
+ }
63870
+
63871
+ ptPre=pt;
63872
+ clrArea=IChartDrawPicture.ColorToRGBA(item.Color, this.AreaConfig.Opacity);
63873
+
63874
+ //文字
63875
+ var text=`${item.Value}`;
63876
+ this.Canvas.fillStyle=item.Color;
63877
+ this.Canvas.fillText(text,center.X+textOffset,y);
63878
+ }
63879
+
63880
+ var aryXData=this.GetArrayAreaConfig(this.AreaConfig.AryXData);
63881
+ var ptPre=null;
63882
+ this.Canvas.textAlign="center";
63883
+ if (quadrant==3 || quadrant==4)
63884
+ {
63885
+ this.Canvas.textBaseline="bottom";
63886
+ textOffset=-5;
63887
+ }
63888
+ else
63889
+ {
63890
+ this.Canvas.textBaseline="top";
63891
+ textOffset=5;
63892
+ }
63893
+
63894
+ for(var i=0;i<aryXData.length;++i)
63895
+ {
63896
+ var item=aryXData[i];
63897
+ var x=item.Value*xDiff+ptStart.X;
63898
+
63899
+ var pt=this.CalculateExtendLineEndPoint([center, {X:x, Y:ptStart.Y}]);
63900
+
63901
+ if (ptPre) //面积
63902
+ {
63903
+ this.Canvas.beginPath();
63904
+ this.Canvas.moveTo(center.X,center.Y);
63905
+ this.Canvas.lineTo(ptPre.X,ptPre.Y);
63906
+ this.Canvas.lineTo(pt.X,pt.Y);
63907
+ this.Canvas.closePath();
63908
+ this.Canvas.fillStyle=clrArea;
63909
+ this.Canvas.fill();
63910
+ }
63911
+
63912
+ this.Canvas.strokeStyle=item.Color;
63913
+ this.Canvas.beginPath();
63914
+ this.Canvas.moveTo(center.X,center.Y);
63915
+ this.Canvas.lineTo(pt.X,pt.Y);
63916
+ this.Canvas.stroke();
63917
+
63918
+ this.LinePoint.push({Start:center, End:pt});
63919
+
63920
+ if (item.Value!=1)
63921
+ {
63922
+ this.Canvas.strokeStyle=this.LineColor;
63923
+ this.Canvas.beginPath();
63924
+ this.Canvas.moveTo(x,center.Y);
63925
+ this.Canvas.lineTo(x,ptStart.Y);
63926
+ this.Canvas.stroke();
63927
+ }
63928
+
63929
+ ptPre=pt;
63930
+ clrArea=IChartDrawPicture.ColorToRGBA(item.Color, this.AreaConfig.Opacity);
63931
+
63932
+ //文字
63933
+ var text=`${item.Value}`;
63934
+ this.Canvas.fillStyle=item.Color;
63935
+ this.Canvas.fillText(text,x,center.Y+textOffset);
63936
+ }
63937
+ }
63938
+
63939
+ this.GetArrayAreaConfig=function(aryData)
63940
+ {
63941
+ var aryArea=[];
63942
+ for(var i=0;i<aryData.length;++i)
63943
+ {
63944
+ var item=aryData[i];
63945
+ if (item.Enable) aryArea.push(item);
63946
+ }
63947
+
63948
+ aryArea.sort((left,right)=>{ return right.Value-left.Value; })
63949
+
63950
+ return aryArea;
63951
+ }
63952
+
63953
+ }
63954
+
63496
63955
  function ChartDrawStorage()
63497
63956
  {
63498
63957
  this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
@@ -74878,7 +75337,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
74878
75337
  if (moveSetp<5 && yMoveSetp<5) return;
74879
75338
  if (!this.EnableSelectRect) return;
74880
75339
 
74881
- this.UIElement.style.cursor="default";
75340
+ //this.UIElement.style.cursor="default";
75341
+ this.SetCursor({Cursor:"default"});
74882
75342
  var x=drag.Click.X-uielement.getBoundingClientRect().left;
74883
75343
  var y=drag.Click.Y-uielement.getBoundingClientRect().top;
74884
75344
  var x2=e.clientX-uielement.getBoundingClientRect().left;
@@ -89820,7 +90280,7 @@ function MinuteCoordinateData()
89820
90280
  {
89821
90281
  Full: //完整模式
89822
90282
  [
89823
- [0, 0, "rgb(200,200,200)", "09:30"], //[0]=索引 [1]=线段类型 [2]=文字颜色(弃用) [3]=刻度文字 [4]=线段颜色
90283
+ [0, 0, "rgb(200,200,200)", "09:30"], //[0]=索引 [1]=线段类型 [2]=文字颜色(弃用) [3]=刻度文字 [4]=线段颜色 [5]=背景色
89824
90284
  [31, 0, "RGB(200,200,200)", "10:00"],
89825
90285
  [61, 0, "RGB(200,200,200)", "10:30"],
89826
90286
  [91, 0, "RGB(200,200,200)", "11:00"],
@@ -128427,7 +128887,7 @@ function ScrollBarBGChart()
128427
128887
 
128428
128888
 
128429
128889
 
128430
- var HQCHART_VERSION="1.1.12512";
128890
+ var HQCHART_VERSION="1.1.12521";
128431
128891
 
128432
128892
  function PrintHQChartVersion()
128433
128893
  {