hqchart 1.1.12829 → 1.1.12836

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.
@@ -4270,10 +4270,11 @@ this.Canvas.strokeStyle=color;if(bgColor)this.Canvas.fill(path);if(color)this.Ca
4270
4270
  function ChartMultiText(){this.newMethod=IChartPainting;//派生
4271
4271
  this.newMethod();delete this.newMethod;this.ClassName="ChartMultiText";this.Texts=[];//[ {Index:, Value:, Text:, Color:, Font: , Baseline:, Line:{ Color:, Dash:[虚线点], KData:"H/L", Offset:[5,10], Width:线粗细 }} ]
4272
4272
  this.Font=g_JSChartResource.DefaultTextFont;this.Color=g_JSChartResource.DefaultTextColor;this.IsHScreen=false;//是否横屏
4273
- this.Draw=function(){if(!this.IsShow||this.ChartFrame.IsMinSize)return;if(!this.Data||this.Data.length<=0)return;if(!this.Texts)return;this.IsHScreen=this.ChartFrame.IsHScreen===true;var xPointCount=this.ChartFrame.XPointCount;var offset=this.Data.DataOffset;var left=this.ChartBorder.GetLeft();var right=this.ChartBorder.GetRight();var top=this.ChartBorder.GetTopEx();var bottom=this.ChartBorder.GetBottomEx();if(this.IsHScreen){left=this.ChartBorder.GetTop();right=this.ChartBorder.GetBottom();}var y=0;for(var i=0;i<this.Texts.length;++i){var item=this.Texts[i];if(!item.Text)continue;if(!IFrameSplitOperator.IsNumber(item.Index))continue;var index=item.Index-offset;if(index>=0&&index<xPointCount){var x=this.ChartFrame.GetXFromIndex(index);if(item.Value=="TOP")y=top;else if(item.Value=="BOTTOM")y=bottom;else y=this.ChartFrame.GetYFromData(item.Value);if(item.Color)this.Canvas.fillStyle=item.Color;else this.Canvas.fillStyle=this.Color;if(item.Font)this.Canvas.font=item.Font;else this.Canvas.font=this.Font;var textWidth=this.Canvas.measureText(item.Text).width;this.Canvas.textAlign='center';if(x+textWidth/2>=right){this.Canvas.textAlign='right';x=right;}else if(x-textWidth/2<left){this.Canvas.textAlign='left';x=left;}if(item.Baseline==1)this.Canvas.textBaseline='top';else if(item.Baseline==2)this.Canvas.textBaseline='bottom';else this.Canvas.textBaseline='middle';if(this.IsHScreen){this.Canvas.save();this.Canvas.translate(y,x);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(item.Text,0,0);this.Canvas.restore();}else{if(IFrameSplitOperator.IsNumber(item.YMove))y+=item.YMove;this.Canvas.fillText(item.Text,x,y);}if(item.Line){var kItem=this.Data.Data[item.Index];var price=item.Line.KData=="H"?kItem.High:kItem.Low;var yPrice=this.ChartFrame.GetYFromData(price);var yText=y;if(Array.isArray(item.Line.Offset)&&item.Line.Offset.length==2){if(yText>yPrice)//文字在下方
4273
+ this.BuildKey=function(item){if(IFrameSplitOperator.IsNumber(item.Time)){var key=kItem.Date+'-'+item.Time;}else{var key=''+item.Date;}return key;};this.GetShowTextData=function(){var xPointCount=this.ChartFrame.XPointCount;var offset=this.Data.DataOffset;var mapText=new _map2.default();//key='date-time' value={ Data:[] }
4274
+ for(var i=0;i<this.Texts.length;++i){var item=this.Texts[i];if(!item.Text)continue;if(!IFrameSplitOperator.IsNumber(item.Index))continue;var index=item.Index-offset;if(index>=0&&index<xPointCount){var key=this.BuildKey(item);if(mapText.has(key)){var textItem=mapText.get(key);textItem.Data.push(item);}else{var textItem={Data:[item]};mapText.set(key,textItem);}}}return mapText;};this.DrawAllText=function(mapText){var bHScreen=this.ChartFrame.IsHScreen===true;var isMinute=this.IsMinuteFrame();var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;if(bHScreen){var border=this.ChartBorder.GetHScreenBorder();var chartright=border.BottomEx;var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var left=this.ChartBorder.GetTop();var right=this.ChartBorder.GetBottom();}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var left=this.ChartBorder.GetLeft();var right=this.ChartBorder.GetRight();}for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var kItem=this.Data.Data[i];if(!kItem)continue;var key=this.BuildKey(kItem);if(!mapText.has(key))continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var textItem=mapText.get(key);for(var k=0;k<textItem.Data.length;++k){var item=textItem.Data[k];if(item.Value=="TOP")y=top;else if(item.Value=="BOTTOM")y=bottom;else y=this.ChartFrame.GetYFromData(item.Value);if(item.Color)this.Canvas.fillStyle=item.Color;else this.Canvas.fillStyle=this.Color;if(item.Font)this.Canvas.font=item.Font;else this.Canvas.font=this.Font;var textWidth=this.Canvas.measureText(item.Text).width;this.Canvas.textAlign='center';if(x+textWidth/2>=right){this.Canvas.textAlign='right';x=right;}else if(x-textWidth/2<left){this.Canvas.textAlign='left';x=left;}if(item.Baseline==1)this.Canvas.textBaseline='top';else if(item.Baseline==2)this.Canvas.textBaseline='bottom';else this.Canvas.textBaseline='middle';if(this.IsHScreen){this.Canvas.save();this.Canvas.translate(y,x);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(item.Text,0,0);this.Canvas.restore();}else{if(IFrameSplitOperator.IsNumber(item.YMove))y+=item.YMove;this.Canvas.fillText(item.Text,x,y);}if(item.Line){var kItem=this.Data.Data[item.Index];var price=item.Line.KData=="H"?kItem.High:kItem.Low;var yPrice=this.ChartFrame.GetYFromData(price);var yText=y;if(Array.isArray(item.Line.Offset)&&item.Line.Offset.length==2){if(yText>yPrice)//文字在下方
4274
4275
  {yText-=item.Line.Offset[1];yPrice+=item.Line.Offset[0];}else if(yText<yPrice){yText+=item.Line.Offset[1];yPrice-=item.Line.Offset[0];}}this.Canvas.save();if(item.Line.Dash)this.Canvas.setLineDash(item.Line.Dash);//虚线
4275
4276
  if(item.Line.Width>0)this.Canvas.lineWidth=item.Line.Width;//线宽
4276
- this.Canvas.strokeStyle=item.Line.Color;this.Canvas.beginPath();if(this.IsHScreen){this.Canvas.moveTo(yText,ToFixedPoint(x));this.Canvas.lineTo(yPrice,ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),yText);this.Canvas.lineTo(ToFixedPoint(x),yPrice);}this.Canvas.stroke();this.Canvas.restore();}}}};this.GetMaxMin=function(){var range={Min:null,Max:null};if(!this.Texts)return range;var xPointCount=this.ChartFrame.XPointCount;var start=this.Data.DataOffset;var end=start+xPointCount;for(var i in this.Texts){var item=this.Texts[i];if(item.Index>=start&&item.Index<end){if(range.Max==null)range.Max=item.Value;else if(range.Max<item.Value)range.Max=item.Value;if(range.Min==null)range.Min=item.Value;else if(range.Min>item.Value)range.Min=item.Value;}}return range;};}// 图标集合 支持横屏
4277
+ this.Canvas.strokeStyle=item.Line.Color;this.Canvas.beginPath();if(this.IsHScreen){this.Canvas.moveTo(yText,ToFixedPoint(x));this.Canvas.lineTo(yPrice,ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),yText);this.Canvas.lineTo(ToFixedPoint(x),yPrice);}this.Canvas.stroke();this.Canvas.restore();}}}};this.Draw=function(){if(!this.IsShow||this.ChartFrame.IsMinSize)return;if(!this.Data||this.Data.length<=0)return;if(!this.Texts)return;this.IsHScreen=this.ChartFrame.IsHScreen===true;var mapText=this.GetShowTextData();if(mapText.size<=0)return;this.DrawAllText(mapText);};this.GetMaxMin=function(){var range={Min:null,Max:null};if(!this.Texts)return range;var xPointCount=this.ChartFrame.XPointCount;var start=this.Data.DataOffset;var end=start+xPointCount;for(var i in this.Texts){var item=this.Texts[i];if(item.Index>=start&&item.Index<end){if(range.Max==null)range.Max=item.Value;else if(range.Max<item.Value)range.Max=item.Value;if(range.Min==null)range.Min=item.Value;else if(range.Min>item.Value)range.Min=item.Value;}}return range;};}// 图标集合 支持横屏
4277
4278
  function ChartMultiSVGIcon(){this.newMethod=IChartPainting;//派生
4278
4279
  this.newMethod();delete this.newMethod;this.ClassName="ChartMultiSVGIcon";this.Icon;//[ {Index:, Value:, Symbol:, Color:, Baseline:, Line:{ Color:, Dash:[虚线点], KData:"H/L", Offset:[5,10], Width:线粗细 } } ]
4279
4280
  this.IconSize={Max:g_JSChartResource.DRAWICON.Icon.MaxSize,Min:g_JSChartResource.DRAWICON.Icon.MinSize,//图标的最大最小值
@@ -7001,9 +7002,9 @@ if(this.ChangeIndexDialog)frame.ChangeIndexEvent=this.ChangeIndexDialog.DoModal;
7001
7002
  var xPointCouont=this.Frame.SubFrame[0].Frame.XPointCount;frame.XPointCount=xPointCouont;frame.Data=this.ChartPaint[0].Data;for(var j=frame.HorizontalMin;j<=frame.HorizontalMax;j+=1){frame.HorizontalInfo[j]=new CoordinateInfo();frame.HorizontalInfo[j].Value=j;frame.HorizontalInfo[j].Message[1]=j.toString();frame.HorizontalInfo[j].Font="14px 微软雅黑";}var subFrame=new SubFrameItem();subFrame.Frame=frame;subFrame.Height=10;var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CREATE_FRAME);if(event&&event.Callback){var sendData={SubFrame:subFrame,WindowIndex:id};event.Callback(event,sendData,this);}return subFrame;};//创建主图K线画法
7002
7003
  this.CreateMainKLine=function(){var _this20=this;var kline=g_ChartPaintFactory.Create("ChartKLine");kline.Canvas=this.Canvas;kline.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;kline.ChartFrame=this.Frame.SubFrame[0].Frame;kline.Name="Main-KLine";kline.DrawType=this.KLineDrawType;kline.Identify="Main-KLine";kline.GetEventCallback=function(id){return _this20.GetEventCallback(id);};this.ChartPaint[0]=kline;this.TitlePaint[0]=new DynamicKLineTitlePainting();this.TitlePaint[0].Frame=this.Frame.SubFrame[0].Frame;this.TitlePaint[0].Canvas=this.Canvas;this.TitlePaint[0].OverlayChartPaint=this.OverlayChartPaint;//绑定叠加
7003
7004
  this.TitlePaint[0].LanguageID=this.LanguageID;this.TitlePaint[0].HQChart=this;this.TitlePaint[0].GetEventCallback=function(id){return _this20.GetEventCallback(id);};};//绑定主图K线数据
7004
- this.BindMainData=function(hisData,showCount){this.ChartPaint[0].Data=hisData;this.ChartPaint[0].Symbol=this.Symbol;if(this.KLineSize){if(this.KLineSize.DataWidth==null){showCount=this.Frame.SubFrame[0].Frame.XPointCount-this.RightSpaceCount;}else{var obj=this.Frame.SetDataWidth(this.KLineSize.DataWidth);showCount=obj.XPointCount-this.RightSpaceCount;this.KLineSize.DataWidth=null;}}for(var i in this.Frame.SubFrame){var item=this.Frame.SubFrame[i].Frame;item.XPointCount=showCount+this.RightSpaceCount;item.Data=this.ChartPaint[0].Data;item.XSplitOperator.Symbol=this.Symbol;item.XSplitOperator.Period=this.Period;}this.TitlePaint[0].Data=this.ChartPaint[0].Data;//动态标题
7005
+ this.BindMainData=function(hisData,showCount){this.ChartPaint[0].Data=hisData;this.ChartPaint[0].Symbol=this.Symbol;if(this.KLineSize){if(!IFrameSplitOperator.IsNumber(this.KLineSize.DataWidth)){showCount=this.Frame.SubFrame[0].Frame.XPointCount-this.RightSpaceCount;}else{var obj=this.Frame.SetDataWidth(this.KLineSize.DataWidth);showCount=obj.XPointCount-this.RightSpaceCount;this.KLineSize.DataWidth=null;}}for(var i=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFrame[i].Frame;item.XPointCount=showCount+this.RightSpaceCount;item.Data=this.ChartPaint[0].Data;item.XSplitOperator.Symbol=this.Symbol;item.XSplitOperator.Period=this.Period;}this.TitlePaint[0].Data=this.ChartPaint[0].Data;//动态标题
7005
7006
  this.TitlePaint[0].Symbol=this.Symbol;this.TitlePaint[0].Name=this.Name;this.TitlePaint[0].Period=this.Period;this.ChartCorssCursor.StringFormatX.Data=this.ChartPaint[0].Data;//十字光标
7006
- this.Frame.Data=this.ChartPaint[0].Data;for(var i in this.OverlayChartPaint)//K线叠加 主图股票数据绑定到叠加上
7007
+ this.Frame.Data=this.ChartPaint[0].Data;for(var i=0;i<this.OverlayChartPaint.length;++i)//K线叠加 主图股票数据绑定到叠加上
7007
7008
  {var item=this.OverlayChartPaint[i];item.MainData=this.ChartPaint[0].Data;}var dataOffset=hisData.Data.length-showCount;if(dataOffset<0)dataOffset=0;this.ChartPaint[0].Data.DataOffset=dataOffset;this.ChartPaint[0].Period=this.Period;this.ChartCorssCursor.StringFormatY.Symbol=this.Symbol;this.CursorIndex=showCount;if(this.CursorIndex+dataOffset>=hisData.Data.length)this.CursorIndex=hisData.Data.length-1-dataOffset;if(this.CursorIndex<0)this.CursorIndex=0;//不一定对啊
7008
7009
  if(this.CustomShow)//定制显示 1次有效
7009
7010
  {this.SetCustomShow(this.CustomShow,hisData);this.CustomShow=null;}};this.UpdateMainData=function(hisData,lastDataCount){var frameHisdata=null;if(!this.Frame.Data)frameHisdata=this.Frame.Data;else if(this.Frame.SubFrame&&this.Frame.SubFrame[0])frameHisdata=this.Frame.SubFrame[0].Frame.Data;if(!frameHisdata)return;var xPointCount=this.Frame.SubFrame[0].Frame.XPointCount;//当前一屏能显示的数据个数
@@ -13028,7 +13029,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
13028
13029
  this.ExecuteScript(item,data);}this.Status=0;}};this.OnExecuteFinish=function(data,indexInfo,jsExectute,jobInfo){var message={Data:data,IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.FINISH_EXECUTE_SCRIPT,JobInfo:jobInfo};postMessage(message);};this.OnExecuteError=function(error,indexInfo,jobData){var message={IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.ERROR_EXECUTE_SCRIPT,Error:error};postMessage(message);};}/********************************************************************************
13029
13030
  * 版本信息输出
13030
13031
  *
13031
- */var HQCHART_VERSION="1.1.12828";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
13032
+ */var HQCHART_VERSION="1.1.12835";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
13032
13033
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
13033
13034
  // BaseIndex:BaseIndex,
13034
13035
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.12829",
3
+ "version": "1.1.12836",
4
4
  "description": "stock chart",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -35950,38 +35950,95 @@ function ChartMultiText()
35950
35950
  this.Color=g_JSChartResource.DefaultTextColor;
35951
35951
  this.IsHScreen=false; //是否横屏
35952
35952
 
35953
- this.Draw=function()
35953
+ this.BuildKey=function(item)
35954
35954
  {
35955
- if (!this.IsShow || this.ChartFrame.IsMinSize) return;
35956
- if (!this.Data || this.Data.length<=0) return;
35957
- if (!this.Texts) return;
35955
+ if (IFrameSplitOperator.IsNumber(item.Time))
35956
+ {
35957
+ var key=`${kItem.Date}-${item.Time}`;
35958
+ }
35959
+ else
35960
+ {
35961
+ var key=`${item.Date}`;
35962
+ }
35963
+
35964
+ return key;
35965
+ }
35958
35966
 
35959
- this.IsHScreen=(this.ChartFrame.IsHScreen===true);
35967
+ this.GetShowTextData=function()
35968
+ {
35960
35969
  var xPointCount=this.ChartFrame.XPointCount;
35961
35970
  var offset=this.Data.DataOffset;
35962
- var left=this.ChartBorder.GetLeft();
35963
- var right=this.ChartBorder.GetRight();
35964
- var top=this.ChartBorder.GetTopEx();
35965
- var bottom=this.ChartBorder.GetBottomEx();
35966
-
35967
- if (this.IsHScreen)
35968
- {
35969
- left=this.ChartBorder.GetTop();
35970
- right=this.ChartBorder.GetBottom();
35971
- }
35972
35971
 
35973
- var y=0;
35972
+ var mapText=new Map(); //key='date-time' value={ Data:[] }
35974
35973
  for(var i=0; i<this.Texts.length; ++i)
35975
35974
  {
35976
35975
  var item=this.Texts[i];
35977
-
35978
35976
  if (!item.Text) continue;
35979
35977
  if (!IFrameSplitOperator.IsNumber(item.Index)) continue;
35980
35978
 
35981
35979
  var index=item.Index-offset;
35982
35980
  if (index>=0 && index<xPointCount)
35983
35981
  {
35984
- var x=this.ChartFrame.GetXFromIndex(index);
35982
+ var key=this.BuildKey(item);
35983
+ if (mapText.has(key))
35984
+ {
35985
+ var textItem=mapText.get(key);
35986
+ textItem.Data.push(item);
35987
+ }
35988
+ else
35989
+ {
35990
+ var textItem={ Data:[item] };
35991
+ mapText.set(key, textItem);
35992
+ }
35993
+ }
35994
+ }
35995
+
35996
+ return mapText;
35997
+ }
35998
+
35999
+ this.DrawAllText=function(mapText)
36000
+ {
36001
+ var bHScreen=(this.ChartFrame.IsHScreen===true);
36002
+ var isMinute=this.IsMinuteFrame();
36003
+ var dataWidth=this.ChartFrame.DataWidth;
36004
+ var distanceWidth=this.ChartFrame.DistanceWidth;
36005
+ var xPointCount=this.ChartFrame.XPointCount;
36006
+
36007
+ if (bHScreen)
36008
+ {
36009
+ var border=this.ChartBorder.GetHScreenBorder();
36010
+ var chartright=border.BottomEx;
36011
+ var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
36012
+ var left=this.ChartBorder.GetTop();
36013
+ var right=this.ChartBorder.GetBottom();
36014
+ }
36015
+ else
36016
+ {
36017
+ var border=this.ChartBorder.GetBorder();
36018
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
36019
+ var chartright=border.RightEx;
36020
+ var left=this.ChartBorder.GetLeft();
36021
+ var right=this.ChartBorder.GetRight();
36022
+ }
36023
+
36024
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
36025
+ {
36026
+ var kItem=this.Data.Data[i];
36027
+ if (!kItem) continue;
36028
+
36029
+ var key=this.BuildKey(kItem);
36030
+ if (!mapText.has(key)) continue;
36031
+
36032
+ var left=xOffset;
36033
+ var right=xOffset+dataWidth;
36034
+ if (right>chartright) break;
36035
+ var x=left+(right-left)/2;
36036
+
36037
+ var textItem=mapText.get(key);
36038
+ for(var k=0;k<textItem.Data.length;++k)
36039
+ {
36040
+ var item=textItem.Data[k];
36041
+
35985
36042
  if (item.Value=="TOP") y=top;
35986
36043
  else if (item.Value=="BOTTOM") y=bottom;
35987
36044
  else y=this.ChartFrame.GetYFromData(item.Value);
@@ -36063,6 +36120,20 @@ function ChartMultiText()
36063
36120
  }
36064
36121
  }
36065
36122
 
36123
+ this.Draw=function()
36124
+ {
36125
+ if (!this.IsShow || this.ChartFrame.IsMinSize) return;
36126
+ if (!this.Data || this.Data.length<=0) return;
36127
+ if (!this.Texts) return;
36128
+
36129
+ this.IsHScreen=(this.ChartFrame.IsHScreen===true);
36130
+
36131
+ var mapText=this.GetShowTextData();
36132
+ if (mapText.size<=0) return;
36133
+
36134
+ this.DrawAllText(mapText);
36135
+ }
36136
+
36066
36137
  this.GetMaxMin=function()
36067
36138
  {
36068
36139
  var range={ Min:null, Max:null };
@@ -66801,7 +66872,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
66801
66872
 
66802
66873
  if (this.KLineSize)
66803
66874
  {
66804
- if (this.KLineSize.DataWidth==null)
66875
+ if (!IFrameSplitOperator.IsNumber(this.KLineSize.DataWidth))
66805
66876
  {
66806
66877
  showCount=this.Frame.SubFrame[0].Frame.XPointCount-this.RightSpaceCount;
66807
66878
  }
@@ -66813,7 +66884,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
66813
66884
  }
66814
66885
  }
66815
66886
 
66816
- for(var i in this.Frame.SubFrame)
66887
+ for(var i=0;i<this.Frame.SubFrame.length;++i)
66817
66888
  {
66818
66889
  var item =this.Frame.SubFrame[i].Frame;
66819
66890
  item.XPointCount=showCount+this.RightSpaceCount;
@@ -66831,7 +66902,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
66831
66902
  this.ChartCorssCursor.StringFormatX.Data=this.ChartPaint[0].Data; //十字光标
66832
66903
  this.Frame.Data=this.ChartPaint[0].Data;
66833
66904
 
66834
- for(var i in this.OverlayChartPaint) //K线叠加 主图股票数据绑定到叠加上
66905
+ for(var i=0; i<this.OverlayChartPaint.length; ++i) //K线叠加 主图股票数据绑定到叠加上
66835
66906
  {
66836
66907
  var item=this.OverlayChartPaint[i];
66837
66908
  item.MainData=this.ChartPaint[0].Data;
@@ -40117,38 +40117,95 @@ function ChartMultiText()
40117
40117
  this.Color=g_JSChartResource.DefaultTextColor;
40118
40118
  this.IsHScreen=false; //是否横屏
40119
40119
 
40120
- this.Draw=function()
40120
+ this.BuildKey=function(item)
40121
40121
  {
40122
- if (!this.IsShow || this.ChartFrame.IsMinSize) return;
40123
- if (!this.Data || this.Data.length<=0) return;
40124
- if (!this.Texts) return;
40122
+ if (IFrameSplitOperator.IsNumber(item.Time))
40123
+ {
40124
+ var key=`${kItem.Date}-${item.Time}`;
40125
+ }
40126
+ else
40127
+ {
40128
+ var key=`${item.Date}`;
40129
+ }
40130
+
40131
+ return key;
40132
+ }
40125
40133
 
40126
- this.IsHScreen=(this.ChartFrame.IsHScreen===true);
40134
+ this.GetShowTextData=function()
40135
+ {
40127
40136
  var xPointCount=this.ChartFrame.XPointCount;
40128
40137
  var offset=this.Data.DataOffset;
40129
- var left=this.ChartBorder.GetLeft();
40130
- var right=this.ChartBorder.GetRight();
40131
- var top=this.ChartBorder.GetTopEx();
40132
- var bottom=this.ChartBorder.GetBottomEx();
40133
40138
 
40134
- if (this.IsHScreen)
40135
- {
40136
- left=this.ChartBorder.GetTop();
40137
- right=this.ChartBorder.GetBottom();
40138
- }
40139
-
40140
- var y=0;
40139
+ var mapText=new Map(); //key='date-time' value={ Data:[] }
40141
40140
  for(var i=0; i<this.Texts.length; ++i)
40142
40141
  {
40143
40142
  var item=this.Texts[i];
40144
-
40145
40143
  if (!item.Text) continue;
40146
40144
  if (!IFrameSplitOperator.IsNumber(item.Index)) continue;
40147
40145
 
40148
40146
  var index=item.Index-offset;
40149
40147
  if (index>=0 && index<xPointCount)
40150
40148
  {
40151
- var x=this.ChartFrame.GetXFromIndex(index);
40149
+ var key=this.BuildKey(item);
40150
+ if (mapText.has(key))
40151
+ {
40152
+ var textItem=mapText.get(key);
40153
+ textItem.Data.push(item);
40154
+ }
40155
+ else
40156
+ {
40157
+ var textItem={ Data:[item] };
40158
+ mapText.set(key, textItem);
40159
+ }
40160
+ }
40161
+ }
40162
+
40163
+ return mapText;
40164
+ }
40165
+
40166
+ this.DrawAllText=function(mapText)
40167
+ {
40168
+ var bHScreen=(this.ChartFrame.IsHScreen===true);
40169
+ var isMinute=this.IsMinuteFrame();
40170
+ var dataWidth=this.ChartFrame.DataWidth;
40171
+ var distanceWidth=this.ChartFrame.DistanceWidth;
40172
+ var xPointCount=this.ChartFrame.XPointCount;
40173
+
40174
+ if (bHScreen)
40175
+ {
40176
+ var border=this.ChartBorder.GetHScreenBorder();
40177
+ var chartright=border.BottomEx;
40178
+ var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
40179
+ var left=this.ChartBorder.GetTop();
40180
+ var right=this.ChartBorder.GetBottom();
40181
+ }
40182
+ else
40183
+ {
40184
+ var border=this.ChartBorder.GetBorder();
40185
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
40186
+ var chartright=border.RightEx;
40187
+ var left=this.ChartBorder.GetLeft();
40188
+ var right=this.ChartBorder.GetRight();
40189
+ }
40190
+
40191
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
40192
+ {
40193
+ var kItem=this.Data.Data[i];
40194
+ if (!kItem) continue;
40195
+
40196
+ var key=this.BuildKey(kItem);
40197
+ if (!mapText.has(key)) continue;
40198
+
40199
+ var left=xOffset;
40200
+ var right=xOffset+dataWidth;
40201
+ if (right>chartright) break;
40202
+ var x=left+(right-left)/2;
40203
+
40204
+ var textItem=mapText.get(key);
40205
+ for(var k=0;k<textItem.Data.length;++k)
40206
+ {
40207
+ var item=textItem.Data[k];
40208
+
40152
40209
  if (item.Value=="TOP") y=top;
40153
40210
  else if (item.Value=="BOTTOM") y=bottom;
40154
40211
  else y=this.ChartFrame.GetYFromData(item.Value);
@@ -40230,6 +40287,20 @@ function ChartMultiText()
40230
40287
  }
40231
40288
  }
40232
40289
 
40290
+ this.Draw=function()
40291
+ {
40292
+ if (!this.IsShow || this.ChartFrame.IsMinSize) return;
40293
+ if (!this.Data || this.Data.length<=0) return;
40294
+ if (!this.Texts) return;
40295
+
40296
+ this.IsHScreen=(this.ChartFrame.IsHScreen===true);
40297
+
40298
+ var mapText=this.GetShowTextData();
40299
+ if (mapText.size<=0) return;
40300
+
40301
+ this.DrawAllText(mapText);
40302
+ }
40303
+
40233
40304
  this.GetMaxMin=function()
40234
40305
  {
40235
40306
  var range={ Min:null, Max:null };
@@ -70968,7 +71039,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
70968
71039
 
70969
71040
  if (this.KLineSize)
70970
71041
  {
70971
- if (this.KLineSize.DataWidth==null)
71042
+ if (!IFrameSplitOperator.IsNumber(this.KLineSize.DataWidth))
70972
71043
  {
70973
71044
  showCount=this.Frame.SubFrame[0].Frame.XPointCount-this.RightSpaceCount;
70974
71045
  }
@@ -70980,7 +71051,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
70980
71051
  }
70981
71052
  }
70982
71053
 
70983
- for(var i in this.Frame.SubFrame)
71054
+ for(var i=0;i<this.Frame.SubFrame.length;++i)
70984
71055
  {
70985
71056
  var item =this.Frame.SubFrame[i].Frame;
70986
71057
  item.XPointCount=showCount+this.RightSpaceCount;
@@ -70998,7 +71069,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
70998
71069
  this.ChartCorssCursor.StringFormatX.Data=this.ChartPaint[0].Data; //十字光标
70999
71070
  this.Frame.Data=this.ChartPaint[0].Data;
71000
71071
 
71001
- for(var i in this.OverlayChartPaint) //K线叠加 主图股票数据绑定到叠加上
71072
+ for(var i=0; i<this.OverlayChartPaint.length; ++i) //K线叠加 主图股票数据绑定到叠加上
71002
71073
  {
71003
71074
  var item=this.OverlayChartPaint[i];
71004
71075
  item.MainData=this.ChartPaint[0].Data;
@@ -131793,7 +131864,7 @@ function ScrollBarBGChart()
131793
131864
 
131794
131865
 
131795
131866
 
131796
- var HQCHART_VERSION="1.1.12828";
131867
+ var HQCHART_VERSION="1.1.12835";
131797
131868
 
131798
131869
  function PrintHQChartVersion()
131799
131870
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12828";
8
+ var HQCHART_VERSION="1.1.12835";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -40161,38 +40161,95 @@ function ChartMultiText()
40161
40161
  this.Color=g_JSChartResource.DefaultTextColor;
40162
40162
  this.IsHScreen=false; //是否横屏
40163
40163
 
40164
- this.Draw=function()
40164
+ this.BuildKey=function(item)
40165
40165
  {
40166
- if (!this.IsShow || this.ChartFrame.IsMinSize) return;
40167
- if (!this.Data || this.Data.length<=0) return;
40168
- if (!this.Texts) return;
40166
+ if (IFrameSplitOperator.IsNumber(item.Time))
40167
+ {
40168
+ var key=`${kItem.Date}-${item.Time}`;
40169
+ }
40170
+ else
40171
+ {
40172
+ var key=`${item.Date}`;
40173
+ }
40174
+
40175
+ return key;
40176
+ }
40169
40177
 
40170
- this.IsHScreen=(this.ChartFrame.IsHScreen===true);
40178
+ this.GetShowTextData=function()
40179
+ {
40171
40180
  var xPointCount=this.ChartFrame.XPointCount;
40172
40181
  var offset=this.Data.DataOffset;
40173
- var left=this.ChartBorder.GetLeft();
40174
- var right=this.ChartBorder.GetRight();
40175
- var top=this.ChartBorder.GetTopEx();
40176
- var bottom=this.ChartBorder.GetBottomEx();
40177
40182
 
40178
- if (this.IsHScreen)
40179
- {
40180
- left=this.ChartBorder.GetTop();
40181
- right=this.ChartBorder.GetBottom();
40182
- }
40183
-
40184
- var y=0;
40183
+ var mapText=new Map(); //key='date-time' value={ Data:[] }
40185
40184
  for(var i=0; i<this.Texts.length; ++i)
40186
40185
  {
40187
40186
  var item=this.Texts[i];
40188
-
40189
40187
  if (!item.Text) continue;
40190
40188
  if (!IFrameSplitOperator.IsNumber(item.Index)) continue;
40191
40189
 
40192
40190
  var index=item.Index-offset;
40193
40191
  if (index>=0 && index<xPointCount)
40194
40192
  {
40195
- var x=this.ChartFrame.GetXFromIndex(index);
40193
+ var key=this.BuildKey(item);
40194
+ if (mapText.has(key))
40195
+ {
40196
+ var textItem=mapText.get(key);
40197
+ textItem.Data.push(item);
40198
+ }
40199
+ else
40200
+ {
40201
+ var textItem={ Data:[item] };
40202
+ mapText.set(key, textItem);
40203
+ }
40204
+ }
40205
+ }
40206
+
40207
+ return mapText;
40208
+ }
40209
+
40210
+ this.DrawAllText=function(mapText)
40211
+ {
40212
+ var bHScreen=(this.ChartFrame.IsHScreen===true);
40213
+ var isMinute=this.IsMinuteFrame();
40214
+ var dataWidth=this.ChartFrame.DataWidth;
40215
+ var distanceWidth=this.ChartFrame.DistanceWidth;
40216
+ var xPointCount=this.ChartFrame.XPointCount;
40217
+
40218
+ if (bHScreen)
40219
+ {
40220
+ var border=this.ChartBorder.GetHScreenBorder();
40221
+ var chartright=border.BottomEx;
40222
+ var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
40223
+ var left=this.ChartBorder.GetTop();
40224
+ var right=this.ChartBorder.GetBottom();
40225
+ }
40226
+ else
40227
+ {
40228
+ var border=this.ChartBorder.GetBorder();
40229
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
40230
+ var chartright=border.RightEx;
40231
+ var left=this.ChartBorder.GetLeft();
40232
+ var right=this.ChartBorder.GetRight();
40233
+ }
40234
+
40235
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
40236
+ {
40237
+ var kItem=this.Data.Data[i];
40238
+ if (!kItem) continue;
40239
+
40240
+ var key=this.BuildKey(kItem);
40241
+ if (!mapText.has(key)) continue;
40242
+
40243
+ var left=xOffset;
40244
+ var right=xOffset+dataWidth;
40245
+ if (right>chartright) break;
40246
+ var x=left+(right-left)/2;
40247
+
40248
+ var textItem=mapText.get(key);
40249
+ for(var k=0;k<textItem.Data.length;++k)
40250
+ {
40251
+ var item=textItem.Data[k];
40252
+
40196
40253
  if (item.Value=="TOP") y=top;
40197
40254
  else if (item.Value=="BOTTOM") y=bottom;
40198
40255
  else y=this.ChartFrame.GetYFromData(item.Value);
@@ -40274,6 +40331,20 @@ function ChartMultiText()
40274
40331
  }
40275
40332
  }
40276
40333
 
40334
+ this.Draw=function()
40335
+ {
40336
+ if (!this.IsShow || this.ChartFrame.IsMinSize) return;
40337
+ if (!this.Data || this.Data.length<=0) return;
40338
+ if (!this.Texts) return;
40339
+
40340
+ this.IsHScreen=(this.ChartFrame.IsHScreen===true);
40341
+
40342
+ var mapText=this.GetShowTextData();
40343
+ if (mapText.size<=0) return;
40344
+
40345
+ this.DrawAllText(mapText);
40346
+ }
40347
+
40277
40348
  this.GetMaxMin=function()
40278
40349
  {
40279
40350
  var range={ Min:null, Max:null };
@@ -71012,7 +71083,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
71012
71083
 
71013
71084
  if (this.KLineSize)
71014
71085
  {
71015
- if (this.KLineSize.DataWidth==null)
71086
+ if (!IFrameSplitOperator.IsNumber(this.KLineSize.DataWidth))
71016
71087
  {
71017
71088
  showCount=this.Frame.SubFrame[0].Frame.XPointCount-this.RightSpaceCount;
71018
71089
  }
@@ -71024,7 +71095,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
71024
71095
  }
71025
71096
  }
71026
71097
 
71027
- for(var i in this.Frame.SubFrame)
71098
+ for(var i=0;i<this.Frame.SubFrame.length;++i)
71028
71099
  {
71029
71100
  var item =this.Frame.SubFrame[i].Frame;
71030
71101
  item.XPointCount=showCount+this.RightSpaceCount;
@@ -71042,7 +71113,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
71042
71113
  this.ChartCorssCursor.StringFormatX.Data=this.ChartPaint[0].Data; //十字光标
71043
71114
  this.Frame.Data=this.ChartPaint[0].Data;
71044
71115
 
71045
- for(var i in this.OverlayChartPaint) //K线叠加 主图股票数据绑定到叠加上
71116
+ for(var i=0; i<this.OverlayChartPaint.length; ++i) //K线叠加 主图股票数据绑定到叠加上
71046
71117
  {
71047
71118
  var item=this.OverlayChartPaint[i];
71048
71119
  item.MainData=this.ChartPaint[0].Data;
@@ -131951,7 +132022,7 @@ function HQChartScriptWorker()
131951
132022
 
131952
132023
 
131953
132024
 
131954
- var HQCHART_VERSION="1.1.12828";
132025
+ var HQCHART_VERSION="1.1.12835";
131955
132026
 
131956
132027
  function PrintHQChartVersion()
131957
132028
  {