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.
@@ -22526,7 +22526,34 @@ function HQTradeHScreenFrame()
22526
22526
  }
22527
22527
  }
22528
22528
 
22529
- if (frame!=null) return frame.GetYData(x);
22529
+ if (frame!=null)
22530
+ {
22531
+ var xValue= frame.GetYData(x);
22532
+
22533
+ if (frame.GetMainOverlayFrame)
22534
+ {
22535
+ var aryOverlayFrame=frame.GetMainOverlayFrame();
22536
+ if (aryOverlayFrame)
22537
+ {
22538
+ if (aryOverlayFrame[0]) //左侧
22539
+ {
22540
+ var leftFrame=aryOverlayFrame[0];
22541
+ var value=leftFrame.GetYData(x);
22542
+ outObject.RightYValue=xValue;
22543
+ xValue=value;
22544
+ }
22545
+
22546
+ if (aryOverlayFrame[1]) //右侧
22547
+ {
22548
+ var rightFrame=aryOverlayFrame[1];
22549
+ var value=rightFrame.GetYData(x);
22550
+ outObject.RightYValue=value;
22551
+ }
22552
+ }
22553
+ }
22554
+
22555
+ return xValue;
22556
+ }
22530
22557
  }
22531
22558
  }
22532
22559
 
@@ -28649,6 +28676,198 @@ function ChartKLine()
28649
28676
  this.PtMin=ptMin;
28650
28677
  }
28651
28678
 
28679
+ this.DrawKagi=function() //卡吉图
28680
+ {
28681
+ var isHScreen=(this.ChartFrame.IsHScreen===true);
28682
+ var dataWidth=this.ChartFrame.DataWidth;
28683
+ var distanceWidth=this.ChartFrame.DistanceWidth;
28684
+ var xPointCount=this.ChartFrame.XPointCount;
28685
+
28686
+ if (isHScreen)
28687
+ {
28688
+ var border=this.ChartBorder.GetHScreenBorder();
28689
+ var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
28690
+ var chartright=border.BottomEx;
28691
+ var left=border.TopEx+g_JSChartResource.FrameLeftMargin;
28692
+ }
28693
+ else
28694
+ {
28695
+ var border=this.ChartBorder.GetBorder();
28696
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
28697
+ var chartright=border.RightEx;
28698
+ var left=border.Left+g_JSChartResource.FrameLeftMargin;
28699
+ }
28700
+
28701
+ var ptMax={X:null,Y:null,Value:null,Align:'left'};
28702
+ var ptMin={X:null,Y:null,Value:null,Align:'left'};
28703
+ this.ShowRange.Start=this.Data.DataOffset;
28704
+ this.ShowRange.End=this.ShowRange.Start;
28705
+ this.ShowRange.DataCount=0;
28706
+ this.ShowRange.ShowCount=xPointCount;
28707
+ this.DrawKRange.Start=this.Data.DataOffset;
28708
+
28709
+ var lineWidth=2*GetDevicePixelRatio();
28710
+ this.Canvas.lineWidth=lineWidth;
28711
+ var preItem={ Item:null, X:left, Y:null };
28712
+ var index=this.Data.DataOffset-1;
28713
+ if (index>=0 && index<this.Data.Data.length)
28714
+ {
28715
+ var item=this.Data.Data[index];
28716
+ preItem.Item=item;
28717
+ if (item.Direction==1) //上
28718
+ {
28719
+ preItem.Y=this.GetYFromData(item.High,false);
28720
+ }
28721
+ else if (item.Direction==2)
28722
+ {
28723
+ preItem.Y=this.GetYFromData(item.Low,false);
28724
+ }
28725
+ }
28726
+
28727
+
28728
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth),++this.ShowRange.DataCount)
28729
+ {
28730
+ var data=this.Data.Data[i];
28731
+ this.ShowRange.End=i;
28732
+ if (data.Open==null || data.High==null || data.Low==null || data.Close==null) continue;
28733
+
28734
+ var left=xOffset;
28735
+ var right=xOffset+dataWidth;
28736
+ if (right>chartright) break;
28737
+ var x=left+(right-left)/2;
28738
+ var yLow=this.GetYFromData(data.Low,false);
28739
+ var yHigh=this.GetYFromData(data.High,false);
28740
+ this.DrawKRange.End=i;
28741
+
28742
+ if (ptMax.Value==null || ptMax.Value<data.High) //求最大值
28743
+ {
28744
+ ptMax.X=x;
28745
+ ptMax.Y=yHigh;
28746
+ ptMax.Value=data.High;
28747
+ ptMax.Align=j<xPointCount/2?'left':'right';
28748
+ }
28749
+
28750
+ if (ptMin.Value==null || ptMin.Value>data.Low) //求最小值
28751
+ {
28752
+ ptMin.X=x;
28753
+ ptMin.Y=yLow;
28754
+ ptMin.Value=data.Low;
28755
+ ptMin.Align=j<xPointCount/2?'left':'right';
28756
+ }
28757
+
28758
+ var xFixed=ToFixedPoint2(lineWidth,x);
28759
+
28760
+ if (preItem.Item)
28761
+ {
28762
+ this.Canvas.beginPath();
28763
+ var yFixed=ToFixedPoint2(lineWidth,preItem.Y);
28764
+
28765
+ this.Canvas.moveTo(preItem.X, yFixed);
28766
+ this.Canvas.lineTo(xFixed, yFixed);
28767
+ var prePrice=null;
28768
+ if (preItem.Item.Direction==1) prePrice=preItem.Item.Low;
28769
+ else if (preItem.Item.Direction==2) prePrice=preItem.Item.High;
28770
+
28771
+ if (data.Direction==1)
28772
+ {
28773
+ if (data.High<prePrice)
28774
+ {
28775
+ this.Canvas.lineTo(xFixed, yHigh);
28776
+ this.Canvas.strokeStyle=this.DownColor;
28777
+ this.Canvas.stroke();
28778
+ }
28779
+ else
28780
+ {
28781
+ var yPrePrice=this.GetYFromData(prePrice,false);
28782
+ this.Canvas.lineTo(xFixed, yPrePrice);
28783
+ this.Canvas.strokeStyle=this.DownColor;
28784
+ this.Canvas.stroke();
28785
+
28786
+ this.Canvas.beginPath();
28787
+ this.Canvas.moveTo(xFixed, yPrePrice);
28788
+ this.Canvas.lineTo(xFixed, yHigh);
28789
+ this.Canvas.strokeStyle=this.UpColor;
28790
+ this.Canvas.stroke();
28791
+ }
28792
+
28793
+ }
28794
+ else if (data.Direction==2)
28795
+ {
28796
+ if (data.Low>prePrice)
28797
+ {
28798
+ this.Canvas.lineTo(xFixed, yLow);
28799
+ this.Canvas.strokeStyle=this.DownColor; //阳线
28800
+ this.Canvas.stroke();
28801
+ }
28802
+ else
28803
+ {
28804
+ var yPrePrice=this.GetYFromData(prePrice,false);
28805
+ this.Canvas.lineTo(xFixed, yPrePrice);
28806
+ this.Canvas.strokeStyle=this.DownColor; //阳线
28807
+ this.Canvas.stroke();
28808
+
28809
+ this.Canvas.beginPath();
28810
+ this.Canvas.moveTo(xFixed, yPrePrice);
28811
+ this.Canvas.lineTo(xFixed, yLow);
28812
+ this.Canvas.strokeStyle=this.UpColor;
28813
+ this.Canvas.stroke();
28814
+ }
28815
+ }
28816
+
28817
+ }
28818
+ else
28819
+ {
28820
+ this.Canvas.beginPath();
28821
+ if (data.Direction==1)
28822
+ {
28823
+ this.Canvas.moveTo(xFixed, yLow);
28824
+ this.Canvas.lineTo(xFixed, yHigh);
28825
+ }
28826
+ else if (data.Direction==2)
28827
+ {
28828
+ this.Canvas.moveTo(xFixed, yHigh);
28829
+ this.Canvas.lineTo(xFixed, yLow);
28830
+ }
28831
+ this.Canvas.stroke();
28832
+ }
28833
+
28834
+ /*
28835
+ if (data.YClose<data.Close)
28836
+ {
28837
+ this.Canvas.strokeStyle=this.UpColor; //阳线
28838
+ this.Canvas.fillStyle=this.UpColor;
28839
+ }
28840
+ else if (data.YClose>data.Close)
28841
+ {
28842
+ this.Canvas.strokeStyle=this.DownColor; //阴线
28843
+ this.Canvas.fillStyle=this.DownColor;
28844
+ }
28845
+
28846
+ this.Canvas.beginPath();
28847
+ if (isHScreen)
28848
+ {
28849
+ this.Canvas.moveTo(yHigh,ToFixedPoint(x));
28850
+ this.Canvas.lineTo(yLow,ToFixedPoint(x));
28851
+ }
28852
+ else
28853
+ {
28854
+ this.Canvas.moveTo(ToFixedPoint2(lineWidth,x),yHigh);
28855
+ this.Canvas.lineTo(ToFixedPoint2(lineWidth,x),yLow);
28856
+ }
28857
+ this.Canvas.stroke();
28858
+ */
28859
+
28860
+ preItem.Item=data;
28861
+ preItem.X=x;
28862
+
28863
+ if (data.Direction==1) preItem.Y=yHigh; //上
28864
+ else if (data.Direction==2) preItem.Y=yLow //下
28865
+ }
28866
+
28867
+ this.PtMax=ptMax;
28868
+ this.PtMin=ptMin;
28869
+ }
28870
+
28652
28871
  this.DrawTrade=function() //交易系统
28653
28872
  {
28654
28873
  if (!this.TradeData) return;
@@ -29156,6 +29375,10 @@ function ChartKLine()
29156
29375
  {
29157
29376
  this.DrawHLCArea();
29158
29377
  }
29378
+ else if (this.DrawType==16)
29379
+ {
29380
+ this.DrawKagi();
29381
+ }
29159
29382
  else if (this.DrawType==17)
29160
29383
  {
29161
29384
  this.DrawOrderFlow_Style4();
@@ -52255,6 +52478,7 @@ function ChartCorssCursor()
52255
52478
 
52256
52479
  this.StringFormatY.Value=yValue;
52257
52480
  this.StringFormatY.FrameID=yValueExtend.FrameID;
52481
+ this.StringFormatY.RValue=yValueExtend.RightYValue; //右侧子坐标
52258
52482
  this.StringFormatY.Point={X:x, Y:y};
52259
52483
  this.StringFormatY.ClientPos=this.ClientPos;
52260
52484
 
@@ -53059,6 +53283,7 @@ function HQPriceStringFormat()
53059
53283
  {
53060
53284
  if (this.DataFormatType==1) this.Text=IFrameSplitOperator.FormatValueThousandsString(this.Value,defaultfloatPrecision);
53061
53285
  else this.Text=IFrameSplitOperator.FormatValueString(this.Value,defaultfloatPrecision,this.LanguageID);
53286
+ if (IFrameSplitOperator.IsNumber(this.RValue)) this.RText=IFrameSplitOperator.FormatValueString(this.RValue,defaultfloatPrecision,this.LanguageID);
53062
53287
  }
53063
53288
 
53064
53289
  if (this.GetEventCallback)
@@ -68304,7 +68529,11 @@ function JSChartResource()
68304
68529
  DateFont:`${14*GetDevicePixelRatio()}px 微软雅黑`,
68305
68530
  DateColor:'rgb(0,0,0)',
68306
68531
  BarColor:"rgb(207,207,207)",
68307
- BarAreaColor:"rgba(232,232,232,0.65)"
68532
+ BarAreaColor:"rgba(232,232,232,0.65)",
68533
+
68534
+ BarWidth:10,
68535
+ BarPadding:15, //上下留白
68536
+ MinCenterWidth:15
68308
68537
  }
68309
68538
  },
68310
68539
 
@@ -68949,6 +69178,9 @@ function JSChartResource()
68949
69178
  if (subItem.DateColor) this.ScrollBar.Slider.DateColor=subItem.DateColor;
68950
69179
  if (subItem.BarColor) this.ScrollBar.Slider.BarColor=subItem.BarColor;
68951
69180
  if (subItem.BarAreaColor) this.ScrollBar.Slider.BarAreaColor=subItem.BarAreaColor;
69181
+ if (IFrameSplitOperator.IsNumber(subItem.BarWidth)) this.ScrollBar.Slider.BarWidth=subItem.BarWidth;
69182
+ if (IFrameSplitOperator.IsNumber(subItem.BarPadding)) this.ScrollBar.Slider.BarPadding=subItem.BarPadding;
69183
+ if (IFrameSplitOperator.IsNumber(subItem.MinCenterWidth)) this.ScrollBar.Slider.MinCenterWidth=subItem.MinCenterWidth;
68952
69184
  }
68953
69185
 
68954
69186
  if (item.BGChart)
@@ -69696,20 +69928,24 @@ function RenkoCalculate()
69696
69928
  //
69697
69929
  function KagiCalculate()
69698
69930
  {
69699
- this.Symbol;
69700
- this.SourceData;
69701
- this.FloatPrecision=2; //品种小数位数
69702
- this.ATR={ Count:14 }; //使用ATR计算砖块大小
69931
+ this.newMethod=RenkoCalculate; //派生
69932
+ this.newMethod();
69933
+ delete this.newMethod;
69934
+
69935
+ this.ClassName="KagiCalculate";
69936
+ this.BrickSizeType=0;
69937
+ this.BrickSize=0.5; //固定大小
69703
69938
 
69704
69939
  this.RecvHistoryData=function(sourceData, option) //历史日线数据
69705
69940
  {
69706
69941
  this.Symbol=option.Symbol;
69707
69942
  this.SourceData=sourceData;
69708
69943
  this.FloatPrecision=GetfloatPrecision(this.Symbol);
69709
- return this.Calculate(sourceData);
69944
+ if (this.BrickSizeType==1) this.CalculateATR();
69945
+ return this.CalculateByClose(sourceData);
69710
69946
  }
69711
69947
 
69712
- this.Calculate=function(sourceData)
69948
+ this.CalculateByClose=function(sourceData)
69713
69949
  {
69714
69950
  var bindData=new ChartData();
69715
69951
  bindData.Data=[]
@@ -69720,13 +69956,139 @@ function KagiCalculate()
69720
69956
 
69721
69957
  if (!IFrameSplitOperator.IsNonEmptyArray(sourceData.Data)) return bindData;
69722
69958
 
69723
- var periodCount=this.ATR.Count;
69959
+ var brickSize=this.BrickSize;
69960
+ if (this.BrickSizeType==1) brickSize=this.ATR.BrickSize;
69724
69961
 
69725
69962
  var kItem=sourceData.Data[0];
69726
- this.LastData=HistoryData.Copy(kItem);
69727
- for(var i=1; i<sourceData.Data.length; )
69963
+ var kagiItem=HistoryData.Copy(kItem);
69964
+
69965
+ kagiItem.High=kagiItem.Low=kItem.Close;
69966
+ kagiItem.StartItem=kItem;
69967
+ kagiItem.Direction=0; //1 上 2=下
69968
+
69969
+ var T_MergeKData=function(dest, src)
69970
+ {
69971
+ dest.Vol+=src.Vol;
69972
+ dest.Amount+=src.Amount;
69973
+ }
69974
+
69975
+ var index=1;
69976
+ for( ;index<sourceData.Data.length;++index) //确定好方向
69728
69977
  {
69978
+ var kItem=sourceData.Data[index];
69979
+ if (kItem.Close>kagiItem.Close)
69980
+ {
69981
+ kagiItem.Direction=1;
69982
+ kagiItem.Close=kItem.Close;
69983
+ kagiItem.EndItem=kItem;
69984
+ kagiItem.High=kItem.Close;
69985
+ break;
69986
+ }
69987
+ else if (kItem.Close<kagiItem.Close)
69988
+ {
69989
+ kagiItem.Direction=2;
69990
+ kagiItem.Close=kItem.Close;
69991
+ kagiItem.EndItem=kItem;
69992
+ kagiItem.Low=kItem.Close;
69993
+ break;
69994
+ }
69729
69995
  }
69996
+
69997
+ var changeItem=null;
69998
+ for(++index; index<sourceData.Data.length;++index )
69999
+ {
70000
+ var kItem=sourceData.Data[index];
70001
+ if (kagiItem.Direction==1) //上
70002
+ {
70003
+ if (kItem.Close>=kagiItem.High)
70004
+ {
70005
+ kagiItem.Close=kItem.Close;
70006
+ kagiItem.High=kItem.Close;
70007
+ kagiItem.EndItem=kItem;
70008
+ changeItem=null;
70009
+ }
70010
+ else
70011
+ {
70012
+ if (!changeItem)
70013
+ {
70014
+ changeItem=HistoryData.Copy(kItem);
70015
+ changeItem.High=changeItem.Low=kItem.Close;
70016
+ }
70017
+ else
70018
+ {
70019
+ changeItem.Close=kItem.Close;
70020
+ if (changeItem.Low>kItem.Close) changeItem.Low=kItem.Close;
70021
+ }
70022
+
70023
+ if (Math.abs(changeItem.Low-kagiItem.High)>brickSize) //达到变盘点
70024
+ {
70025
+ bindData.Data.push(kagiItem);
70026
+
70027
+ var newItem=HistoryData.Copy(kItem);
70028
+ newItem.High=kagiItem.High;
70029
+ newItem.Low=kItem.Close;
70030
+ newItem.Direction=2; //1 上 2=下
70031
+ newItem.StartItem=kItem;
70032
+
70033
+ kagiItem=newItem;
70034
+ changeItem=null;
70035
+ }
70036
+ }
70037
+ }
70038
+ else if (kagiItem.Direction==2) //下
70039
+ {
70040
+ if (kItem.Close<=kagiItem.Low)
70041
+ {
70042
+ kagiItem.Close=kItem.Close;
70043
+ kagiItem.Low=kItem.Close;
70044
+ kagiItem.EndItem=kItem;
70045
+ }
70046
+ else
70047
+ {
70048
+ if (!changeItem)
70049
+ {
70050
+ changeItem=HistoryData.Copy(kItem);
70051
+ changeItem.High=changeItem.Low=kItem.Close;
70052
+ }
70053
+ else
70054
+ {
70055
+ changeItem.Close=kItem.Close;
70056
+ if (changeItem.High<kItem.Close) changeItem.High=kItem.Close;
70057
+ }
70058
+
70059
+ if (Math.abs(changeItem.High-kagiItem.Low)>brickSize) //达到变盘点
70060
+ {
70061
+ bindData.Data.push(kagiItem);
70062
+
70063
+ var newItem=HistoryData.Copy(kItem);
70064
+ newItem.High=kItem.Close;
70065
+ newItem.Low=kagiItem.Low;
70066
+ newItem.Direction=1; //1 上 2=下
70067
+ newItem.StartItem=kItem;
70068
+
70069
+ kagiItem=newItem;
70070
+ changeItem=null;
70071
+ }
70072
+ }
70073
+ }
70074
+ }
70075
+
70076
+ return bindData;
70077
+ }
70078
+
70079
+ //获取配置信息
70080
+ this.GetTitle=function()
70081
+ {
70082
+ if (this.BrickSizeType==1)
70083
+ {
70084
+ var text=`Kagi [ATR(${this.ATR.Count}), ${this.ATR.BrickSize}]`;
70085
+ }
70086
+ else
70087
+ {
70088
+ var text=`Kagi [Traditional]`;
70089
+ }
70090
+
70091
+ return text;
69730
70092
  }
69731
70093
  }
69732
70094
 
@@ -70054,8 +70416,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
70054
70416
  this.KLineCalculate=null; //K线定制指标计算
70055
70417
  this.KLineCalcOption=new Map(); //K线定制指标配置
70056
70418
 
70057
- this.ScrollBar=null; //横向滚动条
70058
-
70419
+ this.ScrollBar=null; //横向滚动条
70420
+ this.IsAutoSyncDataOffset=true; //增量更新时,是否移动当前屏数据
70059
70421
 
70060
70422
  this.GetKLineCalulate=function()
70061
70423
  {
@@ -71282,15 +71644,18 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
71282
71644
  var xPointCount=this.Frame.SubFrame[0].Frame.XPointCount; //当前一屏能显示的数据个数
71283
71645
 
71284
71646
  var newDataCount=0;
71285
- if (lastDataCount>0 && hisData.Data.length>lastDataCount)
71647
+ if (IFrameSplitOperator.IsNumber(lastDataCount))
71286
71648
  {
71287
- newDataCount=hisData.Data.length-lastDataCount;
71288
- JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
71289
- }
71290
- else if (lastDataCount==0 && hisData.Data.length>xPointCount) //历史数据为空,当前收到数据大于一屏的数据,显示最新数据
71291
- {
71292
- newDataCount=hisData.Data.length-xPointCount;
71293
- JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] history data is empty. [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
71649
+ if (lastDataCount>0 && hisData.Data.length>lastDataCount)
71650
+ {
71651
+ newDataCount=hisData.Data.length-lastDataCount;
71652
+ JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
71653
+ }
71654
+ else if (lastDataCount==0 && hisData.Data.length>xPointCount) //历史数据为空,当前收到数据大于一屏的数据,显示最新数据
71655
+ {
71656
+ newDataCount=hisData.Data.length-xPointCount;
71657
+ JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] history data is empty. [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
71658
+ }
71294
71659
  }
71295
71660
 
71296
71661
  this.ChartPaint[0].Data=hisData;
@@ -72682,7 +73047,9 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72682
73047
  if (!this.SourceData) return;
72683
73048
  if (!this.SourceData.MergeMinuteData(aryMinuteData)) return;
72684
73049
 
72685
- JSConsole.Chart.Log(`[KLineChartContainer::RecvMinuteRealtimeDataV2] update kline by 1 minute data [${lastDataCount}->${this.SourceData.Data.length}]`);
73050
+ JSConsole.Chart.Log(`[KLineChartContainer::RecvMinuteRealtimeDataV2] update kline by 1 minute data [${lastDataCount}->${this.SourceData.Data.length}], IsAutoSyncDataOffset=${this.IsAutoSyncDataOffset}`);
73051
+
73052
+ if (this.IsAutoSyncDataOffset===false) lastDataCount=null; //维持当前的屏位置
72686
73053
 
72687
73054
  var bindData=new ChartData();
72688
73055
  bindData.Data=this.SourceData.Data;
@@ -73334,12 +73701,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
73334
73701
  //删除某一个窗口的指标, bCallDestory=是否调用图形销毁函数
73335
73702
  this.DeleteIndexPaint=function(windowIndex, bCallDestroy)
73336
73703
  {
73337
- let paint=new Array(); //踢出当前窗口的指标画法
73338
- for(let i in this.ChartPaint)
73704
+ if (!this.Frame.SubFrame[windowIndex]) return;
73705
+ var subFrame=this.Frame.SubFrame[windowIndex].Frame;
73706
+ if (!subFrame) return;
73707
+
73708
+ var paint=[]; //踢出当前窗口的指标画法
73709
+ for(var i=0;i<this.ChartPaint.length; ++i)
73339
73710
  {
73340
- let item=this.ChartPaint[i];
73711
+ var item=this.ChartPaint[i];
73712
+ var bFind=(item.ChartFrame.Guid==subFrame.Guid || item.ChartFrame==subFrame);
73341
73713
 
73342
- if (i==0 || item.ChartFrame!=this.Frame.SubFrame[windowIndex].Frame)
73714
+ if (i==0 || !bFind)
73343
73715
  {
73344
73716
  paint.push(item);
73345
73717
  }
@@ -73352,7 +73724,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
73352
73724
  }
73353
73725
  }
73354
73726
 
73355
- var subFrame=this.Frame.SubFrame[windowIndex].Frame;
73727
+
73356
73728
  subFrame.YSpecificMaxMin=null; //清空指定最大最小值
73357
73729
  subFrame.IsLocked=false; //解除上锁
73358
73730
  subFrame.YSplitScale = null; //清空固定刻度
@@ -79086,6 +79458,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
79086
79458
  }
79087
79459
 
79088
79460
  var subFrame=new SubFrameItem();
79461
+ frame.FrameData.SubFrameItem=subFrame;
79089
79462
  subFrame.Frame=frame;
79090
79463
  if (i==0)
79091
79464
  subFrame.Height=20;
@@ -79172,6 +79545,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
79172
79545
  }
79173
79546
 
79174
79547
  var subFrame=new SubFrameItem();
79548
+ frame.FrameData.SubFrameItem=subFrame;
79175
79549
  subFrame.Frame=frame;
79176
79550
  subFrame.Height=10;
79177
79551
 
@@ -79243,12 +79617,16 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
79243
79617
  //删除某一个窗口的指标
79244
79618
  this.DeleteIndexPaint=function(windowIndex,bCallDestroy)
79245
79619
  {
79246
- let paint=new Array(); //踢出当前窗口的指标画法
79247
- for(let i in this.ChartPaint)
79620
+ var subFrame=this.Frame.SubFrame[windowIndex].Frame;
79621
+ if (!subFrame) return;
79622
+
79623
+ var paint=[]; //踢出当前窗口的指标画法
79624
+ for(var i=0;i<this.ChartPaint.length;++i)
79248
79625
  {
79249
- let item=this.ChartPaint[i];
79626
+ var item=this.ChartPaint[i];
79627
+ var bFind=(item.ChartFrame.Guid==subFrame.Guid || item.ChartFrame==subFrame);
79250
79628
 
79251
- if (i==0 || item.ChartFrame!=this.Frame.SubFrame[windowIndex].Frame)
79629
+ if (i==0 || !bFind)
79252
79630
  {
79253
79631
  paint.push(item);
79254
79632
  }
@@ -79262,7 +79640,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
79262
79640
  }
79263
79641
 
79264
79642
  //清空指定最大最小值
79265
- var subFrame=this.Frame.SubFrame[windowIndex].Frame;
79643
+
79266
79644
  subFrame.YSpecificMaxMin=null;
79267
79645
  subFrame.IsLocked=false; //解除上锁
79268
79646
  subFrame.YSplitOperator.SplitType=subFrame.YSplitOperator.DefaultSplitType; //还原Y坐标分割模式
@@ -84585,6 +84963,7 @@ function KLineChartHScreenContainer(uielement)
84585
84963
  }
84586
84964
 
84587
84965
  var subFrame=new SubFrameItem();
84966
+ frame.FrameData.SubFrameItem=subFrame;
84588
84967
  subFrame.Frame=frame;
84589
84968
  if (i==0)
84590
84969
  subFrame.Height=20;
@@ -84729,6 +85108,7 @@ function MinuteChartHScreenContainer(uielement)
84729
85108
  }
84730
85109
 
84731
85110
  var subFrame=new SubFrameItem();
85111
+ frame.FrameData.SubFrameItem=subFrame;
84732
85112
  subFrame.Frame=frame;
84733
85113
  if (i==0)
84734
85114
  subFrame.Height=20;
@@ -133338,11 +133718,11 @@ function JSScrollBarChartContainer(uielement)
133338
133718
  switch(item.Data.Type)
133339
133719
  {
133340
133720
  case 0:
133341
- mouseStatus={ Cursor:"move", Name:"SliderChart"};
133721
+ mouseStatus={ Cursor:"grab", Name:"SliderChart"};
133342
133722
  break;
133343
133723
  case 1:
133344
133724
  case 2:
133345
- mouseStatus={ Cursor:"ew-resize", Name:"SliderChart"};
133725
+ mouseStatus={ Cursor:"col-resize", Name:"SliderChart"};
133346
133726
  break;
133347
133727
  }
133348
133728
  }
@@ -133412,6 +133792,10 @@ function JSScrollBarChartContainer(uielement)
133412
133792
  {
133413
133793
  xStart=pageRange.First.XStart;
133414
133794
  }
133795
+ else if (xStart>=right)
133796
+ {
133797
+ xStart=pageRange.Last.XEnd;
133798
+ }
133415
133799
 
133416
133800
  this.SliderChart.XStart=xStart;
133417
133801
  }
@@ -133421,6 +133805,10 @@ function JSScrollBarChartContainer(uielement)
133421
133805
  {
133422
133806
  xEnd=pageRange.Last.XEnd;
133423
133807
  }
133808
+ else if (xEnd<=left)
133809
+ {
133810
+ xEnd=pageRange.First.XStart;
133811
+ }
133424
133812
 
133425
133813
  this.SliderChart.XEnd=xEnd;
133426
133814
  }
@@ -133965,8 +134353,9 @@ function SliderChart()
133965
134353
  this.Color=g_JSChartResource.ScrollBar.Slider.BarAreaColor;
133966
134354
 
133967
134355
  this.BarColor=g_JSChartResource.ScrollBar.Slider.BarColor;
133968
- this.BarWidth=10;
133969
- this.BarPadding=10; //上下留白
134356
+ this.BarWidth=g_JSChartResource.ScrollBar.Slider.BarWidth;
134357
+ this.BarPadding=g_JSChartResource.ScrollBar.Slider.BarPadding; //上下留白
134358
+ this.MinCenterWidth=g_JSChartResource.ScrollBar.Slider.MinCenterWidth;
133970
134359
 
133971
134360
  this.DateFont=g_JSChartResource.ScrollBar.Slider.DateFont;
133972
134361
  this.DateColor=g_JSChartResource.ScrollBar.Slider.DateColor;
@@ -134026,6 +134415,12 @@ function SliderChart()
134026
134415
  var rtBar={ Left:Math.min(xStart,xEnd), Top:top, Width:Math.abs(xEnd-xStart), Height: bottom-top};
134027
134416
  rtBar.Right=rtBar.Left+rtBar.Width;
134028
134417
  rtBar.Bottom=rtBar.Top+rtBar.Height;
134418
+ if (rtBar.Width<this.MinCenterWidth)
134419
+ {
134420
+ rtBar.Left-=(this.MinCenterWidth-rtBar.Width)/2;
134421
+ rtBar.Width=this.MinCenterWidth;
134422
+ rtBar.Right=rtBar.Left+rtBar.Width;
134423
+ }
134029
134424
  this.Canvas.fillRect(rtBar.Left, rtBar.Top, rtBar.Width, rtBar.Height);
134030
134425
  this.AryRect.push({ Rect:rtBar, Type:0});
134031
134426
 
@@ -134347,7 +134742,7 @@ function HQChartScriptWorker()
134347
134742
 
134348
134743
 
134349
134744
 
134350
- var HQCHART_VERSION="1.1.13143";
134745
+ var HQCHART_VERSION="1.1.13154";
134351
134746
 
134352
134747
  function PrintHQChartVersion()
134353
134748
  {