hqchart 1.1.13144 → 1.1.13155

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.13144",
3
+ "version": "1.1.13155",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -18590,7 +18590,34 @@ function HQTradeHScreenFrame()
18590
18590
  }
18591
18591
  }
18592
18592
 
18593
- if (frame!=null) return frame.GetYData(x);
18593
+ if (frame!=null)
18594
+ {
18595
+ var xValue= frame.GetYData(x);
18596
+
18597
+ if (frame.GetMainOverlayFrame)
18598
+ {
18599
+ var aryOverlayFrame=frame.GetMainOverlayFrame();
18600
+ if (aryOverlayFrame)
18601
+ {
18602
+ if (aryOverlayFrame[0]) //左侧
18603
+ {
18604
+ var leftFrame=aryOverlayFrame[0];
18605
+ var value=leftFrame.GetYData(x);
18606
+ outObject.RightYValue=xValue;
18607
+ xValue=value;
18608
+ }
18609
+
18610
+ if (aryOverlayFrame[1]) //右侧
18611
+ {
18612
+ var rightFrame=aryOverlayFrame[1];
18613
+ var value=rightFrame.GetYData(x);
18614
+ outObject.RightYValue=value;
18615
+ }
18616
+ }
18617
+ }
18618
+
18619
+ return xValue;
18620
+ }
18594
18621
  }
18595
18622
  }
18596
18623
 
@@ -24713,6 +24740,198 @@ function ChartKLine()
24713
24740
  this.PtMin=ptMin;
24714
24741
  }
24715
24742
 
24743
+ this.DrawKagi=function() //卡吉图
24744
+ {
24745
+ var isHScreen=(this.ChartFrame.IsHScreen===true);
24746
+ var dataWidth=this.ChartFrame.DataWidth;
24747
+ var distanceWidth=this.ChartFrame.DistanceWidth;
24748
+ var xPointCount=this.ChartFrame.XPointCount;
24749
+
24750
+ if (isHScreen)
24751
+ {
24752
+ var border=this.ChartBorder.GetHScreenBorder();
24753
+ var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
24754
+ var chartright=border.BottomEx;
24755
+ var left=border.TopEx+g_JSChartResource.FrameLeftMargin;
24756
+ }
24757
+ else
24758
+ {
24759
+ var border=this.ChartBorder.GetBorder();
24760
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
24761
+ var chartright=border.RightEx;
24762
+ var left=border.Left+g_JSChartResource.FrameLeftMargin;
24763
+ }
24764
+
24765
+ var ptMax={X:null,Y:null,Value:null,Align:'left'};
24766
+ var ptMin={X:null,Y:null,Value:null,Align:'left'};
24767
+ this.ShowRange.Start=this.Data.DataOffset;
24768
+ this.ShowRange.End=this.ShowRange.Start;
24769
+ this.ShowRange.DataCount=0;
24770
+ this.ShowRange.ShowCount=xPointCount;
24771
+ this.DrawKRange.Start=this.Data.DataOffset;
24772
+
24773
+ var lineWidth=2*GetDevicePixelRatio();
24774
+ this.Canvas.lineWidth=lineWidth;
24775
+ var preItem={ Item:null, X:left, Y:null };
24776
+ var index=this.Data.DataOffset-1;
24777
+ if (index>=0 && index<this.Data.Data.length)
24778
+ {
24779
+ var item=this.Data.Data[index];
24780
+ preItem.Item=item;
24781
+ if (item.Direction==1) //上
24782
+ {
24783
+ preItem.Y=this.GetYFromData(item.High,false);
24784
+ }
24785
+ else if (item.Direction==2)
24786
+ {
24787
+ preItem.Y=this.GetYFromData(item.Low,false);
24788
+ }
24789
+ }
24790
+
24791
+
24792
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth),++this.ShowRange.DataCount)
24793
+ {
24794
+ var data=this.Data.Data[i];
24795
+ this.ShowRange.End=i;
24796
+ if (data.Open==null || data.High==null || data.Low==null || data.Close==null) continue;
24797
+
24798
+ var left=xOffset;
24799
+ var right=xOffset+dataWidth;
24800
+ if (right>chartright) break;
24801
+ var x=left+(right-left)/2;
24802
+ var yLow=this.GetYFromData(data.Low,false);
24803
+ var yHigh=this.GetYFromData(data.High,false);
24804
+ this.DrawKRange.End=i;
24805
+
24806
+ if (ptMax.Value==null || ptMax.Value<data.High) //求最大值
24807
+ {
24808
+ ptMax.X=x;
24809
+ ptMax.Y=yHigh;
24810
+ ptMax.Value=data.High;
24811
+ ptMax.Align=j<xPointCount/2?'left':'right';
24812
+ }
24813
+
24814
+ if (ptMin.Value==null || ptMin.Value>data.Low) //求最小值
24815
+ {
24816
+ ptMin.X=x;
24817
+ ptMin.Y=yLow;
24818
+ ptMin.Value=data.Low;
24819
+ ptMin.Align=j<xPointCount/2?'left':'right';
24820
+ }
24821
+
24822
+ var xFixed=ToFixedPoint2(lineWidth,x);
24823
+
24824
+ if (preItem.Item)
24825
+ {
24826
+ this.Canvas.beginPath();
24827
+ var yFixed=ToFixedPoint2(lineWidth,preItem.Y);
24828
+
24829
+ this.Canvas.moveTo(preItem.X, yFixed);
24830
+ this.Canvas.lineTo(xFixed, yFixed);
24831
+ var prePrice=null;
24832
+ if (preItem.Item.Direction==1) prePrice=preItem.Item.Low;
24833
+ else if (preItem.Item.Direction==2) prePrice=preItem.Item.High;
24834
+
24835
+ if (data.Direction==1)
24836
+ {
24837
+ if (data.High<prePrice)
24838
+ {
24839
+ this.Canvas.lineTo(xFixed, yHigh);
24840
+ this.Canvas.strokeStyle=this.DownColor;
24841
+ this.Canvas.stroke();
24842
+ }
24843
+ else
24844
+ {
24845
+ var yPrePrice=this.GetYFromData(prePrice,false);
24846
+ this.Canvas.lineTo(xFixed, yPrePrice);
24847
+ this.Canvas.strokeStyle=this.DownColor;
24848
+ this.Canvas.stroke();
24849
+
24850
+ this.Canvas.beginPath();
24851
+ this.Canvas.moveTo(xFixed, yPrePrice);
24852
+ this.Canvas.lineTo(xFixed, yHigh);
24853
+ this.Canvas.strokeStyle=this.UpColor;
24854
+ this.Canvas.stroke();
24855
+ }
24856
+
24857
+ }
24858
+ else if (data.Direction==2)
24859
+ {
24860
+ if (data.Low>prePrice)
24861
+ {
24862
+ this.Canvas.lineTo(xFixed, yLow);
24863
+ this.Canvas.strokeStyle=this.DownColor; //阳线
24864
+ this.Canvas.stroke();
24865
+ }
24866
+ else
24867
+ {
24868
+ var yPrePrice=this.GetYFromData(prePrice,false);
24869
+ this.Canvas.lineTo(xFixed, yPrePrice);
24870
+ this.Canvas.strokeStyle=this.DownColor; //阳线
24871
+ this.Canvas.stroke();
24872
+
24873
+ this.Canvas.beginPath();
24874
+ this.Canvas.moveTo(xFixed, yPrePrice);
24875
+ this.Canvas.lineTo(xFixed, yLow);
24876
+ this.Canvas.strokeStyle=this.UpColor;
24877
+ this.Canvas.stroke();
24878
+ }
24879
+ }
24880
+
24881
+ }
24882
+ else
24883
+ {
24884
+ this.Canvas.beginPath();
24885
+ if (data.Direction==1)
24886
+ {
24887
+ this.Canvas.moveTo(xFixed, yLow);
24888
+ this.Canvas.lineTo(xFixed, yHigh);
24889
+ }
24890
+ else if (data.Direction==2)
24891
+ {
24892
+ this.Canvas.moveTo(xFixed, yHigh);
24893
+ this.Canvas.lineTo(xFixed, yLow);
24894
+ }
24895
+ this.Canvas.stroke();
24896
+ }
24897
+
24898
+ /*
24899
+ if (data.YClose<data.Close)
24900
+ {
24901
+ this.Canvas.strokeStyle=this.UpColor; //阳线
24902
+ this.Canvas.fillStyle=this.UpColor;
24903
+ }
24904
+ else if (data.YClose>data.Close)
24905
+ {
24906
+ this.Canvas.strokeStyle=this.DownColor; //阴线
24907
+ this.Canvas.fillStyle=this.DownColor;
24908
+ }
24909
+
24910
+ this.Canvas.beginPath();
24911
+ if (isHScreen)
24912
+ {
24913
+ this.Canvas.moveTo(yHigh,ToFixedPoint(x));
24914
+ this.Canvas.lineTo(yLow,ToFixedPoint(x));
24915
+ }
24916
+ else
24917
+ {
24918
+ this.Canvas.moveTo(ToFixedPoint2(lineWidth,x),yHigh);
24919
+ this.Canvas.lineTo(ToFixedPoint2(lineWidth,x),yLow);
24920
+ }
24921
+ this.Canvas.stroke();
24922
+ */
24923
+
24924
+ preItem.Item=data;
24925
+ preItem.X=x;
24926
+
24927
+ if (data.Direction==1) preItem.Y=yHigh; //上
24928
+ else if (data.Direction==2) preItem.Y=yLow //下
24929
+ }
24930
+
24931
+ this.PtMax=ptMax;
24932
+ this.PtMin=ptMin;
24933
+ }
24934
+
24716
24935
  this.DrawTrade=function() //交易系统
24717
24936
  {
24718
24937
  if (!this.TradeData) return;
@@ -25220,6 +25439,10 @@ function ChartKLine()
25220
25439
  {
25221
25440
  this.DrawHLCArea();
25222
25441
  }
25442
+ else if (this.DrawType==16)
25443
+ {
25444
+ this.DrawKagi();
25445
+ }
25223
25446
  else if (this.DrawType==17)
25224
25447
  {
25225
25448
  this.DrawOrderFlow_Style4();
@@ -48319,6 +48542,7 @@ function ChartCorssCursor()
48319
48542
 
48320
48543
  this.StringFormatY.Value=yValue;
48321
48544
  this.StringFormatY.FrameID=yValueExtend.FrameID;
48545
+ this.StringFormatY.RValue=yValueExtend.RightYValue; //右侧子坐标
48322
48546
  this.StringFormatY.Point={X:x, Y:y};
48323
48547
  this.StringFormatY.ClientPos=this.ClientPos;
48324
48548
 
@@ -49123,6 +49347,7 @@ function HQPriceStringFormat()
49123
49347
  {
49124
49348
  if (this.DataFormatType==1) this.Text=IFrameSplitOperator.FormatValueThousandsString(this.Value,defaultfloatPrecision);
49125
49349
  else this.Text=IFrameSplitOperator.FormatValueString(this.Value,defaultfloatPrecision,this.LanguageID);
49350
+ if (IFrameSplitOperator.IsNumber(this.RValue)) this.RText=IFrameSplitOperator.FormatValueString(this.RValue,defaultfloatPrecision,this.LanguageID);
49126
49351
  }
49127
49352
 
49128
49353
  if (this.GetEventCallback)
@@ -64368,7 +64593,11 @@ function JSChartResource()
64368
64593
  DateFont:`${14*GetDevicePixelRatio()}px 微软雅黑`,
64369
64594
  DateColor:'rgb(0,0,0)',
64370
64595
  BarColor:"rgb(207,207,207)",
64371
- BarAreaColor:"rgba(232,232,232,0.65)"
64596
+ BarAreaColor:"rgba(232,232,232,0.65)",
64597
+
64598
+ BarWidth:10,
64599
+ BarPadding:15, //上下留白
64600
+ MinCenterWidth:15
64372
64601
  }
64373
64602
  },
64374
64603
 
@@ -65013,6 +65242,9 @@ function JSChartResource()
65013
65242
  if (subItem.DateColor) this.ScrollBar.Slider.DateColor=subItem.DateColor;
65014
65243
  if (subItem.BarColor) this.ScrollBar.Slider.BarColor=subItem.BarColor;
65015
65244
  if (subItem.BarAreaColor) this.ScrollBar.Slider.BarAreaColor=subItem.BarAreaColor;
65245
+ if (IFrameSplitOperator.IsNumber(subItem.BarWidth)) this.ScrollBar.Slider.BarWidth=subItem.BarWidth;
65246
+ if (IFrameSplitOperator.IsNumber(subItem.BarPadding)) this.ScrollBar.Slider.BarPadding=subItem.BarPadding;
65247
+ if (IFrameSplitOperator.IsNumber(subItem.MinCenterWidth)) this.ScrollBar.Slider.MinCenterWidth=subItem.MinCenterWidth;
65016
65248
  }
65017
65249
 
65018
65250
  if (item.BGChart)
@@ -65760,20 +65992,24 @@ function RenkoCalculate()
65760
65992
  //
65761
65993
  function KagiCalculate()
65762
65994
  {
65763
- this.Symbol;
65764
- this.SourceData;
65765
- this.FloatPrecision=2; //品种小数位数
65766
- this.ATR={ Count:14 }; //使用ATR计算砖块大小
65995
+ this.newMethod=RenkoCalculate; //派生
65996
+ this.newMethod();
65997
+ delete this.newMethod;
65998
+
65999
+ this.ClassName="KagiCalculate";
66000
+ this.BrickSizeType=0;
66001
+ this.BrickSize=0.5; //固定大小
65767
66002
 
65768
66003
  this.RecvHistoryData=function(sourceData, option) //历史日线数据
65769
66004
  {
65770
66005
  this.Symbol=option.Symbol;
65771
66006
  this.SourceData=sourceData;
65772
66007
  this.FloatPrecision=GetfloatPrecision(this.Symbol);
65773
- return this.Calculate(sourceData);
66008
+ if (this.BrickSizeType==1) this.CalculateATR();
66009
+ return this.CalculateByClose(sourceData);
65774
66010
  }
65775
66011
 
65776
- this.Calculate=function(sourceData)
66012
+ this.CalculateByClose=function(sourceData)
65777
66013
  {
65778
66014
  var bindData=new ChartData();
65779
66015
  bindData.Data=[]
@@ -65784,13 +66020,139 @@ function KagiCalculate()
65784
66020
 
65785
66021
  if (!IFrameSplitOperator.IsNonEmptyArray(sourceData.Data)) return bindData;
65786
66022
 
65787
- var periodCount=this.ATR.Count;
66023
+ var brickSize=this.BrickSize;
66024
+ if (this.BrickSizeType==1) brickSize=this.ATR.BrickSize;
65788
66025
 
65789
66026
  var kItem=sourceData.Data[0];
65790
- this.LastData=HistoryData.Copy(kItem);
65791
- for(var i=1; i<sourceData.Data.length; )
66027
+ var kagiItem=HistoryData.Copy(kItem);
66028
+
66029
+ kagiItem.High=kagiItem.Low=kItem.Close;
66030
+ kagiItem.StartItem=kItem;
66031
+ kagiItem.Direction=0; //1 上 2=下
66032
+
66033
+ var T_MergeKData=function(dest, src)
66034
+ {
66035
+ dest.Vol+=src.Vol;
66036
+ dest.Amount+=src.Amount;
66037
+ }
66038
+
66039
+ var index=1;
66040
+ for( ;index<sourceData.Data.length;++index) //确定好方向
66041
+ {
66042
+ var kItem=sourceData.Data[index];
66043
+ if (kItem.Close>kagiItem.Close)
66044
+ {
66045
+ kagiItem.Direction=1;
66046
+ kagiItem.Close=kItem.Close;
66047
+ kagiItem.EndItem=kItem;
66048
+ kagiItem.High=kItem.Close;
66049
+ break;
66050
+ }
66051
+ else if (kItem.Close<kagiItem.Close)
66052
+ {
66053
+ kagiItem.Direction=2;
66054
+ kagiItem.Close=kItem.Close;
66055
+ kagiItem.EndItem=kItem;
66056
+ kagiItem.Low=kItem.Close;
66057
+ break;
66058
+ }
66059
+ }
66060
+
66061
+ var changeItem=null;
66062
+ for(++index; index<sourceData.Data.length;++index )
66063
+ {
66064
+ var kItem=sourceData.Data[index];
66065
+ if (kagiItem.Direction==1) //上
66066
+ {
66067
+ if (kItem.Close>=kagiItem.High)
66068
+ {
66069
+ kagiItem.Close=kItem.Close;
66070
+ kagiItem.High=kItem.Close;
66071
+ kagiItem.EndItem=kItem;
66072
+ changeItem=null;
66073
+ }
66074
+ else
66075
+ {
66076
+ if (!changeItem)
66077
+ {
66078
+ changeItem=HistoryData.Copy(kItem);
66079
+ changeItem.High=changeItem.Low=kItem.Close;
66080
+ }
66081
+ else
66082
+ {
66083
+ changeItem.Close=kItem.Close;
66084
+ if (changeItem.Low>kItem.Close) changeItem.Low=kItem.Close;
66085
+ }
66086
+
66087
+ if (Math.abs(changeItem.Low-kagiItem.High)>brickSize) //达到变盘点
66088
+ {
66089
+ bindData.Data.push(kagiItem);
66090
+
66091
+ var newItem=HistoryData.Copy(kItem);
66092
+ newItem.High=kagiItem.High;
66093
+ newItem.Low=kItem.Close;
66094
+ newItem.Direction=2; //1 上 2=下
66095
+ newItem.StartItem=kItem;
66096
+
66097
+ kagiItem=newItem;
66098
+ changeItem=null;
66099
+ }
66100
+ }
66101
+ }
66102
+ else if (kagiItem.Direction==2) //下
66103
+ {
66104
+ if (kItem.Close<=kagiItem.Low)
66105
+ {
66106
+ kagiItem.Close=kItem.Close;
66107
+ kagiItem.Low=kItem.Close;
66108
+ kagiItem.EndItem=kItem;
66109
+ }
66110
+ else
66111
+ {
66112
+ if (!changeItem)
66113
+ {
66114
+ changeItem=HistoryData.Copy(kItem);
66115
+ changeItem.High=changeItem.Low=kItem.Close;
66116
+ }
66117
+ else
66118
+ {
66119
+ changeItem.Close=kItem.Close;
66120
+ if (changeItem.High<kItem.Close) changeItem.High=kItem.Close;
66121
+ }
66122
+
66123
+ if (Math.abs(changeItem.High-kagiItem.Low)>brickSize) //达到变盘点
66124
+ {
66125
+ bindData.Data.push(kagiItem);
66126
+
66127
+ var newItem=HistoryData.Copy(kItem);
66128
+ newItem.High=kItem.Close;
66129
+ newItem.Low=kagiItem.Low;
66130
+ newItem.Direction=1; //1 上 2=下
66131
+ newItem.StartItem=kItem;
66132
+
66133
+ kagiItem=newItem;
66134
+ changeItem=null;
66135
+ }
66136
+ }
66137
+ }
66138
+ }
66139
+
66140
+ return bindData;
66141
+ }
66142
+
66143
+ //获取配置信息
66144
+ this.GetTitle=function()
66145
+ {
66146
+ if (this.BrickSizeType==1)
66147
+ {
66148
+ var text=`Kagi [ATR(${this.ATR.Count}), ${this.ATR.BrickSize}]`;
66149
+ }
66150
+ else
65792
66151
  {
66152
+ var text=`Kagi [Traditional]`;
65793
66153
  }
66154
+
66155
+ return text;
65794
66156
  }
65795
66157
  }
65796
66158
 
@@ -66118,8 +66480,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
66118
66480
  this.KLineCalculate=null; //K线定制指标计算
66119
66481
  this.KLineCalcOption=new Map(); //K线定制指标配置
66120
66482
 
66121
- this.ScrollBar=null; //横向滚动条
66122
-
66483
+ this.ScrollBar=null; //横向滚动条
66484
+ this.IsAutoSyncDataOffset=true; //增量更新时,是否移动当前屏数据
66123
66485
 
66124
66486
  this.GetKLineCalulate=function()
66125
66487
  {
@@ -67346,15 +67708,18 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
67346
67708
  var xPointCount=this.Frame.SubFrame[0].Frame.XPointCount; //当前一屏能显示的数据个数
67347
67709
 
67348
67710
  var newDataCount=0;
67349
- if (lastDataCount>0 && hisData.Data.length>lastDataCount)
67711
+ if (IFrameSplitOperator.IsNumber(lastDataCount))
67350
67712
  {
67351
- newDataCount=hisData.Data.length-lastDataCount;
67352
- JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
67353
- }
67354
- else if (lastDataCount==0 && hisData.Data.length>xPointCount) //历史数据为空,当前收到数据大于一屏的数据,显示最新数据
67355
- {
67356
- newDataCount=hisData.Data.length-xPointCount;
67357
- JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] history data is empty. [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
67713
+ if (lastDataCount>0 && hisData.Data.length>lastDataCount)
67714
+ {
67715
+ newDataCount=hisData.Data.length-lastDataCount;
67716
+ JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
67717
+ }
67718
+ else if (lastDataCount==0 && hisData.Data.length>xPointCount) //历史数据为空,当前收到数据大于一屏的数据,显示最新数据
67719
+ {
67720
+ newDataCount=hisData.Data.length-xPointCount;
67721
+ JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] history data is empty. [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
67722
+ }
67358
67723
  }
67359
67724
 
67360
67725
  this.ChartPaint[0].Data=hisData;
@@ -68746,7 +69111,9 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
68746
69111
  if (!this.SourceData) return;
68747
69112
  if (!this.SourceData.MergeMinuteData(aryMinuteData)) return;
68748
69113
 
68749
- JSConsole.Chart.Log(`[KLineChartContainer::RecvMinuteRealtimeDataV2] update kline by 1 minute data [${lastDataCount}->${this.SourceData.Data.length}]`);
69114
+ JSConsole.Chart.Log(`[KLineChartContainer::RecvMinuteRealtimeDataV2] update kline by 1 minute data [${lastDataCount}->${this.SourceData.Data.length}], IsAutoSyncDataOffset=${this.IsAutoSyncDataOffset}`);
69115
+
69116
+ if (this.IsAutoSyncDataOffset===false) lastDataCount=null; //维持当前的屏位置
68750
69117
 
68751
69118
  var bindData=new ChartData();
68752
69119
  bindData.Data=this.SourceData.Data;
@@ -69398,12 +69765,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
69398
69765
  //删除某一个窗口的指标, bCallDestory=是否调用图形销毁函数
69399
69766
  this.DeleteIndexPaint=function(windowIndex, bCallDestroy)
69400
69767
  {
69401
- let paint=new Array(); //踢出当前窗口的指标画法
69402
- for(let i in this.ChartPaint)
69768
+ if (!this.Frame.SubFrame[windowIndex]) return;
69769
+ var subFrame=this.Frame.SubFrame[windowIndex].Frame;
69770
+ if (!subFrame) return;
69771
+
69772
+ var paint=[]; //踢出当前窗口的指标画法
69773
+ for(var i=0;i<this.ChartPaint.length; ++i)
69403
69774
  {
69404
- let item=this.ChartPaint[i];
69775
+ var item=this.ChartPaint[i];
69776
+ var bFind=(item.ChartFrame.Guid==subFrame.Guid || item.ChartFrame==subFrame);
69405
69777
 
69406
- if (i==0 || item.ChartFrame!=this.Frame.SubFrame[windowIndex].Frame)
69778
+ if (i==0 || !bFind)
69407
69779
  {
69408
69780
  paint.push(item);
69409
69781
  }
@@ -69416,7 +69788,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
69416
69788
  }
69417
69789
  }
69418
69790
 
69419
- var subFrame=this.Frame.SubFrame[windowIndex].Frame;
69791
+
69420
69792
  subFrame.YSpecificMaxMin=null; //清空指定最大最小值
69421
69793
  subFrame.IsLocked=false; //解除上锁
69422
69794
  subFrame.YSplitScale = null; //清空固定刻度
@@ -75150,6 +75522,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
75150
75522
  }
75151
75523
 
75152
75524
  var subFrame=new SubFrameItem();
75525
+ frame.FrameData.SubFrameItem=subFrame;
75153
75526
  subFrame.Frame=frame;
75154
75527
  if (i==0)
75155
75528
  subFrame.Height=20;
@@ -75236,6 +75609,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
75236
75609
  }
75237
75610
 
75238
75611
  var subFrame=new SubFrameItem();
75612
+ frame.FrameData.SubFrameItem=subFrame;
75239
75613
  subFrame.Frame=frame;
75240
75614
  subFrame.Height=10;
75241
75615
 
@@ -75307,12 +75681,16 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
75307
75681
  //删除某一个窗口的指标
75308
75682
  this.DeleteIndexPaint=function(windowIndex,bCallDestroy)
75309
75683
  {
75310
- let paint=new Array(); //踢出当前窗口的指标画法
75311
- for(let i in this.ChartPaint)
75684
+ var subFrame=this.Frame.SubFrame[windowIndex].Frame;
75685
+ if (!subFrame) return;
75686
+
75687
+ var paint=[]; //踢出当前窗口的指标画法
75688
+ for(var i=0;i<this.ChartPaint.length;++i)
75312
75689
  {
75313
- let item=this.ChartPaint[i];
75690
+ var item=this.ChartPaint[i];
75691
+ var bFind=(item.ChartFrame.Guid==subFrame.Guid || item.ChartFrame==subFrame);
75314
75692
 
75315
- if (i==0 || item.ChartFrame!=this.Frame.SubFrame[windowIndex].Frame)
75693
+ if (i==0 || !bFind)
75316
75694
  {
75317
75695
  paint.push(item);
75318
75696
  }
@@ -75326,7 +75704,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
75326
75704
  }
75327
75705
 
75328
75706
  //清空指定最大最小值
75329
- var subFrame=this.Frame.SubFrame[windowIndex].Frame;
75707
+
75330
75708
  subFrame.YSpecificMaxMin=null;
75331
75709
  subFrame.IsLocked=false; //解除上锁
75332
75710
  subFrame.YSplitOperator.SplitType=subFrame.YSplitOperator.DefaultSplitType; //还原Y坐标分割模式
@@ -80649,6 +81027,7 @@ function KLineChartHScreenContainer(uielement)
80649
81027
  }
80650
81028
 
80651
81029
  var subFrame=new SubFrameItem();
81030
+ frame.FrameData.SubFrameItem=subFrame;
80652
81031
  subFrame.Frame=frame;
80653
81032
  if (i==0)
80654
81033
  subFrame.Height=20;
@@ -80793,6 +81172,7 @@ function MinuteChartHScreenContainer(uielement)
80793
81172
  }
80794
81173
 
80795
81174
  var subFrame=new SubFrameItem();
81175
+ frame.FrameData.SubFrameItem=subFrame;
80796
81176
  subFrame.Frame=frame;
80797
81177
  if (i==0)
80798
81178
  subFrame.Height=20;
@@ -462,11 +462,11 @@ function JSScrollBarChartContainer(uielement)
462
462
  switch(item.Data.Type)
463
463
  {
464
464
  case 0:
465
- mouseStatus={ Cursor:"move", Name:"SliderChart"};
465
+ mouseStatus={ Cursor:"grab", Name:"SliderChart"};
466
466
  break;
467
467
  case 1:
468
468
  case 2:
469
- mouseStatus={ Cursor:"ew-resize", Name:"SliderChart"};
469
+ mouseStatus={ Cursor:"col-resize", Name:"SliderChart"};
470
470
  break;
471
471
  }
472
472
  }
@@ -536,6 +536,10 @@ function JSScrollBarChartContainer(uielement)
536
536
  {
537
537
  xStart=pageRange.First.XStart;
538
538
  }
539
+ else if (xStart>=right)
540
+ {
541
+ xStart=pageRange.Last.XEnd;
542
+ }
539
543
 
540
544
  this.SliderChart.XStart=xStart;
541
545
  }
@@ -545,6 +549,10 @@ function JSScrollBarChartContainer(uielement)
545
549
  {
546
550
  xEnd=pageRange.Last.XEnd;
547
551
  }
552
+ else if (xEnd<=left)
553
+ {
554
+ xEnd=pageRange.First.XStart;
555
+ }
548
556
 
549
557
  this.SliderChart.XEnd=xEnd;
550
558
  }
@@ -1089,8 +1097,9 @@ function SliderChart()
1089
1097
  this.Color=g_JSChartResource.ScrollBar.Slider.BarAreaColor;
1090
1098
 
1091
1099
  this.BarColor=g_JSChartResource.ScrollBar.Slider.BarColor;
1092
- this.BarWidth=10;
1093
- this.BarPadding=10; //上下留白
1100
+ this.BarWidth=g_JSChartResource.ScrollBar.Slider.BarWidth;
1101
+ this.BarPadding=g_JSChartResource.ScrollBar.Slider.BarPadding; //上下留白
1102
+ this.MinCenterWidth=g_JSChartResource.ScrollBar.Slider.MinCenterWidth;
1094
1103
 
1095
1104
  this.DateFont=g_JSChartResource.ScrollBar.Slider.DateFont;
1096
1105
  this.DateColor=g_JSChartResource.ScrollBar.Slider.DateColor;
@@ -1150,6 +1159,12 @@ function SliderChart()
1150
1159
  var rtBar={ Left:Math.min(xStart,xEnd), Top:top, Width:Math.abs(xEnd-xStart), Height: bottom-top};
1151
1160
  rtBar.Right=rtBar.Left+rtBar.Width;
1152
1161
  rtBar.Bottom=rtBar.Top+rtBar.Height;
1162
+ if (rtBar.Width<this.MinCenterWidth)
1163
+ {
1164
+ rtBar.Left-=(this.MinCenterWidth-rtBar.Width)/2;
1165
+ rtBar.Width=this.MinCenterWidth;
1166
+ rtBar.Right=rtBar.Left+rtBar.Width;
1167
+ }
1153
1168
  this.Canvas.fillRect(rtBar.Left, rtBar.Top, rtBar.Width, rtBar.Height);
1154
1169
  this.AryRect.push({ Rect:rtBar, Type:0});
1155
1170