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.
@@ -1588,6 +1588,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
1588
1588
 
1589
1589
  this.JSChartContainer=chart;
1590
1590
 
1591
+ if (option.DefaultCursor) chart.DefaultCursor=option.DefaultCursor;
1591
1592
  if (option.OnCreatedCallback) option.OnCreatedCallback(chart);
1592
1593
 
1593
1594
  //是否自动更新
@@ -2693,6 +2694,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
2693
2694
  this.IsClickShowCorssCursor=false; //手势点击显示十字光标
2694
2695
  this.ChartSplashPaint=null; //等待提示
2695
2696
  this.LoadDataSplashTitle="数据加载中"; //下载数据提示信息
2697
+ this.DefaultCursor="default"; //crosshair , default 默认手型
2696
2698
 
2697
2699
  //绘图缓存
2698
2700
  this.CacheCanvas=null;
@@ -3172,7 +3174,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3172
3174
  event.Callback(event, sendData, this);
3173
3175
  this.CustomChartDrag=sendData.ChartDrag;
3174
3176
 
3175
- if (sendData.Cusrsor) this.UIElement.style.cursor=sendData.Cusrsor;
3177
+ this.SetCursor(sendData);
3176
3178
  }
3177
3179
 
3178
3180
  this.TryDragMove_CustomChartDrag=function(sendData)
@@ -3251,7 +3253,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3251
3253
  {
3252
3254
  if (item.Type==4)
3253
3255
  {
3254
- this.UIElement.style.cursor="pointer";
3256
+ //this.UIElement.style.cursor="pointer";
3257
+ this.SetCursor({Cursor:"pointer"});
3255
3258
  var obj={ X:e.clientX };
3256
3259
  if (this.GetXDataIndex(obj))
3257
3260
  {
@@ -3261,7 +3264,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3261
3264
  }
3262
3265
  else
3263
3266
  {
3264
- this.UIElement.style.cursor="ew-resize";
3267
+ //this.UIElement.style.cursor="ew-resize";
3268
+ this.SetCursor({Cursor:"ew-resize"});
3265
3269
  this.RectSelectDrag={ Index:item.PointIndex, Type:item.Type };
3266
3270
  JSConsole.Chart.Log("[JSChartContainer::UIOnMouseDown] drag rect select ",item);
3267
3271
  }
@@ -3275,7 +3279,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3275
3279
  var dragBorder=this.Frame.PtInFrameBorder(x,y);
3276
3280
  if (dragBorder && dragBorder.Index>=0)
3277
3281
  {
3278
- this.UIElement.style.cursor="n-resize";
3282
+ //this.UIElement.style.cursor="n-resize";
3283
+ this.SetCursor({Cursor:"n-resize"});
3279
3284
  this.BorderDrag={ Index:dragBorder.Index };
3280
3285
  JSConsole.Chart.Log("[JSChartContainer::UIOnMouseDown] DragBorder ",dragBorder);
3281
3286
  }
@@ -3287,7 +3292,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3287
3292
  var dragY=this.TryYDrag(x,y);
3288
3293
  if (dragY)
3289
3294
  {
3290
- this.UIElement.style.cursor=dragY.Position==0 ? "n-resize":"row-resize";
3295
+ //this.UIElement.style.cursor=dragY.Position==0 ? "n-resize":"row-resize";
3296
+ var cursor=dragY.Position==0 ? "n-resize":"row-resize";
3297
+ this.SetCursor({Cursor:cursor});
3291
3298
  this.YDrag=dragY;
3292
3299
  JSConsole.Chart.Log("[JSChartContainer::UIOnMouseDown] dragY ",dragY);
3293
3300
  }
@@ -3296,7 +3303,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3296
3303
  var dragUpDown=this.TryUpDownDrag(x,y);
3297
3304
  if (dragUpDown)
3298
3305
  {
3299
- this.UIElement.style.cursor="pointer";
3306
+ //this.UIElement.style.cursor="pointer";
3307
+ this.SetCursor({Cursor:"pointer"});
3300
3308
  this.UpDownDrag=dragUpDown;
3301
3309
  JSConsole.Chart.Log("[JSChartContainer::UIOnMouseDown] dragUpDown ",dragUpDown);
3302
3310
  }
@@ -3619,8 +3627,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3619
3627
 
3620
3628
  if (moveSetp<5 && yMoveSetp<5) return;
3621
3629
 
3622
- this.UIElement.style.cursor="default";
3623
-
3630
+ //this.UIElement.style.cursor="default";
3631
+ this.SetCursor({Cursor:"default"});
3624
3632
  var x=drag.Click.X-uielement.getBoundingClientRect().left;
3625
3633
  var y=drag.Click.Y-uielement.getBoundingClientRect().top;
3626
3634
  var x2=e.clientX-uielement.getBoundingClientRect().left;
@@ -3649,7 +3657,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3649
3657
  {
3650
3658
  var yMove=e.clientY-drag.LastMove.Y;
3651
3659
  JSConsole.Chart.Log("[JSChartContainer::OnDragMode_One] UpDownDrag ",this.UpDownDrag,yMove);
3652
- this.UIElement.style.cursor="pointer";
3660
+ //this.UIElement.style.cursor="pointer";
3661
+ this.SetCursor({Cursor:"pointer"});
3653
3662
  if (this.OnUpDonwFrameY(this.UpDownDrag, yMove))
3654
3663
  {
3655
3664
  bNeedDraw=true;
@@ -3696,7 +3705,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3696
3705
  var oneStepWidth=this.GetMoveOneStepWidth();
3697
3706
  if (moveSetp<oneStepWidth)
3698
3707
  {
3699
- this.UIElement.style.cursor=cursorStatus;
3708
+ //this.UIElement.style.cursor=cursorStatus;
3709
+ this.SetCursor({Cursor:cursorStatus});
3700
3710
  if (bNeedDraw) this.Draw();
3701
3711
  return;
3702
3712
  }
@@ -3726,7 +3736,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3726
3736
  if (this.DragDownloadData) this.DragDownloadData();
3727
3737
  }
3728
3738
  }
3729
- this.UIElement.style.cursor=cursorStatus;
3739
+ //this.UIElement.style.cursor=cursorStatus;
3740
+ this.SetCursor({Cursor:cursorStatus});
3730
3741
  }
3731
3742
  drag.LastMove.X=e.clientX;
3732
3743
  }
@@ -3794,7 +3805,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3794
3805
  var chartMove=this.GetExtendChartByClassName("DragMovePaint");
3795
3806
  if (chartMove && chartMove.Chart) chartMove.Chart.Clear();
3796
3807
  if (!this.OnDragChart(this.IndexChartDrag)) this.DrawDynamicInfo();
3797
- this.UIElement.style.cursor="default";
3808
+ //this.UIElement.style.cursor="default";
3809
+ this.SetCursor({Cursor:"default"});
3798
3810
  }
3799
3811
  else if (this.CustomChartDrag)
3800
3812
  {
@@ -3884,7 +3896,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3884
3896
  //清空数据
3885
3897
  JSConsole.Chart.Log('[KLineChartContainer::document.onmouseup]',e);
3886
3898
  if (this.SelectChartDrawPicture) this.SelectChartDrawPicture.DragInfo=null;
3887
- this.UIElement.style.cursor="default";
3899
+ //this.UIElement.style.cursor="default";
3900
+ this.SetCursor({Cursor:"default"});
3888
3901
  this.MouseDrag=null;
3889
3902
  this.ClickDownPoint=null;
3890
3903
  this.IsOnTouch=false;
@@ -5719,7 +5732,6 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5719
5732
  var frameID=this.Frame.PtInFrame(x,y);
5720
5733
  if (IFrameSplitOperator.IsNumber(frameID) && frameID>=0) //在K线内部移动,调整K线索引
5721
5734
  this.CursorIndex=this.Frame.GetXData(x);
5722
-
5723
5735
 
5724
5736
 
5725
5737
  if (this.EnableBorderDrag && this.Frame && !this.CurrentChartDrawPicture)
@@ -5842,13 +5854,13 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5842
5854
 
5843
5855
  if (drawPictrueData.PointIndex===100)
5844
5856
  {
5845
- if (drawPictrueData.Cursor) this.UIElement.style.cursor=drawPictrueData.Cursor;
5846
- else this.UIElement.style.cursor="move";
5857
+ if (drawPictrueData.Cursor) this.SetCursor(drawPictrueData); //this.UIElement.style.cursor=drawPictrueData.Cursor;
5858
+ else this.SetCursor({Cursor:"move"}); //this.UIElement.style.cursor="move";
5847
5859
  }
5848
5860
  else
5849
5861
  {
5850
- if (drawPictrueData.Cursor) this.UIElement.style.cursor=drawPictrueData.Cursor
5851
- else this.UIElement.style.cursor="pointer";
5862
+ if (drawPictrueData.Cursor) this.SetCursor(drawPictrueData); //this.UIElement.style.cursor=drawPictrueData.Cursor
5863
+ else this.SetCursor({Cursor:"pointer"}); //this.UIElement.style.cursor="pointer";
5852
5864
  }
5853
5865
 
5854
5866
  bDrawPicture=true;
@@ -5856,7 +5868,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5856
5868
  }
5857
5869
  else
5858
5870
  {
5859
- if (!this.MouseDrag) this.UIElement.style.cursor="default";
5871
+ if (!this.MouseDrag) this.SetCursor({Cursor:"default"}); //this.UIElement.style.cursor="default";
5860
5872
  }
5861
5873
  }
5862
5874
 
@@ -5879,7 +5891,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5879
5891
  this.DrawDynamicInfo(option);
5880
5892
  }
5881
5893
 
5882
- if (mouseStatus) this.UIElement.style.cursor=mouseStatus.Cursor;
5894
+ this.SetCursor(mouseStatus);
5883
5895
 
5884
5896
  if (this.IsShowTooltip && bDrawPicture==false)
5885
5897
  {
@@ -5907,6 +5919,17 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5907
5919
  }
5908
5920
  }
5909
5921
 
5922
+ //设置鼠标形状 {Cursor:鼠标形状 }
5923
+ this.SetCursor=function(obj)
5924
+ {
5925
+ if (!obj || !obj.Cursor) return;
5926
+
5927
+ if (obj.Cursor=="default")
5928
+ this.UIElement.style.cursor=this.DefaultCursor;
5929
+ else
5930
+ this.UIElement.style.cursor=obj.Cursor;
5931
+ }
5932
+
5910
5933
  this.OnKeyDown=function(e)
5911
5934
  {
5912
5935
  if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash == true) return;
@@ -8660,6 +8683,7 @@ function CoordinateInfo()
8660
8683
  this.Value; //坐标数据
8661
8684
  this.Message=[]; //坐标输出文字信息 0=左 1=右 2=内左 3=内右
8662
8685
  this.TextColor=g_JSChartResource.FrameSplitTextColor //文字颜色
8686
+ this.TextBGColor; //文字背景色
8663
8687
  this.TextColor2; //右侧文字颜色,空使用TextColor
8664
8688
  this.Font=g_JSChartResource.FrameSplitTextFont; //字体
8665
8689
  this.LineColor=g_JSChartResource.FrameSplitPen; //线段颜色
@@ -10172,9 +10196,10 @@ function AverageWidthFrame()
10172
10196
  this.Canvas.font=this.VerticalInfo[i].Font;
10173
10197
 
10174
10198
  var textLeft=0;
10175
- this.Canvas.fillStyle=item.TextColor;
10199
+
10176
10200
  this.Canvas.strokeStyle=item.TextColor;
10177
10201
  var testWidth=this.Canvas.measureText(this.VerticalInfo[i].Message[0]).width;
10202
+ var textHeight=this.Canvas.measureText("擎").width;
10178
10203
  if (x<testWidth/2)
10179
10204
  {
10180
10205
  this.Canvas.textAlign="left";
@@ -10208,6 +10233,15 @@ function AverageWidthFrame()
10208
10233
  yText+=lineLength+2*pixelRatio;
10209
10234
  }
10210
10235
 
10236
+ //item.TextBGColor="rgb(0,255,0)";
10237
+ if (item.TextBGColor) //文字背景色
10238
+ {
10239
+ var rtText={ Left:textLeft, Top:yText+this.XBottomOffset, Width:testWidth, Height:textHeight };
10240
+ this.Canvas.fillStyle=item.TextBGColor;
10241
+ this.Canvas.fillRect(rtText.Left-1, rtText.Top, rtText.Width+2, rtText.Height);
10242
+ }
10243
+
10244
+ this.Canvas.fillStyle=item.TextColor;
10211
10245
  this.Canvas.fillText(this.VerticalInfo[i].Message[0],x,yText+this.XBottomOffset);
10212
10246
  textRightPrev=textLeft+testWidth;
10213
10247
  }
@@ -28981,6 +29015,7 @@ function ChartStick()
28981
29015
  this.Draw=function()
28982
29016
  {
28983
29017
  if (!this.IsShow || this.ChartFrame.IsMinSize) return;
29018
+ if (this.IsHideScriptIndex()) return;
28984
29019
 
28985
29020
  if (this.NotSupportMessage)
28986
29021
  {
@@ -29006,6 +29041,8 @@ function ChartLineStick()
29006
29041
  this.Draw=function()
29007
29042
  {
29008
29043
  if (!this.IsShow || this.ChartFrame.IsMinSize) return;
29044
+ if (this.IsShowIndexTitleOnly()) return;
29045
+ if (this.IsHideScriptIndex()) return;
29009
29046
 
29010
29047
  if (this.NotSupportMessage)
29011
29048
  {
@@ -39534,7 +39571,7 @@ function DrawToolsButton()
39534
39571
  { HTML: { Title: 'M头W底', IClass: 'iconfont icon-draw_wavemw', ID: 'icon-wavemw' }, Name: 'M头W底' },
39535
39572
  { HTML: { Title: '头肩型', IClass: 'iconfont icon-draw_head_shoulders_bt', ID: 'icon-Head-Shoulders' }, Name: '头肩型' },
39536
39573
  { HTML: { Title: '波浪尺', IClass: 'iconfont icon-waveruler', ID: 'icon-wave-ruler' }, Name: '波浪尺' },
39537
- { HTML: { Title: 'AB波浪尺', IClass: 'iconfont icon-waveruler', ID: 'icon-wave-ruler' }, Name: 'AB波浪尺' },
39574
+ { HTML: { Title: 'AB波浪尺', IClass: 'iconfont icon-waveruler', ID: 'icon-wave-ruler2' }, Name: 'AB波浪尺' },
39538
39575
  { HTML: { Title: '箱型线', IClass: 'iconfont icon-draw_box', ID: 'icon-drawbox' }, Name: '箱型线' },
39539
39576
  { HTML: { Title: '涂鸦线段', IClass: 'iconfont icon-draw_line', ID: 'icon-segment2' }, Name: '涂鸦线段' },
39540
39577
 
@@ -44722,6 +44759,7 @@ function FrameSplitMinuteX()
44722
44759
  info.Value=item[0];
44723
44760
  if (this.ShowText) info.Message[0]=item[3];
44724
44761
  if (item[4]) info.LineColor=item[4]; //线段颜色
44762
+ if (item[5]) info.TextBGColor=item[5]; //文字背景色
44725
44763
  this.Frame.VerticalInfo[i]=info;
44726
44764
  }
44727
44765
  }
@@ -48516,7 +48554,8 @@ function DynamicMinuteTitlePainting()
48516
48554
 
48517
48555
  if (beforeItem && dataItem) //盘前数据
48518
48556
  {
48519
- if (beforeItem.Date>dataItem.Date || (beforeItem.Date==dataItem.Date && beforeItem.Time>dataItem.Time && afterDataVer==1.0) )
48557
+ if (beforeItem.Date>dataItem.Date || (beforeItem.Date==dataItem.Date && beforeItem.Time>dataItem.Time && beforeDataVer==1.0)
48558
+ || (beforeItem.Date==dataItem.Date && parseInt(beforeItem.Time>dataItem.Time) && beforeDataVer==2.0))
48520
48559
  return { Type:2, Data:beforeItem, Ver: beforeDataVer, Explain:beforeExplain};
48521
48560
  }
48522
48561
 
@@ -51930,7 +51969,9 @@ IChartDrawPicture.ArrayDrawPricture=
51930
51969
  { Name:"AnchoredText", ClassName:"ChartDrawAnchoredText", Create:function() { return new ChartDrawAnchoredText();} },
51931
51970
  { Name:"PriceLabel", ClassName:"ChartDrawPriceLabel", Create:function() { return new ChartDrawPriceLabel();} },
51932
51971
  { Name:"PriceNote", ClassName:"ChartDrawPriceNote", Create:function() { return new ChartDrawPriceNote();} },
51933
- { Name:"FibWedge", ClassName:"ChartDrawFibWedge", Create:function(){ return new ChartDrawFibWedge(); }}
51972
+ { Name:"FibWedge", ClassName:"ChartDrawFibWedge", Create:function(){ return new ChartDrawFibWedge(); }},
51973
+ { Name:"FibRetracement", ClassName:"ChartFibRetracement", Create:function() { return new ChartFibRetracement(); }}, //斐波那契回测
51974
+ { Name:"FibSpeedResistanceFan", ClassName:"ChartFibSpeedResistanceFan", Create:function() { return new ChartFibSpeedResistanceFan(); }} //斐波那契扇形
51934
51975
  ];
51935
51976
 
51936
51977
  IChartDrawPicture.MapIonFont=new Map(
@@ -54201,7 +54242,7 @@ function ChartDrawPictureParallelChannel()
54201
54242
  var ptCenter=new Point();
54202
54243
  ptCenter.X=linePoint.Start.X+(linePoint.End.X-linePoint.Start.X)/2;
54203
54244
  ptCenter.Y=linePoint.Start.Y+(linePoint.End.Y-linePoint.Start.Y)/2;
54204
- drawPoint[3]=ptCenter;
54245
+ drawPoint[2]=ptCenter;
54205
54246
 
54206
54247
  this.Point[2]=ptCenter;
54207
54248
  var xValue=parseInt(this.Frame.GetXData(ptCenter.X))+data.DataOffset;
@@ -54634,6 +54675,7 @@ function ChartDrawPictureGannFan()
54634
54675
  else return 3;
54635
54676
  }
54636
54677
 
54678
+
54637
54679
  //isDotline 是否是虚线
54638
54680
  this.DrawLine=function(ptStart,ptEnd,isDottedline)
54639
54681
  {
@@ -59413,6 +59455,423 @@ function ChartDrawFibWedge()
59413
59455
 
59414
59456
  }
59415
59457
 
59458
+ //////////////////////////////////////////////////////////////////////////////
59459
+ // 斐波那契回测
59460
+ //
59461
+ function ChartFibRetracement()
59462
+ {
59463
+ this.newMethod=IChartDrawPicture; //派生
59464
+ this.newMethod();
59465
+ delete this.newMethod;
59466
+
59467
+ this.ClassName='ChartFibRetracement';
59468
+ this.PointCount=2;
59469
+ this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
59470
+ this.IsPointIn=this.IsPointIn_XYValue_Line;
59471
+ this.GetXYCoordinate=this.GetXYCoordinate_default;
59472
+ this.PointToValue_Default=this.PointToValue;
59473
+ this.OnlyMoveXIndex=true;
59474
+ this.IsSupportMagnet=true;
59475
+ this.LineDash=[6,3];
59476
+ this.LineWidth=1;
59477
+ this.EnableBGColor=true;
59478
+ this.ExtendLine={ Left:false, Right: false }; //延长线
59479
+
59480
+ this.AreaConfig=
59481
+ {
59482
+ AryData:
59483
+ [
59484
+ { Value: 0, Color:"rgb(128,128,128)", Enable:true },
59485
+ { Value: 0.236, Color:"rgb(242,52,69)", Enable:true },
59486
+ { Value: 0.382, Color:"rgb(255,152,0)",Enable:true },
59487
+ { Value: 0.5, Color:"rgb(76,175,80)", Enable:true },
59488
+ { Value: 0.618, Color:"rgb(8,153,129)", Enable:true },
59489
+ { Value: 0.786, Color:"rgb(0,188,212)" ,Enable:true },
59490
+ { Value: 1, Color:"rgb(120,123,134)", Enable:true },
59491
+ { Value: 1.618, Color:"rgb(41,98,255)",Enable:true },
59492
+ { Value: 2.618, Color:"rgb(242,54,69)",Enable:false },
59493
+ ],
59494
+
59495
+ Opacity:0.3
59496
+ }
59497
+
59498
+ this.SetOption=function(option)
59499
+ {
59500
+ if (!option) return;
59501
+
59502
+ if (option.Font) this.Font=option.Font;
59503
+ if (option.LineWidth) this.LineWidth=option.LineWidth;
59504
+ if (option.LineDash) this.LineDash=option.LineDash;
59505
+ if (IFrameSplitOperator.IsBool(option.EnableBGColor)) this.EnableBGColor=option.EnableBGColor;
59506
+ if (option.ExtendLine)
59507
+ {
59508
+ var item=option.ExtendLine;
59509
+ if (IFrameSplitOperator.IsBool(item.Left)) this.ExtendLine.Left=item.Left;
59510
+ if (IFrameSplitOperator.IsBool(item.Right)) this.ExtendLine.Left=item.Right;
59511
+ }
59512
+
59513
+ if (option.AreaConfig) this.AreaConfig=option.AreaConfig;
59514
+ }
59515
+
59516
+ //导出成存储格式
59517
+ this.ExportStorageData=function()
59518
+ {
59519
+ var storageData=this.ExportBaseData();
59520
+
59521
+ storageData.Value=[];
59522
+ for(var i=0;i<this.Value.length && i<this.PointCount;++i)
59523
+ {
59524
+ var item=this.Value[i];
59525
+ storageData.Value.push( { XValue:item.XValue, YValue:item.YValue } );
59526
+ }
59527
+
59528
+ storageData.Font=this.Font;
59529
+ storageData.EnableBGColor=this.EnableBGColor;
59530
+ storageData.LineDash=this.LineDash;
59531
+ storageData.ExtendLine={ Left:this.ExtendLine.Left, Right:this.ExtendLine.Right };
59532
+ storageData.AreaConfig=CloneData(this.AreaConfig);
59533
+
59534
+ return storageData;
59535
+ }
59536
+
59537
+ this.ImportStorageData=function(storageData)
59538
+ {
59539
+ if (storageData.Font) this.Font=storageData.Font;
59540
+ if (storageData.LineDash) this.LineDash=storageData.LineDash;
59541
+ if (IFrameSplitOperator.IsBool(storageData.EnableBGColor)) this.EnableBGColor=storageData.EnableBGColor;
59542
+ if (storageData.ExtendLine) this.ExtendLine=storageData.ExtendLine;
59543
+ if (storageData.AreaConfig) this.AreaConfig=storageData.AreaConfig;
59544
+ }
59545
+
59546
+ this.Draw=function()
59547
+ {
59548
+ this.LinePoint=[];
59549
+ if (this.IsFrameMinSize()) return;
59550
+ var bCheckXY=true;
59551
+ if (this.ExtendLine.Left || this.ExtendLine.Right) bCheckXY=false;
59552
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
59553
+ if (!drawPoint) return;
59554
+ if (drawPoint.length!=2) return;
59555
+
59556
+ this.ClipFrame();
59557
+
59558
+ var ptStart=drawPoint[0];
59559
+ var ptEnd=drawPoint[1];
59560
+
59561
+ this.SetLineWidth();
59562
+ this.Canvas.strokeStyle=this.LineColor;
59563
+ this.Canvas.setLineDash(this.LineDash);
59564
+ this.Canvas.beginPath();
59565
+ this.Canvas.moveTo(ptStart.X,ptStart.Y);
59566
+ this.Canvas.lineTo(ptEnd.X,ptEnd.Y);
59567
+ this.Canvas.stroke();
59568
+ this.Canvas.setLineDash([]);
59569
+
59570
+ this.DrawBlock(ptStart, ptEnd);
59571
+
59572
+ this.RestoreLineWidth();
59573
+
59574
+ var line={Start:ptStart, End:ptEnd};
59575
+ this.LinePoint.push(line);
59576
+
59577
+ this.DrawPoint(drawPoint); //画点
59578
+ this.Canvas.restore();
59579
+ }
59580
+
59581
+ this.GetArrayAreaConfig=function()
59582
+ {
59583
+ var aryArea=[];
59584
+ for(var i=0;i<this.AreaConfig.AryData.length;++i)
59585
+ {
59586
+ var item=this.AreaConfig.AryData[i];
59587
+ if (item.Enable) aryArea.push(item);
59588
+ }
59589
+
59590
+ aryArea.sort((left,right)=>{ return right.Value-left.Value; })
59591
+
59592
+ return aryArea;
59593
+ }
59594
+
59595
+ this.DrawBlock=function(ptStart, ptEnd)
59596
+ {
59597
+ var yTop=Math.min(ptStart.Y, ptEnd.Y);
59598
+ var yBottom=Math.max(ptStart.Y, ptEnd.Y);
59599
+ var xLeft=Math.min(ptStart.X, ptEnd.X);
59600
+ var xRight=Math.max(ptStart.X, ptEnd.X);
59601
+ var height=yBottom-yTop;
59602
+ //var baseValue=Math.min(this.Value[0].YValue, this.Value[1].YValue);
59603
+ //var diffValue=Math.abs(this.Value[0].YValue-this.Value[1].YValue); //差值
59604
+
59605
+ if (this.ExtendLine.Right) xRight=this.Frame.ChartBorder.GetRight();
59606
+ if (this.ExtendLine.Left) xLeft=this.Frame.ChartBorder.GetLeft();
59607
+
59608
+ var aryArea=this.GetArrayAreaConfig();
59609
+ var yPre=null; //上一个点
59610
+ var clrArea=null;
59611
+ this.Canvas.font=this.Font;
59612
+ if (this.ExtendLine.Left) this.Canvas.textAlign="left";
59613
+ else this.Canvas.textAlign="right";
59614
+ this.Canvas.textBaseline="bottom";
59615
+
59616
+ for(var i=0;i<aryArea.length;++i)
59617
+ {
59618
+ var item=aryArea[i];
59619
+ var y=yBottom-height*item.Value;
59620
+ //var yValue=baseValue+diffValue*item.Value;
59621
+ yValue=this.Frame.GetYData(y,false);
59622
+ y=ToFixedPoint(y);
59623
+ if (this.EnableBGColor && IFrameSplitOperator.IsNumber(yPre))
59624
+ {
59625
+ var rtBG={ Left:xLeft, Right:xRight, Top:yPre, Bottom:y };
59626
+ rtBG.Width=rtBG.Right-rtBG.Left;
59627
+ rtBG.Height=rtBG.Bottom-rtBG.Top;
59628
+ this.Canvas.fillStyle=clrArea;
59629
+ this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
59630
+ }
59631
+
59632
+ this.Canvas.strokeStyle=item.Color;
59633
+ this.Canvas.beginPath();
59634
+ this.Canvas.moveTo(xLeft,y);
59635
+ this.Canvas.lineTo(xRight,y);
59636
+ this.Canvas.stroke();
59637
+
59638
+ var line={ Start:{X:xLeft, Y:y}, End:{X:xRight, Y:y} };
59639
+ this.LinePoint.push(line);
59640
+
59641
+ //文字
59642
+ var text=`${item.Value} (${yValue.toFixed(2)})`;
59643
+ this.Canvas.fillStyle=item.Color;
59644
+ if (this.ExtendLine.Left)
59645
+ this.Canvas.fillText(text,xLeft+2,y-2);
59646
+ else
59647
+ this.Canvas.fillText(text,xLeft-2,y-2);
59648
+
59649
+ yPre=y;
59650
+ clrArea=IChartDrawPicture.ColorToRGBA(item.Color, this.AreaConfig.Opacity);
59651
+ }
59652
+ }
59653
+
59654
+ }
59655
+
59656
+
59657
+ function ChartFibSpeedResistanceFan()
59658
+ {
59659
+ this.newMethod=IChartDrawPicture; //派生
59660
+ this.newMethod();
59661
+ delete this.newMethod;
59662
+
59663
+ this.ClassName='ChartFibSpeedResistanceFan';
59664
+ this.PointCount=2;
59665
+ this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
59666
+ this.IsPointIn=this.IsPointIn_XYValue_Line;
59667
+ this.GetXYCoordinate=this.GetXYCoordinate_default;
59668
+ this.PointToValue_Default=this.PointToValue;
59669
+ this.OnlyMoveXIndex=true;
59670
+ this.IsSupportMagnet=true;
59671
+ this.LineWidth=1;
59672
+ this.EnableBGColor=true;
59673
+
59674
+ this.AreaConfig=
59675
+ {
59676
+ AryYData:
59677
+ [
59678
+ { Value: 0, Color:"rgb(128,128,128)", Enable:true },
59679
+ { Value: 0.25, Color:"rgb(242,52,69)", Enable:true },
59680
+ { Value: 0.382, Color:"rgb(255,152,0)",Enable:true },
59681
+ { Value: 0.5, Color:"rgb(76,175,80)", Enable:true },
59682
+ { Value: 0.618, Color:"rgb(8,153,129)", Enable:true },
59683
+ { Value: 0.75, Color:"rgb(0,188,212)" ,Enable:true },
59684
+ { Value: 1, Color:"rgb(120,123,134)", Enable:true },
59685
+
59686
+ ],
59687
+
59688
+ AryXData:
59689
+ [
59690
+ { Value: 0, Color:"rgb(128,128,128)", Enable:true },
59691
+ { Value: 0.25, Color:"rgb(242,52,69)", Enable:true },
59692
+ { Value: 0.382, Color:"rgb(255,152,0)",Enable:true },
59693
+ { Value: 0.5, Color:"rgb(76,175,80)", Enable:true },
59694
+ { Value: 0.618, Color:"rgb(8,153,129)", Enable:true },
59695
+ { Value: 0.75, Color:"rgb(0,188,212)" ,Enable:true },
59696
+ { Value: 1, Color:"rgb(120,123,134)", Enable:true },
59697
+ ],
59698
+
59699
+ Opacity:0.3
59700
+ }
59701
+
59702
+ this.Draw=function()
59703
+ {
59704
+ this.LinePoint=[];
59705
+ if (this.IsFrameMinSize()) return;
59706
+ var bCheckXY=false;
59707
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
59708
+ if (!drawPoint) return;
59709
+ if (drawPoint.length!=2) return;
59710
+
59711
+ this.ClipFrame();
59712
+
59713
+ var ptStart=drawPoint[0];
59714
+ var ptEnd=drawPoint[1];
59715
+
59716
+ this.SetLineWidth();
59717
+ this.DrawBlock(ptEnd, ptStart);
59718
+ this.RestoreLineWidth();
59719
+
59720
+ this.DrawPoint(drawPoint); //画点
59721
+ this.Canvas.restore();
59722
+ }
59723
+
59724
+ //获取在第几象限
59725
+ this.GetQuadrant=function(ptStart,ptEnd)
59726
+ {
59727
+ if (ptStart.X<ptEnd.X && ptStart.Y>ptEnd.Y) return 1;
59728
+ else if (ptStart.X>ptEnd.X && ptStart.Y>ptEnd.Y) return 2;
59729
+ else if (ptStart.X<ptEnd.X && ptStart.Y< ptEnd.Y) return 4;
59730
+ else return 3;
59731
+ }
59732
+
59733
+ this.DrawBlock=function(ptStart, ptEnd)
59734
+ {
59735
+ var center=ptEnd;
59736
+ var xDiff=ptEnd.X-ptStart.X;
59737
+ var yDiff=ptEnd.Y-ptStart.Y;
59738
+ var quadrant=this.GetQuadrant(center,ptStart); //象限
59739
+
59740
+ var aryYData=this.GetArrayAreaConfig(this.AreaConfig.AryYData);
59741
+ var ptPre=null; //上一个点
59742
+ var clrArea=null;
59743
+ this.Canvas.font=this.Font;
59744
+ var textOffset=4;
59745
+ if (quadrant==1 || quadrant==4)
59746
+ {
59747
+ this.Canvas.textAlign="right";
59748
+ textOffset=-4;
59749
+ }
59750
+ else
59751
+ {
59752
+ this.Canvas.textAlign="left";
59753
+ textOffset=4;
59754
+ }
59755
+ this.Canvas.textBaseline="middle";
59756
+ for(var i=0;i<aryYData.length;++i)
59757
+ {
59758
+ var item=aryYData[i];
59759
+ var y=item.Value*yDiff+ptStart.Y;
59760
+
59761
+ var pt=this.CalculateExtendLineEndPoint([center, {X:ptStart.X, Y:y}]);
59762
+
59763
+ if (ptPre)
59764
+ {
59765
+ this.Canvas.beginPath();
59766
+ this.Canvas.moveTo(center.X,center.Y);
59767
+ this.Canvas.lineTo(ptPre.X,ptPre.Y);
59768
+ this.Canvas.lineTo(pt.X,pt.Y);
59769
+ this.Canvas.closePath();
59770
+ this.Canvas.fillStyle=clrArea;
59771
+ this.Canvas.fill();
59772
+ }
59773
+
59774
+ this.Canvas.strokeStyle=item.Color;
59775
+ this.Canvas.beginPath();
59776
+ this.Canvas.moveTo(center.X,center.Y);
59777
+ this.Canvas.lineTo(pt.X,pt.Y);
59778
+ this.Canvas.stroke();
59779
+
59780
+ this.LinePoint.push({Start:center, End:pt});
59781
+
59782
+ if (item.Value!=1)
59783
+ {
59784
+ this.Canvas.strokeStyle=this.LineColor;
59785
+ this.Canvas.beginPath();
59786
+ this.Canvas.moveTo(center.X,y);
59787
+ this.Canvas.lineTo(ptStart.X,y);
59788
+ this.Canvas.stroke();
59789
+ }
59790
+
59791
+ ptPre=pt;
59792
+ clrArea=IChartDrawPicture.ColorToRGBA(item.Color, this.AreaConfig.Opacity);
59793
+
59794
+ //文字
59795
+ var text=`${item.Value}`;
59796
+ this.Canvas.fillStyle=item.Color;
59797
+ this.Canvas.fillText(text,center.X+textOffset,y);
59798
+ }
59799
+
59800
+ var aryXData=this.GetArrayAreaConfig(this.AreaConfig.AryXData);
59801
+ var ptPre=null;
59802
+ this.Canvas.textAlign="center";
59803
+ if (quadrant==3 || quadrant==4)
59804
+ {
59805
+ this.Canvas.textBaseline="bottom";
59806
+ textOffset=-5;
59807
+ }
59808
+ else
59809
+ {
59810
+ this.Canvas.textBaseline="top";
59811
+ textOffset=5;
59812
+ }
59813
+
59814
+ for(var i=0;i<aryXData.length;++i)
59815
+ {
59816
+ var item=aryXData[i];
59817
+ var x=item.Value*xDiff+ptStart.X;
59818
+
59819
+ var pt=this.CalculateExtendLineEndPoint([center, {X:x, Y:ptStart.Y}]);
59820
+
59821
+ if (ptPre) //面积
59822
+ {
59823
+ this.Canvas.beginPath();
59824
+ this.Canvas.moveTo(center.X,center.Y);
59825
+ this.Canvas.lineTo(ptPre.X,ptPre.Y);
59826
+ this.Canvas.lineTo(pt.X,pt.Y);
59827
+ this.Canvas.closePath();
59828
+ this.Canvas.fillStyle=clrArea;
59829
+ this.Canvas.fill();
59830
+ }
59831
+
59832
+ this.Canvas.strokeStyle=item.Color;
59833
+ this.Canvas.beginPath();
59834
+ this.Canvas.moveTo(center.X,center.Y);
59835
+ this.Canvas.lineTo(pt.X,pt.Y);
59836
+ this.Canvas.stroke();
59837
+
59838
+ this.LinePoint.push({Start:center, End:pt});
59839
+
59840
+ if (item.Value!=1)
59841
+ {
59842
+ this.Canvas.strokeStyle=this.LineColor;
59843
+ this.Canvas.beginPath();
59844
+ this.Canvas.moveTo(x,center.Y);
59845
+ this.Canvas.lineTo(x,ptStart.Y);
59846
+ this.Canvas.stroke();
59847
+ }
59848
+
59849
+ ptPre=pt;
59850
+ clrArea=IChartDrawPicture.ColorToRGBA(item.Color, this.AreaConfig.Opacity);
59851
+
59852
+ //文字
59853
+ var text=`${item.Value}`;
59854
+ this.Canvas.fillStyle=item.Color;
59855
+ this.Canvas.fillText(text,x,center.Y+textOffset);
59856
+ }
59857
+ }
59858
+
59859
+ this.GetArrayAreaConfig=function(aryData)
59860
+ {
59861
+ var aryArea=[];
59862
+ for(var i=0;i<aryData.length;++i)
59863
+ {
59864
+ var item=aryData[i];
59865
+ if (item.Enable) aryArea.push(item);
59866
+ }
59867
+
59868
+ aryArea.sort((left,right)=>{ return right.Value-left.Value; })
59869
+
59870
+ return aryArea;
59871
+ }
59872
+
59873
+ }
59874
+
59416
59875
  function ChartDrawStorage()
59417
59876
  {
59418
59877
  this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
@@ -70798,7 +71257,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
70798
71257
  if (moveSetp<5 && yMoveSetp<5) return;
70799
71258
  if (!this.EnableSelectRect) return;
70800
71259
 
70801
- this.UIElement.style.cursor="default";
71260
+ //this.UIElement.style.cursor="default";
71261
+ this.SetCursor({Cursor:"default"});
70802
71262
  var x=drag.Click.X-uielement.getBoundingClientRect().left;
70803
71263
  var y=drag.Click.Y-uielement.getBoundingClientRect().top;
70804
71264
  var x2=e.clientX-uielement.getBoundingClientRect().left;
@@ -85740,7 +86200,7 @@ function MinuteCoordinateData()
85740
86200
  {
85741
86201
  Full: //完整模式
85742
86202
  [
85743
- [0, 0, "rgb(200,200,200)", "09:30"], //[0]=索引 [1]=线段类型 [2]=文字颜色(弃用) [3]=刻度文字 [4]=线段颜色
86203
+ [0, 0, "rgb(200,200,200)", "09:30"], //[0]=索引 [1]=线段类型 [2]=文字颜色(弃用) [3]=刻度文字 [4]=线段颜色 [5]=背景色
85744
86204
  [31, 0, "RGB(200,200,200)", "10:00"],
85745
86205
  [61, 0, "RGB(200,200,200)", "10:30"],
85746
86206
  [91, 0, "RGB(200,200,200)", "11:00"],