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.
@@ -22482,7 +22482,34 @@ function HQTradeHScreenFrame()
22482
22482
  }
22483
22483
  }
22484
22484
 
22485
- if (frame!=null) return frame.GetYData(x);
22485
+ if (frame!=null)
22486
+ {
22487
+ var xValue= frame.GetYData(x);
22488
+
22489
+ if (frame.GetMainOverlayFrame)
22490
+ {
22491
+ var aryOverlayFrame=frame.GetMainOverlayFrame();
22492
+ if (aryOverlayFrame)
22493
+ {
22494
+ if (aryOverlayFrame[0]) //左侧
22495
+ {
22496
+ var leftFrame=aryOverlayFrame[0];
22497
+ var value=leftFrame.GetYData(x);
22498
+ outObject.RightYValue=xValue;
22499
+ xValue=value;
22500
+ }
22501
+
22502
+ if (aryOverlayFrame[1]) //右侧
22503
+ {
22504
+ var rightFrame=aryOverlayFrame[1];
22505
+ var value=rightFrame.GetYData(x);
22506
+ outObject.RightYValue=value;
22507
+ }
22508
+ }
22509
+ }
22510
+
22511
+ return xValue;
22512
+ }
22486
22513
  }
22487
22514
  }
22488
22515
 
@@ -28605,6 +28632,198 @@ function ChartKLine()
28605
28632
  this.PtMin=ptMin;
28606
28633
  }
28607
28634
 
28635
+ this.DrawKagi=function() //卡吉图
28636
+ {
28637
+ var isHScreen=(this.ChartFrame.IsHScreen===true);
28638
+ var dataWidth=this.ChartFrame.DataWidth;
28639
+ var distanceWidth=this.ChartFrame.DistanceWidth;
28640
+ var xPointCount=this.ChartFrame.XPointCount;
28641
+
28642
+ if (isHScreen)
28643
+ {
28644
+ var border=this.ChartBorder.GetHScreenBorder();
28645
+ var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
28646
+ var chartright=border.BottomEx;
28647
+ var left=border.TopEx+g_JSChartResource.FrameLeftMargin;
28648
+ }
28649
+ else
28650
+ {
28651
+ var border=this.ChartBorder.GetBorder();
28652
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
28653
+ var chartright=border.RightEx;
28654
+ var left=border.Left+g_JSChartResource.FrameLeftMargin;
28655
+ }
28656
+
28657
+ var ptMax={X:null,Y:null,Value:null,Align:'left'};
28658
+ var ptMin={X:null,Y:null,Value:null,Align:'left'};
28659
+ this.ShowRange.Start=this.Data.DataOffset;
28660
+ this.ShowRange.End=this.ShowRange.Start;
28661
+ this.ShowRange.DataCount=0;
28662
+ this.ShowRange.ShowCount=xPointCount;
28663
+ this.DrawKRange.Start=this.Data.DataOffset;
28664
+
28665
+ var lineWidth=2*GetDevicePixelRatio();
28666
+ this.Canvas.lineWidth=lineWidth;
28667
+ var preItem={ Item:null, X:left, Y:null };
28668
+ var index=this.Data.DataOffset-1;
28669
+ if (index>=0 && index<this.Data.Data.length)
28670
+ {
28671
+ var item=this.Data.Data[index];
28672
+ preItem.Item=item;
28673
+ if (item.Direction==1) //上
28674
+ {
28675
+ preItem.Y=this.GetYFromData(item.High,false);
28676
+ }
28677
+ else if (item.Direction==2)
28678
+ {
28679
+ preItem.Y=this.GetYFromData(item.Low,false);
28680
+ }
28681
+ }
28682
+
28683
+
28684
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth),++this.ShowRange.DataCount)
28685
+ {
28686
+ var data=this.Data.Data[i];
28687
+ this.ShowRange.End=i;
28688
+ if (data.Open==null || data.High==null || data.Low==null || data.Close==null) continue;
28689
+
28690
+ var left=xOffset;
28691
+ var right=xOffset+dataWidth;
28692
+ if (right>chartright) break;
28693
+ var x=left+(right-left)/2;
28694
+ var yLow=this.GetYFromData(data.Low,false);
28695
+ var yHigh=this.GetYFromData(data.High,false);
28696
+ this.DrawKRange.End=i;
28697
+
28698
+ if (ptMax.Value==null || ptMax.Value<data.High) //求最大值
28699
+ {
28700
+ ptMax.X=x;
28701
+ ptMax.Y=yHigh;
28702
+ ptMax.Value=data.High;
28703
+ ptMax.Align=j<xPointCount/2?'left':'right';
28704
+ }
28705
+
28706
+ if (ptMin.Value==null || ptMin.Value>data.Low) //求最小值
28707
+ {
28708
+ ptMin.X=x;
28709
+ ptMin.Y=yLow;
28710
+ ptMin.Value=data.Low;
28711
+ ptMin.Align=j<xPointCount/2?'left':'right';
28712
+ }
28713
+
28714
+ var xFixed=ToFixedPoint2(lineWidth,x);
28715
+
28716
+ if (preItem.Item)
28717
+ {
28718
+ this.Canvas.beginPath();
28719
+ var yFixed=ToFixedPoint2(lineWidth,preItem.Y);
28720
+
28721
+ this.Canvas.moveTo(preItem.X, yFixed);
28722
+ this.Canvas.lineTo(xFixed, yFixed);
28723
+ var prePrice=null;
28724
+ if (preItem.Item.Direction==1) prePrice=preItem.Item.Low;
28725
+ else if (preItem.Item.Direction==2) prePrice=preItem.Item.High;
28726
+
28727
+ if (data.Direction==1)
28728
+ {
28729
+ if (data.High<prePrice)
28730
+ {
28731
+ this.Canvas.lineTo(xFixed, yHigh);
28732
+ this.Canvas.strokeStyle=this.DownColor;
28733
+ this.Canvas.stroke();
28734
+ }
28735
+ else
28736
+ {
28737
+ var yPrePrice=this.GetYFromData(prePrice,false);
28738
+ this.Canvas.lineTo(xFixed, yPrePrice);
28739
+ this.Canvas.strokeStyle=this.DownColor;
28740
+ this.Canvas.stroke();
28741
+
28742
+ this.Canvas.beginPath();
28743
+ this.Canvas.moveTo(xFixed, yPrePrice);
28744
+ this.Canvas.lineTo(xFixed, yHigh);
28745
+ this.Canvas.strokeStyle=this.UpColor;
28746
+ this.Canvas.stroke();
28747
+ }
28748
+
28749
+ }
28750
+ else if (data.Direction==2)
28751
+ {
28752
+ if (data.Low>prePrice)
28753
+ {
28754
+ this.Canvas.lineTo(xFixed, yLow);
28755
+ this.Canvas.strokeStyle=this.DownColor; //阳线
28756
+ this.Canvas.stroke();
28757
+ }
28758
+ else
28759
+ {
28760
+ var yPrePrice=this.GetYFromData(prePrice,false);
28761
+ this.Canvas.lineTo(xFixed, yPrePrice);
28762
+ this.Canvas.strokeStyle=this.DownColor; //阳线
28763
+ this.Canvas.stroke();
28764
+
28765
+ this.Canvas.beginPath();
28766
+ this.Canvas.moveTo(xFixed, yPrePrice);
28767
+ this.Canvas.lineTo(xFixed, yLow);
28768
+ this.Canvas.strokeStyle=this.UpColor;
28769
+ this.Canvas.stroke();
28770
+ }
28771
+ }
28772
+
28773
+ }
28774
+ else
28775
+ {
28776
+ this.Canvas.beginPath();
28777
+ if (data.Direction==1)
28778
+ {
28779
+ this.Canvas.moveTo(xFixed, yLow);
28780
+ this.Canvas.lineTo(xFixed, yHigh);
28781
+ }
28782
+ else if (data.Direction==2)
28783
+ {
28784
+ this.Canvas.moveTo(xFixed, yHigh);
28785
+ this.Canvas.lineTo(xFixed, yLow);
28786
+ }
28787
+ this.Canvas.stroke();
28788
+ }
28789
+
28790
+ /*
28791
+ if (data.YClose<data.Close)
28792
+ {
28793
+ this.Canvas.strokeStyle=this.UpColor; //阳线
28794
+ this.Canvas.fillStyle=this.UpColor;
28795
+ }
28796
+ else if (data.YClose>data.Close)
28797
+ {
28798
+ this.Canvas.strokeStyle=this.DownColor; //阴线
28799
+ this.Canvas.fillStyle=this.DownColor;
28800
+ }
28801
+
28802
+ this.Canvas.beginPath();
28803
+ if (isHScreen)
28804
+ {
28805
+ this.Canvas.moveTo(yHigh,ToFixedPoint(x));
28806
+ this.Canvas.lineTo(yLow,ToFixedPoint(x));
28807
+ }
28808
+ else
28809
+ {
28810
+ this.Canvas.moveTo(ToFixedPoint2(lineWidth,x),yHigh);
28811
+ this.Canvas.lineTo(ToFixedPoint2(lineWidth,x),yLow);
28812
+ }
28813
+ this.Canvas.stroke();
28814
+ */
28815
+
28816
+ preItem.Item=data;
28817
+ preItem.X=x;
28818
+
28819
+ if (data.Direction==1) preItem.Y=yHigh; //上
28820
+ else if (data.Direction==2) preItem.Y=yLow //下
28821
+ }
28822
+
28823
+ this.PtMax=ptMax;
28824
+ this.PtMin=ptMin;
28825
+ }
28826
+
28608
28827
  this.DrawTrade=function() //交易系统
28609
28828
  {
28610
28829
  if (!this.TradeData) return;
@@ -29112,6 +29331,10 @@ function ChartKLine()
29112
29331
  {
29113
29332
  this.DrawHLCArea();
29114
29333
  }
29334
+ else if (this.DrawType==16)
29335
+ {
29336
+ this.DrawKagi();
29337
+ }
29115
29338
  else if (this.DrawType==17)
29116
29339
  {
29117
29340
  this.DrawOrderFlow_Style4();
@@ -52211,6 +52434,7 @@ function ChartCorssCursor()
52211
52434
 
52212
52435
  this.StringFormatY.Value=yValue;
52213
52436
  this.StringFormatY.FrameID=yValueExtend.FrameID;
52437
+ this.StringFormatY.RValue=yValueExtend.RightYValue; //右侧子坐标
52214
52438
  this.StringFormatY.Point={X:x, Y:y};
52215
52439
  this.StringFormatY.ClientPos=this.ClientPos;
52216
52440
 
@@ -53015,6 +53239,7 @@ function HQPriceStringFormat()
53015
53239
  {
53016
53240
  if (this.DataFormatType==1) this.Text=IFrameSplitOperator.FormatValueThousandsString(this.Value,defaultfloatPrecision);
53017
53241
  else this.Text=IFrameSplitOperator.FormatValueString(this.Value,defaultfloatPrecision,this.LanguageID);
53242
+ if (IFrameSplitOperator.IsNumber(this.RValue)) this.RText=IFrameSplitOperator.FormatValueString(this.RValue,defaultfloatPrecision,this.LanguageID);
53018
53243
  }
53019
53244
 
53020
53245
  if (this.GetEventCallback)
@@ -68260,7 +68485,11 @@ function JSChartResource()
68260
68485
  DateFont:`${14*GetDevicePixelRatio()}px 微软雅黑`,
68261
68486
  DateColor:'rgb(0,0,0)',
68262
68487
  BarColor:"rgb(207,207,207)",
68263
- BarAreaColor:"rgba(232,232,232,0.65)"
68488
+ BarAreaColor:"rgba(232,232,232,0.65)",
68489
+
68490
+ BarWidth:10,
68491
+ BarPadding:15, //上下留白
68492
+ MinCenterWidth:15
68264
68493
  }
68265
68494
  },
68266
68495
 
@@ -68905,6 +69134,9 @@ function JSChartResource()
68905
69134
  if (subItem.DateColor) this.ScrollBar.Slider.DateColor=subItem.DateColor;
68906
69135
  if (subItem.BarColor) this.ScrollBar.Slider.BarColor=subItem.BarColor;
68907
69136
  if (subItem.BarAreaColor) this.ScrollBar.Slider.BarAreaColor=subItem.BarAreaColor;
69137
+ if (IFrameSplitOperator.IsNumber(subItem.BarWidth)) this.ScrollBar.Slider.BarWidth=subItem.BarWidth;
69138
+ if (IFrameSplitOperator.IsNumber(subItem.BarPadding)) this.ScrollBar.Slider.BarPadding=subItem.BarPadding;
69139
+ if (IFrameSplitOperator.IsNumber(subItem.MinCenterWidth)) this.ScrollBar.Slider.MinCenterWidth=subItem.MinCenterWidth;
68908
69140
  }
68909
69141
 
68910
69142
  if (item.BGChart)
@@ -69652,20 +69884,24 @@ function RenkoCalculate()
69652
69884
  //
69653
69885
  function KagiCalculate()
69654
69886
  {
69655
- this.Symbol;
69656
- this.SourceData;
69657
- this.FloatPrecision=2; //品种小数位数
69658
- this.ATR={ Count:14 }; //使用ATR计算砖块大小
69887
+ this.newMethod=RenkoCalculate; //派生
69888
+ this.newMethod();
69889
+ delete this.newMethod;
69890
+
69891
+ this.ClassName="KagiCalculate";
69892
+ this.BrickSizeType=0;
69893
+ this.BrickSize=0.5; //固定大小
69659
69894
 
69660
69895
  this.RecvHistoryData=function(sourceData, option) //历史日线数据
69661
69896
  {
69662
69897
  this.Symbol=option.Symbol;
69663
69898
  this.SourceData=sourceData;
69664
69899
  this.FloatPrecision=GetfloatPrecision(this.Symbol);
69665
- return this.Calculate(sourceData);
69900
+ if (this.BrickSizeType==1) this.CalculateATR();
69901
+ return this.CalculateByClose(sourceData);
69666
69902
  }
69667
69903
 
69668
- this.Calculate=function(sourceData)
69904
+ this.CalculateByClose=function(sourceData)
69669
69905
  {
69670
69906
  var bindData=new ChartData();
69671
69907
  bindData.Data=[]
@@ -69676,13 +69912,139 @@ function KagiCalculate()
69676
69912
 
69677
69913
  if (!IFrameSplitOperator.IsNonEmptyArray(sourceData.Data)) return bindData;
69678
69914
 
69679
- var periodCount=this.ATR.Count;
69915
+ var brickSize=this.BrickSize;
69916
+ if (this.BrickSizeType==1) brickSize=this.ATR.BrickSize;
69680
69917
 
69681
69918
  var kItem=sourceData.Data[0];
69682
- this.LastData=HistoryData.Copy(kItem);
69683
- for(var i=1; i<sourceData.Data.length; )
69919
+ var kagiItem=HistoryData.Copy(kItem);
69920
+
69921
+ kagiItem.High=kagiItem.Low=kItem.Close;
69922
+ kagiItem.StartItem=kItem;
69923
+ kagiItem.Direction=0; //1 上 2=下
69924
+
69925
+ var T_MergeKData=function(dest, src)
69926
+ {
69927
+ dest.Vol+=src.Vol;
69928
+ dest.Amount+=src.Amount;
69929
+ }
69930
+
69931
+ var index=1;
69932
+ for( ;index<sourceData.Data.length;++index) //确定好方向
69684
69933
  {
69934
+ var kItem=sourceData.Data[index];
69935
+ if (kItem.Close>kagiItem.Close)
69936
+ {
69937
+ kagiItem.Direction=1;
69938
+ kagiItem.Close=kItem.Close;
69939
+ kagiItem.EndItem=kItem;
69940
+ kagiItem.High=kItem.Close;
69941
+ break;
69942
+ }
69943
+ else if (kItem.Close<kagiItem.Close)
69944
+ {
69945
+ kagiItem.Direction=2;
69946
+ kagiItem.Close=kItem.Close;
69947
+ kagiItem.EndItem=kItem;
69948
+ kagiItem.Low=kItem.Close;
69949
+ break;
69950
+ }
69685
69951
  }
69952
+
69953
+ var changeItem=null;
69954
+ for(++index; index<sourceData.Data.length;++index )
69955
+ {
69956
+ var kItem=sourceData.Data[index];
69957
+ if (kagiItem.Direction==1) //上
69958
+ {
69959
+ if (kItem.Close>=kagiItem.High)
69960
+ {
69961
+ kagiItem.Close=kItem.Close;
69962
+ kagiItem.High=kItem.Close;
69963
+ kagiItem.EndItem=kItem;
69964
+ changeItem=null;
69965
+ }
69966
+ else
69967
+ {
69968
+ if (!changeItem)
69969
+ {
69970
+ changeItem=HistoryData.Copy(kItem);
69971
+ changeItem.High=changeItem.Low=kItem.Close;
69972
+ }
69973
+ else
69974
+ {
69975
+ changeItem.Close=kItem.Close;
69976
+ if (changeItem.Low>kItem.Close) changeItem.Low=kItem.Close;
69977
+ }
69978
+
69979
+ if (Math.abs(changeItem.Low-kagiItem.High)>brickSize) //达到变盘点
69980
+ {
69981
+ bindData.Data.push(kagiItem);
69982
+
69983
+ var newItem=HistoryData.Copy(kItem);
69984
+ newItem.High=kagiItem.High;
69985
+ newItem.Low=kItem.Close;
69986
+ newItem.Direction=2; //1 上 2=下
69987
+ newItem.StartItem=kItem;
69988
+
69989
+ kagiItem=newItem;
69990
+ changeItem=null;
69991
+ }
69992
+ }
69993
+ }
69994
+ else if (kagiItem.Direction==2) //下
69995
+ {
69996
+ if (kItem.Close<=kagiItem.Low)
69997
+ {
69998
+ kagiItem.Close=kItem.Close;
69999
+ kagiItem.Low=kItem.Close;
70000
+ kagiItem.EndItem=kItem;
70001
+ }
70002
+ else
70003
+ {
70004
+ if (!changeItem)
70005
+ {
70006
+ changeItem=HistoryData.Copy(kItem);
70007
+ changeItem.High=changeItem.Low=kItem.Close;
70008
+ }
70009
+ else
70010
+ {
70011
+ changeItem.Close=kItem.Close;
70012
+ if (changeItem.High<kItem.Close) changeItem.High=kItem.Close;
70013
+ }
70014
+
70015
+ if (Math.abs(changeItem.High-kagiItem.Low)>brickSize) //达到变盘点
70016
+ {
70017
+ bindData.Data.push(kagiItem);
70018
+
70019
+ var newItem=HistoryData.Copy(kItem);
70020
+ newItem.High=kItem.Close;
70021
+ newItem.Low=kagiItem.Low;
70022
+ newItem.Direction=1; //1 上 2=下
70023
+ newItem.StartItem=kItem;
70024
+
70025
+ kagiItem=newItem;
70026
+ changeItem=null;
70027
+ }
70028
+ }
70029
+ }
70030
+ }
70031
+
70032
+ return bindData;
70033
+ }
70034
+
70035
+ //获取配置信息
70036
+ this.GetTitle=function()
70037
+ {
70038
+ if (this.BrickSizeType==1)
70039
+ {
70040
+ var text=`Kagi [ATR(${this.ATR.Count}), ${this.ATR.BrickSize}]`;
70041
+ }
70042
+ else
70043
+ {
70044
+ var text=`Kagi [Traditional]`;
70045
+ }
70046
+
70047
+ return text;
69686
70048
  }
69687
70049
  }
69688
70050
 
@@ -70010,8 +70372,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
70010
70372
  this.KLineCalculate=null; //K线定制指标计算
70011
70373
  this.KLineCalcOption=new Map(); //K线定制指标配置
70012
70374
 
70013
- this.ScrollBar=null; //横向滚动条
70014
-
70375
+ this.ScrollBar=null; //横向滚动条
70376
+ this.IsAutoSyncDataOffset=true; //增量更新时,是否移动当前屏数据
70015
70377
 
70016
70378
  this.GetKLineCalulate=function()
70017
70379
  {
@@ -71238,15 +71600,18 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
71238
71600
  var xPointCount=this.Frame.SubFrame[0].Frame.XPointCount; //当前一屏能显示的数据个数
71239
71601
 
71240
71602
  var newDataCount=0;
71241
- if (lastDataCount>0 && hisData.Data.length>lastDataCount)
71603
+ if (IFrameSplitOperator.IsNumber(lastDataCount))
71242
71604
  {
71243
- newDataCount=hisData.Data.length-lastDataCount;
71244
- JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
71245
- }
71246
- else if (lastDataCount==0 && hisData.Data.length>xPointCount) //历史数据为空,当前收到数据大于一屏的数据,显示最新数据
71247
- {
71248
- newDataCount=hisData.Data.length-xPointCount;
71249
- JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] history data is empty. [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
71605
+ if (lastDataCount>0 && hisData.Data.length>lastDataCount)
71606
+ {
71607
+ newDataCount=hisData.Data.length-lastDataCount;
71608
+ JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
71609
+ }
71610
+ else if (lastDataCount==0 && hisData.Data.length>xPointCount) //历史数据为空,当前收到数据大于一屏的数据,显示最新数据
71611
+ {
71612
+ newDataCount=hisData.Data.length-xPointCount;
71613
+ JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] history data is empty. [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
71614
+ }
71250
71615
  }
71251
71616
 
71252
71617
  this.ChartPaint[0].Data=hisData;
@@ -72638,7 +73003,9 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72638
73003
  if (!this.SourceData) return;
72639
73004
  if (!this.SourceData.MergeMinuteData(aryMinuteData)) return;
72640
73005
 
72641
- JSConsole.Chart.Log(`[KLineChartContainer::RecvMinuteRealtimeDataV2] update kline by 1 minute data [${lastDataCount}->${this.SourceData.Data.length}]`);
73006
+ JSConsole.Chart.Log(`[KLineChartContainer::RecvMinuteRealtimeDataV2] update kline by 1 minute data [${lastDataCount}->${this.SourceData.Data.length}], IsAutoSyncDataOffset=${this.IsAutoSyncDataOffset}`);
73007
+
73008
+ if (this.IsAutoSyncDataOffset===false) lastDataCount=null; //维持当前的屏位置
72642
73009
 
72643
73010
  var bindData=new ChartData();
72644
73011
  bindData.Data=this.SourceData.Data;
@@ -73290,12 +73657,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
73290
73657
  //删除某一个窗口的指标, bCallDestory=是否调用图形销毁函数
73291
73658
  this.DeleteIndexPaint=function(windowIndex, bCallDestroy)
73292
73659
  {
73293
- let paint=new Array(); //踢出当前窗口的指标画法
73294
- for(let i in this.ChartPaint)
73660
+ if (!this.Frame.SubFrame[windowIndex]) return;
73661
+ var subFrame=this.Frame.SubFrame[windowIndex].Frame;
73662
+ if (!subFrame) return;
73663
+
73664
+ var paint=[]; //踢出当前窗口的指标画法
73665
+ for(var i=0;i<this.ChartPaint.length; ++i)
73295
73666
  {
73296
- let item=this.ChartPaint[i];
73667
+ var item=this.ChartPaint[i];
73668
+ var bFind=(item.ChartFrame.Guid==subFrame.Guid || item.ChartFrame==subFrame);
73297
73669
 
73298
- if (i==0 || item.ChartFrame!=this.Frame.SubFrame[windowIndex].Frame)
73670
+ if (i==0 || !bFind)
73299
73671
  {
73300
73672
  paint.push(item);
73301
73673
  }
@@ -73308,7 +73680,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
73308
73680
  }
73309
73681
  }
73310
73682
 
73311
- var subFrame=this.Frame.SubFrame[windowIndex].Frame;
73683
+
73312
73684
  subFrame.YSpecificMaxMin=null; //清空指定最大最小值
73313
73685
  subFrame.IsLocked=false; //解除上锁
73314
73686
  subFrame.YSplitScale = null; //清空固定刻度
@@ -79042,6 +79414,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
79042
79414
  }
79043
79415
 
79044
79416
  var subFrame=new SubFrameItem();
79417
+ frame.FrameData.SubFrameItem=subFrame;
79045
79418
  subFrame.Frame=frame;
79046
79419
  if (i==0)
79047
79420
  subFrame.Height=20;
@@ -79128,6 +79501,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
79128
79501
  }
79129
79502
 
79130
79503
  var subFrame=new SubFrameItem();
79504
+ frame.FrameData.SubFrameItem=subFrame;
79131
79505
  subFrame.Frame=frame;
79132
79506
  subFrame.Height=10;
79133
79507
 
@@ -79199,12 +79573,16 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
79199
79573
  //删除某一个窗口的指标
79200
79574
  this.DeleteIndexPaint=function(windowIndex,bCallDestroy)
79201
79575
  {
79202
- let paint=new Array(); //踢出当前窗口的指标画法
79203
- for(let i in this.ChartPaint)
79576
+ var subFrame=this.Frame.SubFrame[windowIndex].Frame;
79577
+ if (!subFrame) return;
79578
+
79579
+ var paint=[]; //踢出当前窗口的指标画法
79580
+ for(var i=0;i<this.ChartPaint.length;++i)
79204
79581
  {
79205
- let item=this.ChartPaint[i];
79582
+ var item=this.ChartPaint[i];
79583
+ var bFind=(item.ChartFrame.Guid==subFrame.Guid || item.ChartFrame==subFrame);
79206
79584
 
79207
- if (i==0 || item.ChartFrame!=this.Frame.SubFrame[windowIndex].Frame)
79585
+ if (i==0 || !bFind)
79208
79586
  {
79209
79587
  paint.push(item);
79210
79588
  }
@@ -79218,7 +79596,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
79218
79596
  }
79219
79597
 
79220
79598
  //清空指定最大最小值
79221
- var subFrame=this.Frame.SubFrame[windowIndex].Frame;
79599
+
79222
79600
  subFrame.YSpecificMaxMin=null;
79223
79601
  subFrame.IsLocked=false; //解除上锁
79224
79602
  subFrame.YSplitOperator.SplitType=subFrame.YSplitOperator.DefaultSplitType; //还原Y坐标分割模式
@@ -84541,6 +84919,7 @@ function KLineChartHScreenContainer(uielement)
84541
84919
  }
84542
84920
 
84543
84921
  var subFrame=new SubFrameItem();
84922
+ frame.FrameData.SubFrameItem=subFrame;
84544
84923
  subFrame.Frame=frame;
84545
84924
  if (i==0)
84546
84925
  subFrame.Height=20;
@@ -84685,6 +85064,7 @@ function MinuteChartHScreenContainer(uielement)
84685
85064
  }
84686
85065
 
84687
85066
  var subFrame=new SubFrameItem();
85067
+ frame.FrameData.SubFrameItem=subFrame;
84688
85068
  subFrame.Frame=frame;
84689
85069
  if (i==0)
84690
85070
  subFrame.Height=20;
@@ -130888,11 +131268,11 @@ function JSScrollBarChartContainer(uielement)
130888
131268
  switch(item.Data.Type)
130889
131269
  {
130890
131270
  case 0:
130891
- mouseStatus={ Cursor:"move", Name:"SliderChart"};
131271
+ mouseStatus={ Cursor:"grab", Name:"SliderChart"};
130892
131272
  break;
130893
131273
  case 1:
130894
131274
  case 2:
130895
- mouseStatus={ Cursor:"ew-resize", Name:"SliderChart"};
131275
+ mouseStatus={ Cursor:"col-resize", Name:"SliderChart"};
130896
131276
  break;
130897
131277
  }
130898
131278
  }
@@ -130962,6 +131342,10 @@ function JSScrollBarChartContainer(uielement)
130962
131342
  {
130963
131343
  xStart=pageRange.First.XStart;
130964
131344
  }
131345
+ else if (xStart>=right)
131346
+ {
131347
+ xStart=pageRange.Last.XEnd;
131348
+ }
130965
131349
 
130966
131350
  this.SliderChart.XStart=xStart;
130967
131351
  }
@@ -130971,6 +131355,10 @@ function JSScrollBarChartContainer(uielement)
130971
131355
  {
130972
131356
  xEnd=pageRange.Last.XEnd;
130973
131357
  }
131358
+ else if (xEnd<=left)
131359
+ {
131360
+ xEnd=pageRange.First.XStart;
131361
+ }
130974
131362
 
130975
131363
  this.SliderChart.XEnd=xEnd;
130976
131364
  }
@@ -131515,8 +131903,9 @@ function SliderChart()
131515
131903
  this.Color=g_JSChartResource.ScrollBar.Slider.BarAreaColor;
131516
131904
 
131517
131905
  this.BarColor=g_JSChartResource.ScrollBar.Slider.BarColor;
131518
- this.BarWidth=10;
131519
- this.BarPadding=10; //上下留白
131906
+ this.BarWidth=g_JSChartResource.ScrollBar.Slider.BarWidth;
131907
+ this.BarPadding=g_JSChartResource.ScrollBar.Slider.BarPadding; //上下留白
131908
+ this.MinCenterWidth=g_JSChartResource.ScrollBar.Slider.MinCenterWidth;
131520
131909
 
131521
131910
  this.DateFont=g_JSChartResource.ScrollBar.Slider.DateFont;
131522
131911
  this.DateColor=g_JSChartResource.ScrollBar.Slider.DateColor;
@@ -131576,6 +131965,12 @@ function SliderChart()
131576
131965
  var rtBar={ Left:Math.min(xStart,xEnd), Top:top, Width:Math.abs(xEnd-xStart), Height: bottom-top};
131577
131966
  rtBar.Right=rtBar.Left+rtBar.Width;
131578
131967
  rtBar.Bottom=rtBar.Top+rtBar.Height;
131968
+ if (rtBar.Width<this.MinCenterWidth)
131969
+ {
131970
+ rtBar.Left-=(this.MinCenterWidth-rtBar.Width)/2;
131971
+ rtBar.Width=this.MinCenterWidth;
131972
+ rtBar.Right=rtBar.Left+rtBar.Width;
131973
+ }
131579
131974
  this.Canvas.fillRect(rtBar.Left, rtBar.Top, rtBar.Width, rtBar.Height);
131580
131975
  this.AryRect.push({ Rect:rtBar, Type:0});
131581
131976
 
@@ -131783,7 +132178,7 @@ function ScrollBarBGChart()
131783
132178
 
131784
132179
 
131785
132180
 
131786
- var HQCHART_VERSION="1.1.13143";
132181
+ var HQCHART_VERSION="1.1.13154";
131787
132182
 
131788
132183
  function PrintHQChartVersion()
131789
132184
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.13143";
8
+ var HQCHART_VERSION="1.1.13154";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {