hqchart 1.1.14406 → 1.1.14412

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.
@@ -2352,7 +2352,7 @@ this.YTextPosition=[0,0],//是坐标否强制画在内部 [0=左侧] [1=右侧]
2352
2352
  this.YTextPadding=[g_JSChartResource.Frame.YTextPadding[0],g_JSChartResource.Frame.YTextPadding[1]],//Y轴文字和边框间距 [0=左侧] [1=右侧]
2353
2353
  this.IsShowXLine=true;//是否显示X轴刻度线
2354
2354
  this.IsShowYLine=true;this.YInsideOffset=0;this.YTextBaseline=0;//0=居中 1=上部 (目前就支持内部刻度)
2355
- this.MultiTextFormat=0;//多行刻度信息显示模式 0=显示第1行 1=价格/百分比 2=显示2行
2355
+ this.MultiTextFormat=0;//多行刻度信息显示模式 0=显示第1行 1=单行多个文本 2=显示2行
2356
2356
  this.RightTextMaxWidth=0;this.ShortYLineLength=5;this.ShortXLineLength=5;this.BeforeDrawXYCallback;//坐标绘制前回调,绘制深度图
2357
2357
  this.GetEventCallback;//事件回调
2358
2358
  //工具栏的按钮样式
@@ -2377,7 +2377,7 @@ var leftExtendLine=null;//左侧延长线
2377
2377
  if(IFrameSplitOperator.IsNonEmptyArray(this.YLineExtend)){rightExtendLine=this.YLineExtend[1];leftExtendLine=this.YLineExtend[0];}var rightExtendText=null;//右侧文字设置
2378
2378
  var leftExtendText=null;//左侧文字设置
2379
2379
  if(IFrameSplitOperator.IsNonEmptyArray(this.YTextExtend)){leftExtendText=this.YTextExtend[0];rightExtendText=this.YTextExtend[1];}var yPrev=null;//上一个坐标y的值
2380
- var pixelRatio=GetDevicePixelRatio();var itemHeight=(border.BottomEx-border.TopEx)/this.HorizontalInfo.length;var aryMultiText=[];var rtPreRight,rtRight,rtLeft,rtPreLeft;var textBaseline=0;//0=上 1=中 2=下
2380
+ var pixelRatio=GetDevicePixelRatio();var itemHeight=(border.BottomEx-border.TopEx)/this.HorizontalInfo.length;var aryMultiText=[];var aryLeftMulitText=[];var rtPreRight,rtRight,rtLeft,rtPreLeft;var textBaseline=0;//0=上 1=中 2=下
2381
2381
  for(var i=this.HorizontalInfo.length-1;i>=0;--i)//从上往下画分割线
2382
2382
  {var item=this.HorizontalInfo[i];if(!IFrameSplitOperator.IsNumber(item.Value))continue;if(NumberCompare.GT(item.Value,this.HorizontalMax)||NumberCompare.LT(item.Value,this.HorizontalMin))continue;var y=this.GetYFromData(item.Value);if(y!=null&&yPrev!=null&&Math.abs(y-yPrev)<this.MinYDistance)continue;//两个坐标在近了 就不画了
2383
2383
  var yFixed=ToFixedPoint(y);//绘制刻度线
@@ -2388,23 +2388,30 @@ this.Canvas.beginPath();this.Canvas.moveTo(left,yFixed);this.Canvas.lineTo(right
2388
2388
  {}else if(item.LineType>0){if(g_JSChartResource.FrameYLineDash){this.Canvas.save();this.Canvas.setLineDash(g_JSChartResource.FrameYLineDash);//虚线
2389
2389
  this.Canvas.beginPath();this.Canvas.moveTo(left,yFixed);this.Canvas.lineTo(right,yFixed);this.Canvas.stroke();this.Canvas.setLineDash([]);this.Canvas.restore();}else{this.Canvas.beginPath();this.Canvas.moveTo(left,yFixed);this.Canvas.lineTo(right,yFixed);this.Canvas.stroke();}}if(bChangeLineWidth){this.Canvas.lineWidth=pixelRatio;}}var yText=y;if(y>=bottom-2){this.Canvas.textBaseline='bottom';textBaseline=2;}else if(y<=top+2){this.Canvas.textBaseline='top';yText+=this.YTextTopOffset;textBaseline=0;}else{this.Canvas.textBaseline="middle";textBaseline=1;}//左边 坐标信息 间距小于10 不画坐标
2390
2390
  this.Canvas.strokeStyle=item.TextColor;this.Canvas.fillStyle=item.TextColor;if(item.Message[0]!=null&&isDrawLeft){var yOffset=0;if(IFrameSplitOperator.IsNonEmptyArray(item.YOffset))//文字Y轴偏移
2391
- {var offsetItem=item.YOffset[0];if(offsetItem&&IFrameSplitOperator.IsNumber(offsetItem.Offset))yOffset=offsetItem.Offset;}if(Array.isArray(item.Message[0])){if(this.MultiTextFormat==3){var obj={Data:item.Message[0],X:left,Y:yText,TextBaseLine:textBaseline,IsLeft:true,Item:item,TextPadding:this.YTextPadding[0]};this.DrawMultiLineText(obj);}}else{if(item.Font!=null)this.Canvas.font=item.Font;var xText=left;if(leftExtendLine&&leftExtendLine.Width>1){var lineLength=leftExtendLine.Width;if(leftExtendLine.Color)this.Canvas.strokeStyle=leftExtendLine.Color;else this.Canvas.strokeStyle=item.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(xText,yFixed);this.Canvas.lineTo(xText-lineLength,yFixed);this.Canvas.stroke();xText-=lineLength;}rtLeft=this.GetTextTopBottom(textBaseline,yText);if(!rtPreLeft||rtLeft&&!this.IsTextTopBottomOverlap(rtLeft,rtPreLeft)){if(leftExtendText&&leftExtendText.Align===1){this.Canvas.textAlign="left";this.Canvas.fillText(item.Message[0],this.YTextPadding[0],yText+yOffset);}else{this.Canvas.textAlign="right";this.Canvas.fillText(item.Message[0],xText-this.YTextPadding[0],yText+yOffset);rtPreLeft=rtLeft;}}}}//右边 坐标信息 间距小于10 不画坐标
2391
+ {var offsetItem=item.YOffset[0];if(offsetItem&&IFrameSplitOperator.IsNumber(offsetItem.Offset))yOffset=offsetItem.Offset;}if(Array.isArray(item.Message[0])){if(this.MultiTextFormat==1)//显示1 格式如:价格/百分比
2392
+ {var textData=this.CreateMulitCoordinateItem(item.Message[0],left-2,yText,this.Canvas.textBaseline,item);aryLeftMulitText.push(textData);}else if(this.MultiTextFormat==3){var obj={Data:item.Message[0],X:left,Y:yText,TextBaseLine:textBaseline,IsLeft:true,Item:item,TextPadding:this.YTextPadding[0]};this.DrawMultiLineText(obj);}}else{if(item.Font!=null)this.Canvas.font=item.Font;var xText=left;if(leftExtendLine&&leftExtendLine.Width>1){var lineLength=leftExtendLine.Width;if(leftExtendLine.Color)this.Canvas.strokeStyle=leftExtendLine.Color;else this.Canvas.strokeStyle=item.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(xText,yFixed);this.Canvas.lineTo(xText-lineLength,yFixed);this.Canvas.stroke();xText-=lineLength;}rtLeft=this.GetTextTopBottom(textBaseline,yText);if(!rtPreLeft||rtLeft&&!this.IsTextTopBottomOverlap(rtLeft,rtPreLeft)){if(leftExtendText&&leftExtendText.Align===1){this.Canvas.textAlign="left";this.Canvas.fillText(item.Message[0],this.YTextPadding[0],yText+yOffset);}else{this.Canvas.textAlign="right";this.Canvas.fillText(item.Message[0],xText-this.YTextPadding[0],yText+yOffset);rtPreLeft=rtLeft;}}}}//右边 坐标信息 间距小于10 不画坐标
2392
2393
  if(item.Message[1]!=null&&isDrawRight){var yOffset=0;if(IFrameSplitOperator.IsNonEmptyArray(item.YOffset))//文字Y轴偏移
2393
2394
  {var offsetItem=item.YOffset[1];if(offsetItem&&IFrameSplitOperator.IsNumber(offsetItem.Offset))yOffset=offsetItem.Offset;}if(item.Font!=null)this.Canvas.font=item.Font;var xText=right;if(item.LineType==3){var lineLength=this.ShortYLineLength*GetDevicePixelRatio();this.Canvas.beginPath();this.Canvas.moveTo(xText,yFixed);this.Canvas.lineTo(xText+lineLength,yFixed);this.Canvas.stroke();xText+=lineLength;}//右侧延长线
2394
- if(rightExtendLine&&rightExtendLine.Width>1){var lineLength=rightExtendLine.Width;if(rightExtendLine.Color)this.Canvas.strokeStyle=rightExtendLine.Color;else this.Canvas.strokeStyle=item.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(xText,yFixed);this.Canvas.lineTo(xText+lineLength,yFixed);this.Canvas.stroke();xText+=lineLength+2;}this.Canvas.textAlign="left";if(Array.isArray(item.Message[1])){if(this.MultiTextFormat==1)//显示1行 格式:价格/百分比
2395
- {if(item.ExtendData){if(item.ExtendData.Font)this.Canvas.font=item.ExtendData.Font;}var textData={Text:[{Text:item.Message[1][0],Width:this.Canvas.measureText(item.Message[1][0]).width},{Text:item.Message[1][1],Width:this.Canvas.measureText(item.Message[1][1]).width}],X:xText+2,Y:yText,TextBaseline:this.Canvas.textBaseline,Item:item};aryMultiText.push(textData);}else if(this.MultiTextFormat==2)//显示2行
2395
+ if(rightExtendLine&&rightExtendLine.Width>1){var lineLength=rightExtendLine.Width;if(rightExtendLine.Color)this.Canvas.strokeStyle=rightExtendLine.Color;else this.Canvas.strokeStyle=item.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(xText,yFixed);this.Canvas.lineTo(xText+lineLength,yFixed);this.Canvas.stroke();xText+=lineLength+2;}this.Canvas.textAlign="left";if(Array.isArray(item.Message[1])){if(this.MultiTextFormat==1)//显示1行 格式如:价格/百分比
2396
+ {var textData=this.CreateMulitCoordinateItem(item.Message[1],xText+2,yText,this.Canvas.textBaseline,item);aryMultiText.push(textData);}else if(this.MultiTextFormat==2)//显示2行
2396
2397
  {this.Canvas.fillText(item.Message[1][0],xText+this.YTextPadding[1],yText);var lineHeight=this.Canvas.measureText('M').width;if(itemHeight>lineHeight*2)this.Canvas.fillText(item.Message[1][1],xText+this.YTextPadding[1],yText+lineHeight);}else if(this.MultiTextFormat==3){var obj={Data:item.Message[1],X:xText,Y:yText,TextBaseLine:textBaseline,IsLeft:false,Item:item,TextPadding:this.YTextPadding[1]};this.DrawMultiLineText(obj);}else//显示第1行
2397
2398
  {var text=item.Message[1][0];if(item.TextColor2)this.Canvas.fillStyle=item.TextColor2;if(rightExtendText&&rightExtendText.Align===2&&this.YRightTextInfo)//右对齐
2398
2399
  {this.Canvas.textAlign="right";var xRight=this.YRightTextInfo.MainTextWidth+right-this.YTextPadding[1];this.Canvas.fillText(text,xRight,yText);}else{this.Canvas.fillText(text,xText+this.YTextPadding[1],yText);}}}else{//计算显示的区域
2399
2400
  rtRight=this.GetTextTopBottom(textBaseline,yText);if(!rtPreRight||rtRight&&!this.IsTextTopBottomOverlap(rtRight,rtPreRight)){if(item.TextColor2)this.Canvas.fillStyle=item.TextColor2;if(rightExtendText&&rightExtendText.Align===2&&this.YRightTextInfo)//右对齐
2400
- {this.Canvas.textAlign="right";var xRight=this.YRightTextInfo.MainTextWidth+right-this.YTextPadding[1];this.Canvas.fillText(item.Message[1],xRight,yText+yOffset);}else{this.Canvas.fillText(item.Message[1],xText+this.YTextPadding[1],yText+yOffset);}rtPreRight=rtRight;}}}yPrev=y;}if(IFrameSplitOperator.IsNonEmptyArray(aryMultiText)&&this.MultiTextFormat==1)this.DrawHorizontalMuText(aryMultiText);if(isDrawRight&&this.IsDrawRightBorder&&this.YRightTextInfo){var xRight=this.YRightTextInfo.MainTextWidth+right;xLine=ToFixedPoint(xRight);this.Canvas.strokeStyle=this.PenBorder;this.Canvas.beginPath();this.Canvas.moveTo(xLine,top);this.Canvas.lineTo(xLine,bottom);this.Canvas.stroke();if(IFrameSplitOperator.IsNonEmptyArray(this.YRightTextInfo.AryOverlayWidth)){this.Canvas.beginPath();for(var i=0;i<this.YRightTextInfo.AryOverlayWidth.length;++i){var width=this.YRightTextInfo.AryOverlayWidth[i];xRight+=width;xLine=ToFixedPoint(xRight);this.Canvas.moveTo(xLine,top);this.Canvas.lineTo(xLine,bottom);}this.Canvas.stroke();}}};//多行文字刻度输出 obj={ Data:, X:, Y:, TextBaseLine:, IsLeft:, Item:刻度数据 }
2401
+ {this.Canvas.textAlign="right";var xRight=this.YRightTextInfo.MainTextWidth+right-this.YTextPadding[1];this.Canvas.fillText(item.Message[1],xRight,yText+yOffset);}else{this.Canvas.fillText(item.Message[1],xText+this.YTextPadding[1],yText+yOffset);}rtPreRight=rtRight;}}}yPrev=y;}if(IFrameSplitOperator.IsNonEmptyArray(aryLeftMulitText)&&this.MultiTextFormat==1)this.DrawMultiCoordinateLeftText(aryLeftMulitText);if(IFrameSplitOperator.IsNonEmptyArray(aryMultiText)&&this.MultiTextFormat==1)this.DrawMultiCoordinateRightText(aryMultiText);if(isDrawRight&&this.IsDrawRightBorder&&this.YRightTextInfo){var xRight=this.YRightTextInfo.MainTextWidth+right;xLine=ToFixedPoint(xRight);this.Canvas.strokeStyle=this.PenBorder;this.Canvas.beginPath();this.Canvas.moveTo(xLine,top);this.Canvas.lineTo(xLine,bottom);this.Canvas.stroke();if(IFrameSplitOperator.IsNonEmptyArray(this.YRightTextInfo.AryOverlayWidth)){this.Canvas.beginPath();for(var i=0;i<this.YRightTextInfo.AryOverlayWidth.length;++i){var width=this.YRightTextInfo.AryOverlayWidth[i];xRight+=width;xLine=ToFixedPoint(xRight);this.Canvas.moveTo(xLine,top);this.Canvas.lineTo(xLine,bottom);}this.Canvas.stroke();}}};this.CreateMulitCoordinateItem=function(aryData,x,y,textBaseline,data){var coordinateItem={AryText:[],X:x,Y:y,TextBaseline:textBaseline,Item:data};for(var i=0;i<aryData.length;++i){var item=aryData[i];if(item.Font)this.Canvas.font=item.Font;var textWidth=0;if(item.Text)textWidth=this.Canvas.measureText(item.Text).width;coordinateItem.AryText.push({Width:textWidth,Item:item});}return coordinateItem;};this.GetMulitCoordinateItemTextWidth=function(aryData){var total=0;for(var i=0;i<aryData.length;++i){var item=aryData[i];if(item.Font)this.Canvas.font=item.Font;var width=this.Canvas.measureText(item.Text).width;total+=width;}return total;};//多行文字刻度输出 obj={ Data:, X:, Y:, TextBaseLine:, IsLeft:, Item:刻度数据 }
2401
2402
  this.DrawMultiLineText=function(obj){var lineSpacing=2;var lineHeight=this.Canvas.measureText('擎').width;var lineCount=obj.Data.length;var textHeight=lineHeight*lineCount+lineSpacing*(lineCount-1);var yText=obj.Y;if(obj.Item.Font!=null)this.Canvas.font=obj.Item.Font;if(obj.IsLeft){this.Canvas.textAlign="right";var xText=obj.X-obj.TextPadding;}else{this.Canvas.textAlign="left";var xText=obj.X+obj.TextPadding;}var textBaseline=this.Canvas.textBaseline;//备份下原来的对齐方式
2402
2403
  this.Canvas.textBaseline='top';if(obj.TextBaseLine==1)//middle
2403
2404
  {yText-=textHeight/2;}else if(obj.TextBaseLine==0)//top
2404
2405
  {}else if(obj.TextBaseLine==2)//bottom
2405
2406
  {yText-=textHeight;}for(var i=0;i<obj.Data.length;++i){var item=obj.Data[i];var text=item.Text;var backupTextColor=null;if(item.Color){backupTextColor=this.Canvas.fillStyle;this.Canvas.fillStyle=item.Color;}this.Canvas.fillText(text,xText,yText);yText+=lineHeight+lineSpacing;if(backupTextColor)this.Canvas.fillStyle=backupTextColor;}this.Canvas.textBaseline=textBaseline;//还原对齐方式
2406
2407
  };//上下区域是否重叠
2407
- this.IsTextTopBottomOverlap=function(rt,rt2){if(rt2.Top>=rt.Top&&rt2.Top<=rt.Bottom)return true;if(rt2.Bottom>=rt.Top&&rt2.Bottom<=rt.Bottom)return true;return false;};this.GetTextTopBottom=function(textBaseline,yText){var rtRight=null;var textHeight=this.Canvas.measureText('擎').width;if(textBaseline==0){rtRight={Top:yText,Bottom:yText+textHeight};}else if(textBaseline==1){rtRight={Top:yText-textHeight/2};rtRight.Bottom=rtRight.Top+textHeight;}else if(textBaseline==2){rtRight={Bottom:yText};rtRight.Top=rtRight.Bottom-textHeight;}return rtRight;};this.DrawHorizontalMuText=function(aryText){var maxWidth=[null,null];for(var i=0;i<aryText.length;++i){var item=aryText[i];var width=item.Text[0].Width;if(!IFrameSplitOperator.IsNumber(maxWidth[0]))maxWidth[0]=width;else if(maxWidth[0]<width)maxWidth[0]=width;width=item.Text[1].Width;if(!IFrameSplitOperator.IsNumber(maxWidth[1]))maxWidth[1]=width;else if(maxWidth[1]<width)maxWidth[1]=width;}for(var i=0;i<aryText.length;++i){var item=aryText[i];var message=item.Item;this.Canvas.textBaseline=item.TextBaseline;if(message.ExtendData&&message.ExtendData.Font)this.Canvas.font=message.ExtendData.Font;else if(message.Font)this.Canvas.font=message.Font;if(message.ExtendData&&message.ExtendData.PriceColor)this.Canvas.fillStyle=message.ExtendData.PriceColor;else this.Canvas.fillStyle=message.TextColor;this.Canvas.textAlign="right";var x=item.X+maxWidth[1];this.Canvas.fillText(item.Text[1].Text,x,item.Y);if(message.ExtendData&&message.ExtendData.SplitColor)this.Canvas.fillStyle=message.ExtendData.SplitColor;else this.Canvas.fillStyle=message.TextColor;this.Canvas.textAlign="left";var splitWidth=this.Canvas.measureText('/').width;this.Canvas.fillText('/',x,item.Y);if(message.ExtendData&&message.ExtendData.PercentageColor)this.Canvas.fillStyle=message.ExtendData.PercentageColor;else this.Canvas.fillStyle=message.TextColor;this.Canvas.textAlign="right";var x=item.X+maxWidth[1]+maxWidth[0]+splitWidth;this.Canvas.fillText(item.Text[0].Text,x,item.Y);var textWidth=maxWidth[1]+maxWidth[0]+splitWidth*4;if(this.RightTextMaxWidth<textWidth)this.RightTextMaxWidth=textWidth;}};//画Y轴Message[2,3]两个内部刻度
2408
+ this.IsTextTopBottomOverlap=function(rt,rt2){if(rt2.Top>=rt.Top&&rt2.Top<=rt.Bottom)return true;if(rt2.Bottom>=rt.Top&&rt2.Bottom<=rt.Bottom)return true;return false;};this.GetTextTopBottom=function(textBaseline,yText){var rtRight=null;var textHeight=this.Canvas.measureText('擎').width;if(textBaseline==0){rtRight={Top:yText,Bottom:yText+textHeight};}else if(textBaseline==1){rtRight={Top:yText-textHeight/2};rtRight.Bottom=rtRight.Top+textHeight;}else if(textBaseline==2){rtRight={Bottom:yText};rtRight.Top=rtRight.Bottom-textHeight;}return rtRight;};//绘制多重坐标刻度文字 左侧
2409
+ this.DrawMultiCoordinateLeftText=function(aryText){var aryMaxWidth=[];for(var i=0,j=0;i<aryText.length;++i){var item=aryText[i];for(var j=0;j<item.AryText.length;++j){var textItem=item.AryText[j];if(!IFrameSplitOperator.IsNumber(aryMaxWidth[j])||aryMaxWidth[j]<textItem.Width)aryMaxWidth[j]=textItem.Width;}}this.Canvas.textAlign="right";for(var i=0;i<aryText.length;++i){var item=aryText[i];var message=item.Item;var x=item.X;this.Canvas.textBaseline=item.TextBaseline;for(var j=0;j<item.AryText.length;++j){var textItem=item.AryText[j];var subText=textItem.Item;if(subText&&subText.Text){if(subText.Font)this.Canvas.font=subText.Font;//字体
2410
+ else if(message.Font)this.Canvas.font=message.Font;if(subText.Color)this.Canvas.fillStyle=subText.Color;//颜色
2411
+ else this.Canvas.fillStyle=message.TextColor;this.Canvas.fillText(subText.Text,x,item.Y);}x-=aryMaxWidth[j];}}};//绘制多重坐标刻度文字 右侧
2412
+ this.DrawMultiCoordinateRightText=function(aryText){var aryMaxWidth=[];for(var i=0,j=0;i<aryText.length;++i){var item=aryText[i];for(var j=0;j<item.AryText.length;++j){var textItem=item.AryText[j];if(!IFrameSplitOperator.IsNumber(aryMaxWidth[j])||aryMaxWidth[j]<textItem.Width)aryMaxWidth[j]=textItem.Width;}}this.Canvas.textAlign="right";for(var i=0;i<aryText.length;++i){var item=aryText[i];var message=item.Item;var x=item.X;this.Canvas.textBaseline=item.TextBaseline;for(var j=0;j<item.AryText.length;++j){var textItem=item.AryText[j];var subText=textItem.Item;if(subText&&subText.Text){if(subText.Font)this.Canvas.font=subText.Font;//字体
2413
+ else if(message.Font)this.Canvas.font=message.Font;if(subText.Color)this.Canvas.fillStyle=subText.Color;//颜色
2414
+ else this.Canvas.fillStyle=message.TextColor;x+=aryMaxWidth[j];this.Canvas.fillText(subText.Text,x,item.Y);}}}};//画Y轴Message[2,3]两个内部刻度
2408
2415
  this.DrawInsideClientHorizontal=function(){var border=this.GetBorder();if(border.DayBorder&&IFrameSplitOperator.IsNonEmptyArray(border.DayBorder)){var item=border.DayBorder[0];var left=item.LeftEx;var item=border.DayBorder[border.DayBorder.length-1];var right=item.RightEx;var bottom=border.Bottom;var top=border.TopTitle;}else{var left=border.LeftEx;var right=border.RightEx;var bottom=border.Bottom;var top=border.TopTitle;}var pixelTatio=GetDevicePixelRatio();var yPrev=null;//上一个坐标y的值
2409
2416
  var yInsideText=null;for(var i=this.HorizontalInfo.length-1;i>=0;--i)//从上往下画分割线
2410
2417
  {var item=this.HorizontalInfo[i];var y=this.GetYFromData(item.Value);if(y!=null&&yPrev!=null&&Math.abs(y-yPrev)<this.MinYDistance)continue;//两个坐标在近了 就不画了
@@ -2471,10 +2478,9 @@ this.Canvas.beginPath();if(this.IsHScreen){this.Canvas.moveTo(ToFixedPoint(y),le
2471
2478
  if(this.IsHScreen){var borderTop=this.ChartBorder.Top;var borderBottom=this.ChartBorder.Bottom;var isDrawLeft=borderTop>10*pixelTatio&&this.IsShowYText[0]===true&&this.YTextPosition[0]!=2;//var isDrawRight=borderBottom>10*pixelTatio && this.IsShowYText[1]===true && this.YTextPosition[1]!=2;
2472
2479
  var isDrawRight=this.IsShowRightHorizontal();}else{var borderRight=this.ChartBorder.Right;var borderLeft=this.ChartBorder.Left;var isDrawLeft=borderLeft>10&&this.IsShowYText[0]===true&&this.YTextPosition[0]!=2;//var isDrawRight=borderRight>10 && this.IsShowYText[1]===true && this.YTextPosition[1]!=2;
2473
2480
  var isDrawRight=this.IsShowRightHorizontal();}if(!isDrawRight&&!isDrawLeft)return null;var width={Left:null,Right:null};var rightExtendWidth=0;var isYPercentage=false;//是否是百分比坐标
2474
- if(this.YSplitOperator&&this.YSplitOperator.CoordinateType==1)isYPercentage=true;var leftExtendLineWidth=0;var rightExtendLineWidth=0;if(IFrameSplitOperator.IsNonEmptyArray(this.YLineExtend)){if(this.YLineExtend[0]&&this.YLineExtend[0].Width>1)leftExtendLineWidth=this.YLineExtend[0].Width;if(this.YLineExtend[1]&&this.YLineExtend[1].Width>1)rightExtendLineWidth=this.YLineExtend[1].Width;}for(var i=0;i<this.HorizontalInfo.length;++i){var textWidth=null;var item=this.HorizontalInfo[i];if(!item)continue;if(item.Font!=null)this.Canvas.font=item.Font;if(item.Message[0]!=null&&isDrawLeft){if(Array.isArray(item.Message[0])){textWidth=this.GetMulitTextMaxWidth(item.Message[0]);}else{textWidth=this.Canvas.measureText(item.Message[0]).width;}if(width.Left==null||width.Left<textWidth)width.Left=textWidth;//JSConsole.Chart.Log(`[ChartData::GetScaleTextWidth] ${item.Message[0]} ${textWidth}`);
2475
- }if(item.Message[1]!=null&&isDrawRight){if(item.Font!=null)this.Canvas.font=item.Font;if(Array.isArray(item.Message[1])){if(this.MultiTextFormat==1&&IFrameSplitOperator.IsNonEmptyArray(item.Message[1]))//显示1行 格式:价格/百分比
2476
- {if(item.ExtendData&&item.ExtendData.Font)this.Canvas.font=item.ExtendData.Font;var width1=this.Canvas.measureText(item.Message[1][0]).width;var width2=this.Canvas.measureText(item.Message[1][1]).width;var width3=this.Canvas.measureText('/').width;textWidth=width1+width3;if(rightExtendWidth<width2)rightExtendWidth=width2;//JSConsole.Chart.Log(`[ChartData::GetScaleTextWidth] ${item.Message[1][1]}/${item.Message[1][0]} ${textWidth}, ${rightExtendWidth}`);
2477
- }else if(this.MultiTextFormat==2)//显示2行
2481
+ if(this.YSplitOperator&&this.YSplitOperator.CoordinateType==1)isYPercentage=true;var leftExtendLineWidth=0;var rightExtendLineWidth=0;if(IFrameSplitOperator.IsNonEmptyArray(this.YLineExtend)){if(this.YLineExtend[0]&&this.YLineExtend[0].Width>1)leftExtendLineWidth=this.YLineExtend[0].Width;if(this.YLineExtend[1]&&this.YLineExtend[1].Width>1)rightExtendLineWidth=this.YLineExtend[1].Width;}for(var i=0;i<this.HorizontalInfo.length;++i){var textWidth=null;var item=this.HorizontalInfo[i];if(!item)continue;if(item.Font!=null)this.Canvas.font=item.Font;if(item.Message[0]!=null&&isDrawLeft){if(Array.isArray(item.Message[0])){if(this.MultiTextFormat==1)textWidth=this.GetMulitCoordinateItemTextWidth(item.Message[0]);else textWidth=this.GetMulitTextMaxWidth(item.Message[0]);}else{textWidth=this.Canvas.measureText(item.Message[0]).width;}if(width.Left==null||width.Left<textWidth)width.Left=textWidth;//JSConsole.Chart.Log(`[ChartData::GetScaleTextWidth] ${item.Message[0]} ${textWidth}`);
2482
+ }if(item.Message[1]!=null&&isDrawRight){if(item.Font!=null)this.Canvas.font=item.Font;if(Array.isArray(item.Message[1])){if(this.MultiTextFormat==1)//显示1行 格式:价格/百分比
2483
+ {textWidth=this.GetMulitCoordinateItemTextWidth(item.Message[1]);}else if(this.MultiTextFormat==2)//显示2行
2478
2484
  {textWidth=this.Canvas.measureText(item.Message[1][0]).width;var textWidth2=this.Canvas.measureText(item.Message[1][1]).width;if(textWidth<textWidth2)textWidth=textWidth2;}else if(this.MultiTextFormat==3){textWidth=this.GetMulitTextMaxWidth(item.Message[1]);}else//显示第1行
2479
2485
  {textWidth=this.Canvas.measureText(item.Message[1][0]).width;if(isYPercentage){var perTextWidth=this.Canvas.measureText("-00.00%").width;if(perTextWidth>textWidth)textWidth=perTextWidth;}}}else{textWidth=this.Canvas.measureText(item.Message[1]).width;}if(width.Right==null||width.Right<textWidth)width.Right=textWidth;}}if(IFrameSplitOperator.IsNumber(width.Right))width.Right+=rightExtendWidth;if(IFrameSplitOperator.IsNumber(width.Left))width.Left+=this.YTextPadding[0]+leftExtendLineWidth;if(IFrameSplitOperator.IsNumber(width.Right))width.Right+=this.YTextPadding[1]+rightExtendLineWidth;return{TextWidth:width};};this.ClearToolbar=function(){if(!this.ToolbarID)return;var divToolbar=document.getElementById(this.ToolbarID);if(!divToolbar)return;this.ChartBorder.UIElement.parentNode.removeChild(divToolbar);this.ToolbarRect=null;};this.HideToolbar=function(){if(!this.ToolbarID)return;this.ToolbarRect=null;var divToolbar=document.getElementById(this.ToolbarID);if(!divToolbar)return;if(divToolbar.style.display!='none')divToolbar.style.display='none';};this.GetMainOverlayFrame=function(){if(!this.FrameData||!this.FrameData.SubFrameItem)return null;var subFrame=this.FrameData.SubFrameItem;var leftFrame=null,rightFrame=null;for(var i=0;i<subFrame.OverlayIndex.length;++i){var item=subFrame.OverlayIndex[i];var overlayFrame=item.Frame;if(overlayFrame.IsShowMainFrame==2)rightFrame=overlayFrame;else if(overlayFrame.IsShowMainFrame==1)leftFrame=overlayFrame;}if(!leftFrame&&!rightFrame)return null;return[leftFrame,rightFrame];};}function MinuteFrame(){this.newMethod=AverageWidthFrame;//派生
2480
2486
  this.newMethod();delete this.newMethod;this.ClassName="MinuteFrame";this.DataWidth=1*GetDevicePixelRatio();this.DistanceWidth=1*GetDevicePixelRatio();this.MinuteCount=243;//每天的分钟个数
@@ -5491,51 +5497,13 @@ var spacePrice=5*pixelTatio*(max-min)/height;max+=spacePrice;min-=spacePrice;if(
5491
5497
  {var coordinate=new CoordinateInfo();coordinate.Value=this.YClose;coordinate.LineType=2;//中间的线画虚线
5492
5498
  if(g_JSChartResource.FrameDotSplitPen)coordinate.LineColor=g_JSChartResource.FrameDotSplitPen;var strPrice=this.YClose.toFixed(defaultfloatPrecision);//价格刻度字符串
5493
5499
  if(this.IsShowLeftText)coordinate.Message[0]=strPrice;if(this.IsShowRightText){if(this.RightTextFormat==1)coordinate.Message[1]=strPrice;else coordinate.Message[1]='0.00%';//百分比
5494
- }this.Frame.HorizontalInfo.push(coordinate);}this.Frame.HorizontalInfo.sort(function(a,b){return a.Value-b.Value;});this.Frame.HorizontalMax=max;this.Frame.HorizontalMin=min;};this.DefaultSplit=function(range,isFixedMaxMin){var max=range.Max;var min=range.Min;if(!isFixedMaxMin){if(this.YClose==max&&this.YClose==min){max=this.YClose+this.YClose*0.1;min=this.YClose-this.YClose*0.1;}else{var distanceValue=Math.max(Math.abs(this.YClose-max),Math.abs(this.YClose-min));max=this.YClose+distanceValue;min=this.YClose-distanceValue;if(min<0)min=range.Min;}}var pixelTatio=GetDevicePixelRatio();//获取设备的分辨率
5500
+ }this.Frame.HorizontalInfo.push(coordinate);}this.Frame.HorizontalInfo.sort(function(a,b){return a.Value-b.Value;});this.Frame.HorizontalMax=max;this.Frame.HorizontalMin=min;};this.DefaultSplit=function(range,isFixedMaxMin){var max=range.Max;var min=range.Min;if(!isFixedMaxMin){if(this.YClose==max&&this.YClose==min){max=this.YClose+this.YClose*0.1;min=this.YClose-this.YClose*0.1;}else{var distanceValue=Math.max(Math.abs(this.YClose-max),Math.abs(this.YClose-min));max=this.YClose+distanceValue;min=this.YClose-distanceValue;//if (min<0) min=range.Min;
5501
+ }}var pixelTatio=GetDevicePixelRatio();//获取设备的分辨率
5495
5502
  var width=this.Frame.ChartBorder.GetChartWidth();//画布的宽度
5496
5503
  var isPhoneModel=width<450*pixelTatio;JSConsole.Chart.Log('[FrameSplitMinutePriceY]'+'max='+max+' min='+min+' isPhoneModel='+isPhoneModel);var showCount=this.SplitCount;var distance=(max-min)/(showCount-1);var minDistance=[1,0.1,0.01,0.001,0.0001];var defaultfloatPrecision=GetfloatPrecision(this.Symbol);if(isPhoneModel&&MARKET_SUFFIX_NAME.IsSHSZIndex(this.Symbol))defaultfloatPrecision=0;//手机端指数不显示小数位数,太长了
5497
- if(distance<minDistance[defaultfloatPrecision]&&!isFixedMaxMin){distance=minDistance[defaultfloatPrecision];max=this.YClose+distance*(showCount-1)/2;min=this.YClose-distance*(showCount-1)/2;}var aryCoordinate=[];var extendValue=distance*0.5;for(var price=this.YClose,i=0;price<=max+extendValue&&i<30;price+=distance,++i){var coordinate=new CoordinateInfo();coordinate.Value=price;this.FormatCoordinate(coordinate,defaultfloatPrecision);aryCoordinate.push(coordinate);}for(var price=this.YClose-distance,i=0;price>=min-extendValue&&i<30;price-=distance,++i){var coordinate=new CoordinateInfo();coordinate.Value=price;this.FormatCoordinate(coordinate,defaultfloatPrecision);aryCoordinate.push(coordinate);}aryCoordinate.sort(function(left,right){return left.Value-right.Value;});/*
5498
- for(var i=0;i<showCount;++i)
5499
- {
5500
- var price=min+(distance*i);
5501
- var coordinate=new CoordinateInfo();
5502
- this.Frame.HorizontalInfo[i]=coordinate
5503
- coordinate.Value=price;
5504
- var strPrice=price.toFixed(defaultfloatPrecision); //价格刻度字符串
5505
- if (this.IsShowLeftText) coordinate.Message[0]=strPrice
5506
-
5507
- if (IFrameSplitOperator.IsNumber(this.YClose) && this.YClose!=0)
5508
- {
5509
- var per=(price/this.YClose-1)*100;
5510
- if (per>0) coordinate.TextColor=g_JSChartResource.UpTextColor;
5511
- else if (per<0) coordinate.TextColor=g_JSChartResource.DownTextColor;
5512
- var strPer=`${IFrameSplitOperator.FormatValueString(per,2)}%`;
5513
- if (this.IsShowRightText)
5514
- {
5515
- if (this.RightTextFormat==1)
5516
- {
5517
- coordinate.Message[1]=strPrice;
5518
- }
5519
- else if (this.RightTextFormat==2) //价格/百分比
5520
- {
5521
- coordinate.Message[1]=[strPer,strPrice];
5522
- }
5523
- else
5524
- {
5525
- coordinate.Message[1]=strPer; //百分比
5526
- }
5527
- }
5528
-
5529
- if (Math.abs(price-this.YClose) <0.00000000001) //小数有精度问题 使用差值
5530
- {
5531
- coordinate.LineType=2;//中间的线画虚线
5532
- coordinate.TextColor=g_JSChartResource.UnchagneTextColor;
5533
- if (g_JSChartResource.FrameDotSplitPen) coordinate.LineColor=g_JSChartResource.FrameDotSplitPen;
5534
- }
5535
- }
5536
- }*/this.Frame.HorizontalInfo=aryCoordinate;this.Frame.HorizontalMax=max;this.Frame.HorizontalMin=min;};this.FormatCoordinate=function(coordinate,defaultfloatPrecision){var price=coordinate.Value;var strPrice=price.toFixed(defaultfloatPrecision);//价格刻度字符串
5504
+ if(distance<minDistance[defaultfloatPrecision]&&!isFixedMaxMin){distance=minDistance[defaultfloatPrecision];max=this.YClose+distance*(showCount-1)/2;min=this.YClose-distance*(showCount-1)/2;}var aryCoordinate=[];var extendValue=distance*0.5;for(var price=this.YClose,i=0;price<=max+extendValue&&i<30;price+=distance,++i){var coordinate=new CoordinateInfo();coordinate.Value=price;this.FormatCoordinate(coordinate,defaultfloatPrecision);aryCoordinate.push(coordinate);}for(var price=this.YClose-distance,i=0;price>=min-extendValue&&i<30;price-=distance,++i){var coordinate=new CoordinateInfo();coordinate.Value=price;this.FormatCoordinate(coordinate,defaultfloatPrecision);aryCoordinate.push(coordinate);}aryCoordinate.sort(function(left,right){return left.Value-right.Value;});this.Frame.HorizontalInfo=aryCoordinate;this.Frame.HorizontalMax=max;this.Frame.HorizontalMin=min;};this.FormatCoordinate=function(coordinate,defaultfloatPrecision){var price=coordinate.Value;var strPrice=price.toFixed(defaultfloatPrecision);//价格刻度字符串
5537
5505
  if(this.IsShowLeftText)coordinate.Message[0]=strPrice;if(IFrameSplitOperator.IsNumber(this.YClose)&&this.YClose!=0){var per=(price/this.YClose-1)*100;if(per>0)coordinate.TextColor=g_JSChartResource.UpTextColor;else if(per<0)coordinate.TextColor=g_JSChartResource.DownTextColor;var strPer=IFrameSplitOperator.FormatValueString(per,2)+'%';if(this.IsShowRightText){if(this.RightTextFormat==1){coordinate.Message[1]=strPrice;}else if(this.RightTextFormat==2)//价格/百分比
5538
- {coordinate.Message[1]=[strPer,strPrice];}else{coordinate.Message[1]=strPer;//百分比
5506
+ {coordinate.Message[1]=[{Text:strPrice},{Text:"/"},{Text:strPer}];}else{coordinate.Message[1]=strPer;//百分比
5539
5507
  }}if(Math.abs(price-this.YClose)<0.00000000001)//小数有精度问题 使用差值
5540
5508
  {coordinate.LineType=2;//中间的线画虚线
5541
5509
  coordinate.TextColor=g_JSChartResource.UnchagneTextColor;if(g_JSChartResource.FrameDotSplitPen)coordinate.LineColor=g_JSChartResource.FrameDotSplitPen;}}};}function FrameSplitMinuteX(){this.newMethod=IFrameSplitOperator;//派生
@@ -12050,7 +12018,7 @@ var result=[];if(ChartData.IsDayPeriod(hqChart.Period,true))//日线
12050
12018
  var result=[];if(ChartData.IsDayPeriod(hqChart.Period,true))//日线
12051
12019
  {var bFill=false;for(var i=0,j=0;i<kData.Data.length;++i){result[i]=0;var kItem=kData.Data[i];var date=kItem.Date;for(j=0;j<data.length;++j){var rangeItem=data[j];if(date>=rangeItem.Start.Date&&date<=rangeItem.End.Date){result[i]=1;bFill=true;break;}}}if(bFill)return result;}else if(ChartData.IsMinutePeriod(hqChart.Period,true))//分钟线
12052
12020
  {var aryRange=[];for(var i=0;i<data.length;++i){var item=data[i];var startDatetime=item.Start.Date*10000;if(IFrameSplitOperator.IsNumber(item.Start.Time))startDatetime+=item.Start.Time;var endDatetime=item.End.Date*10000;if(IFrameSplitOperator.IsNumber(item.End.Time))endDatetime+=item.End.Time;aryRange.push({Start:startDatetime,End:endDatetime});}var bFill=false;for(var i=0,j=0;i<kData.Data.length;++i){result[i]=0;var kItem=kData.Data[i];var date=kItem.Date*10000+kItem.Time;for(j=0;j<aryRange.length;++j){var rangeItem=aryRange[j];if(date>=rangeItem.Start&&date<=rangeItem.End){result[i]=1;bFill=true;break;}}}if(bFill)return result;}return null;};this.FittingMinuteData=function(jsonData,hqChart){var outVar=jsonData.outvar;var date=jsonData.date;var time=jsonData.time;var result=[];for(var i=0;i<outVar.length;++i){var item=outVar[i];var outVarItem={Name:item.name,Type:item.type};if(IFrameSplitOperator.IsBool(item.IsShowTitle))outVarItem.IsShowTitle=item.IsShowTitle;//是否显示指标标题
12053
- if(item.data){outVarItem.Data=this.FittingMinuteArray(item.data,date,time,hqChart);if(item.color)outVarItem.Color=item.color;if(item.linewidth>=1)outVarItem.LineWidth=item.linewidth;if(item.isshow==false)outVarItem.IsShow=false;if(item.isexdata==true)outVarItem.IsExData=true;if(item.BreakPoint)outVarItem.BreakPoint=item.BreakPoint;if(item.UpColor)outVarItem.UpColor=item.UpColor;if(item.DownColor)outVarItem.DownColor=item.DownColor;if(IFrameSplitOperator.IsBool(item.isDotLine))outVarItem.IsDotLine=item.isDotLine;if(IFrameSplitOperator.IsNonEmptyArray(item.lineDash))outVarItem.LineDash=item.lineDash;if(IFrameSplitOperator.IsBool(item.isSingleLine))outVarItem.IsSingleLine=item.isSingleLine;if(IFrameSplitOperator.IsNonEmptyArray(item.AryBreakPoint))outVarItem.AryBreakPoint=item.AryBreakPoint;result.push(outVarItem);}else if(item.Draw){var draw=item.Draw;var drawItem={};if(draw.DrawType=='DRAWICON')//图标
12021
+ if(item.data){outVarItem.Data=this.FittingMinuteArray(item.data,date,time,hqChart);if(item.color)outVarItem.Color=item.color;if(item.linewidth)outVarItem.LineWidth=item.linewidth;if(item.isshow==false)outVarItem.IsShow=false;if(item.isexdata==true)outVarItem.IsExData=true;if(item.BreakPoint)outVarItem.BreakPoint=item.BreakPoint;if(item.UpColor)outVarItem.UpColor=item.UpColor;if(item.DownColor)outVarItem.DownColor=item.DownColor;if(IFrameSplitOperator.IsBool(item.isDotLine))outVarItem.IsDotLine=item.isDotLine;if(IFrameSplitOperator.IsNonEmptyArray(item.lineDash))outVarItem.LineDash=item.lineDash;if(IFrameSplitOperator.IsBool(item.isSingleLine))outVarItem.IsSingleLine=item.isSingleLine;if(IFrameSplitOperator.IsNonEmptyArray(item.AryBreakPoint))outVarItem.AryBreakPoint=item.AryBreakPoint;result.push(outVarItem);}else if(item.Draw){var draw=item.Draw;var drawItem={};if(draw.DrawType=='DRAWICON')//图标
12054
12022
  {drawItem.Icon=draw.Icon;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='DRAWTEXT')//文本
12055
12023
  {drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='STICKLINE')//柱子
12056
12024
  {drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.Width=draw.Width;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart,1);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType==SCRIPT_CHART_NAME.OVERLAY_BARS){drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.DrawType=draw.DrawType;drawItem.BarName=draw.BarName;drawItem.BarColor=draw.BarColor;drawItem.LineWidth=draw.LineWidth;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart,1);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType==SCRIPT_CHART_NAME.CLIP_COLOR_STICK){drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMinuteArray(draw.Data,date,time,hqChart);outVarItem.Draw=drawItem;if(draw.Option)outVarItem.Option=draw.Option;result.push(outVarItem);}else if(draw.DrawType=='MULTI_LINE'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMultiLine(draw.DrawData,date,time,hqChart);for(var k in drawItem.DrawData){this.GetKLineData(drawItem.DrawData[k].Point,hqChart);}outVarItem.Draw=drawItem;if(draw.LineDash)drawItem.LineDash=draw.LineDash;if(draw.Arrow)drawItem.Arrow=draw.Arrow;result.push(outVarItem);}else if(draw.DrawType=='MULTI_POINT'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=draw.DrawData;outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_TEXT'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=draw.DrawData;outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_SVGICON'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData={Icon:draw.DrawData.Icon,Family:draw.DrawData.Family};outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='DRAWSVG'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;if(draw.AutoPosition)drawItem.AutoPosition=draw.AutoPosition;if(draw.BuildKeyCallback)drawItem.BuildKeyCallback=draw.BuildKeyCallback;drawItem.DrawData={Data:draw.Data,Family:draw.Family,TextFont:draw.TextFont,EnableTooltip:draw.EnableTooltip,IsDrawFirst:draw.IsDrawFirst};outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=="MULTI_HTMLDOM")//外部自己创建dom
@@ -14360,7 +14328,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
14360
14328
  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);};}/********************************************************************************
14361
14329
  * 版本信息输出
14362
14330
  *
14363
- */var HQCHART_VERSION="1.1.14405";function PrintHQChartVersion(){var logo='\n\n*************************************************************************************************************************************************************************** \n* \n* :%@@- \n* :@@@@- \n* =@@@@ :#@@@ .:+#@@@#=: :=*@@@@@@#+-. *@@@@. \n* :@@@@@ .@@@@@ .#@@@@@@@@@@@- +@@@@@@@@@@@@@+ @@@@@ -%@@* \n* +@@@@% #@@@@# *@@@@@@@@@@@@@@%. =@@@@@@@@@@@@@@@- @@@@@ -@@@@+ \n* %@@@@* @@@@@+ .%@@@@@@@@@@@@@@@@%: #@@@@@@@@@@@@@@@% @@@@# *@@@@= \n* @@@@@= @@@@@- .%@@@@@@@*++*%@@@@@@% .%@@@@@@@%*+==+**= -@@@@+ #@@@@- \n* @@@@@. @@@@@. #@@@@@%= =@@@@@@* %@@@@@@#: *@@@@- :::. .-+*###+: ::: .+##+: -%%@@@@@%%%% \n* .@@@@@ .@@@@@. +@@@@@% .@@@@@@ *@@@@@@: %@@@@: +@@@@@%. :%@@@@@@@@@@: *@@@ :@@@@@* @@@@@@@@@@@@ \n* :@@@@@ :@@@@@ @@@@@% :@@@@@+ @@@@@@: %@@@@-@@@@@@@@@. @@@@@@@@@@@@@. :@@@%-@@@@@@.:@@@@@@@@@@@# \n* -@@@@% -@@@@@ =@@@@@. %@@@@% %@@@@@- %@@@@@@@@@@@@@@* %@@@@@@@@@@@@+ -@@@@@@@@@@# -@@@@@@@@@@@. \n* +@@@@%=========#@@@@% @@@@@# :@@@@@ .@@@@@% @@@@@@@@%@@@@@@@ -%+:. .#@@@@* +@@@@@@@%%@. .::+@@@@#:: \n* #@@@@@@@@@@@@@@@@@@@# .@@@@@ .@@@@@ :@@@@@. @@@@@@#. #@@@@@. -@@@@* #@@@@@@: *@@@@+ \n* %@@@@@@@@@@@@@@@@@@@+ :@@@@@ .@@@@@ -@@@@@ @@@@@+ @@@@@. :@@@@* @@@@@% #@@@@- \n* @@@@@@@@@@@@@@@@@@@@: :@@@@% :@@@@@ +@@@@% -@@@@+ @@@@@ -@@@@+ @@@@@. @@@@@. \n* .@@@@@@@@@@@@@@@@@@@@ :@@@@% -@@@@% *@@@@% #@@@@. @@@@@ .=*#%%%@@@@@= :@@@@# @@@@@. \n* -@@@@@:::::::::=@@@@@ :@@@@@ @@@@@* +@@@@% @@@@@ @@@@% -#@@@@@@@@@@@@: -@@@@* @@@@@ \n* =@@@@% =@@@@% .@@@@@ :@@@@@. -@@@@% @@@@@ .@@@@* +@@@@@@@@@@@@@@. =@@@@+ .@@@@@ \n* +@@@@# +@@@@# @@@@@# %@@@@% :@@@@@ .@@@@% =@@@@= -@@@@@*-:..%@@@@ +@@@@= :@@@@# \n* *@@@@* *@@@@* +@@@@@: #@@@@@+ .@@@@@@ :@@@@% *@@@@- @@@@@. @@@@% #@@@@: =@@@@+ \n* %@@@@= %@@@@+ @@@@@@- .%@@@@@# #@@@@@# :@@@@% #@@@@: @@@@% @@@@* %@@@@. #@@@@- \n* @@@@@- @@@@@= =@@@@@@#=...-*@@@@@@@: @@@@@@%=. :+**. :@@@@* %@@@@. .@@@@* *@@@@= @@@@@ %@@@@+ \n* .@@@@@: .@@@@@: *@@@@@@@@@@@@@@@@@@@# =@@@@@@@@%%%@@@@@@ +@@@@- @@@@@ .@@@@@: :%@@@@@- .@@@@% %@@@@@*+- \n* :@@@@@ :@@@@@ +@@@@@@@@@@@@@@@@@@@# =@@@@@@@@@@@@@@@@% %@@@@ @@@@@ @@@@@@@@@@@@@@@: -@@@@* *@@@@@@@@- \n* =@@@@@ -@@@@@ :@@@@@@@@@@@@@@@@@@@# :@@@@@@@@@@@@@@@% @@@@@ %@@@% #@@@@@@@@@#@@@@. +@@@@- .@@@@@@@@# \n* *@@@@# =@@@@% :#@@@@@@@#: :@@@@@= =@@@@@@@@@@@+. @@@@@ :@@@+ *@@@@@@@- %@@@ *@@@= =@@@@@@@* \n* =++++- -++++= .:::. .=*+: :-=+++=:. ****= .=+. .-++=: :+++ -+=: .-=+=:. \n* \n* \n* HQChart \n* Ver: '+HQCHART_VERSION+' \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n************************************************************************************************************************************************************************** \n ';console.log(logo);}PrintHQChartVersion();//把给外界调用的方法暴露出来
14331
+ */var HQCHART_VERSION="1.1.14410";function PrintHQChartVersion(){var logo='\n\n*************************************************************************************************************************************************************************** \n* \n* :%@@- \n* :@@@@- \n* =@@@@ :#@@@ .:+#@@@#=: :=*@@@@@@#+-. *@@@@. \n* :@@@@@ .@@@@@ .#@@@@@@@@@@@- +@@@@@@@@@@@@@+ @@@@@ -%@@* \n* +@@@@% #@@@@# *@@@@@@@@@@@@@@%. =@@@@@@@@@@@@@@@- @@@@@ -@@@@+ \n* %@@@@* @@@@@+ .%@@@@@@@@@@@@@@@@%: #@@@@@@@@@@@@@@@% @@@@# *@@@@= \n* @@@@@= @@@@@- .%@@@@@@@*++*%@@@@@@% .%@@@@@@@%*+==+**= -@@@@+ #@@@@- \n* @@@@@. @@@@@. #@@@@@%= =@@@@@@* %@@@@@@#: *@@@@- :::. .-+*###+: ::: .+##+: -%%@@@@@%%%% \n* .@@@@@ .@@@@@. +@@@@@% .@@@@@@ *@@@@@@: %@@@@: +@@@@@%. :%@@@@@@@@@@: *@@@ :@@@@@* @@@@@@@@@@@@ \n* :@@@@@ :@@@@@ @@@@@% :@@@@@+ @@@@@@: %@@@@-@@@@@@@@@. @@@@@@@@@@@@@. :@@@%-@@@@@@.:@@@@@@@@@@@# \n* -@@@@% -@@@@@ =@@@@@. %@@@@% %@@@@@- %@@@@@@@@@@@@@@* %@@@@@@@@@@@@+ -@@@@@@@@@@# -@@@@@@@@@@@. \n* +@@@@%=========#@@@@% @@@@@# :@@@@@ .@@@@@% @@@@@@@@%@@@@@@@ -%+:. .#@@@@* +@@@@@@@%%@. .::+@@@@#:: \n* #@@@@@@@@@@@@@@@@@@@# .@@@@@ .@@@@@ :@@@@@. @@@@@@#. #@@@@@. -@@@@* #@@@@@@: *@@@@+ \n* %@@@@@@@@@@@@@@@@@@@+ :@@@@@ .@@@@@ -@@@@@ @@@@@+ @@@@@. :@@@@* @@@@@% #@@@@- \n* @@@@@@@@@@@@@@@@@@@@: :@@@@% :@@@@@ +@@@@% -@@@@+ @@@@@ -@@@@+ @@@@@. @@@@@. \n* .@@@@@@@@@@@@@@@@@@@@ :@@@@% -@@@@% *@@@@% #@@@@. @@@@@ .=*#%%%@@@@@= :@@@@# @@@@@. \n* -@@@@@:::::::::=@@@@@ :@@@@@ @@@@@* +@@@@% @@@@@ @@@@% -#@@@@@@@@@@@@: -@@@@* @@@@@ \n* =@@@@% =@@@@% .@@@@@ :@@@@@. -@@@@% @@@@@ .@@@@* +@@@@@@@@@@@@@@. =@@@@+ .@@@@@ \n* +@@@@# +@@@@# @@@@@# %@@@@% :@@@@@ .@@@@% =@@@@= -@@@@@*-:..%@@@@ +@@@@= :@@@@# \n* *@@@@* *@@@@* +@@@@@: #@@@@@+ .@@@@@@ :@@@@% *@@@@- @@@@@. @@@@% #@@@@: =@@@@+ \n* %@@@@= %@@@@+ @@@@@@- .%@@@@@# #@@@@@# :@@@@% #@@@@: @@@@% @@@@* %@@@@. #@@@@- \n* @@@@@- @@@@@= =@@@@@@#=...-*@@@@@@@: @@@@@@%=. :+**. :@@@@* %@@@@. .@@@@* *@@@@= @@@@@ %@@@@+ \n* .@@@@@: .@@@@@: *@@@@@@@@@@@@@@@@@@@# =@@@@@@@@%%%@@@@@@ +@@@@- @@@@@ .@@@@@: :%@@@@@- .@@@@% %@@@@@*+- \n* :@@@@@ :@@@@@ +@@@@@@@@@@@@@@@@@@@# =@@@@@@@@@@@@@@@@% %@@@@ @@@@@ @@@@@@@@@@@@@@@: -@@@@* *@@@@@@@@- \n* =@@@@@ -@@@@@ :@@@@@@@@@@@@@@@@@@@# :@@@@@@@@@@@@@@@% @@@@@ %@@@% #@@@@@@@@@#@@@@. +@@@@- .@@@@@@@@# \n* *@@@@# =@@@@% :#@@@@@@@#: :@@@@@= =@@@@@@@@@@@+. @@@@@ :@@@+ *@@@@@@@- %@@@ *@@@= =@@@@@@@* \n* =++++- -++++= .:::. .=*+: :-=+++=:. ****= .=+. .-++=: :+++ -+=: .-=+=:. \n* \n* \n* HQChart \n* Ver: '+HQCHART_VERSION+' \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n************************************************************************************************************************************************************************** \n ';console.log(logo);}PrintHQChartVersion();//把给外界调用的方法暴露出来
14364
14332
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
14365
14333
  // BaseIndex:BaseIndex,
14366
14334
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.14406",
3
+ "version": "1.1.14412",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -25470,7 +25470,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
25470
25470
  {
25471
25471
  outVarItem.Data=this.FittingMinuteArray(item.data,date,time,hqChart);
25472
25472
  if (item.color) outVarItem.Color=item.color;
25473
- if (item.linewidth>=1) outVarItem.LineWidth=item.linewidth;
25473
+ if (item.linewidth) outVarItem.LineWidth=item.linewidth;
25474
25474
  if (item.isshow==false) outVarItem.IsShow = false;
25475
25475
  if (item.isexdata==true) outVarItem.IsExData = true;
25476
25476
  if (item.BreakPoint) outVarItem.BreakPoint=item.BreakPoint;
@@ -11712,7 +11712,7 @@ function AverageWidthFrame()
11712
11712
  this.IsShowYLine=true;
11713
11713
  this.YInsideOffset=0;
11714
11714
  this.YTextBaseline=0; //0=居中 1=上部 (目前就支持内部刻度)
11715
- this.MultiTextFormat=0; //多行刻度信息显示模式 0=显示第1行 1=价格/百分比 2=显示2行
11715
+ this.MultiTextFormat=0; //多行刻度信息显示模式 0=显示第1行 1=单行多个文本 2=显示2行
11716
11716
  this.RightTextMaxWidth=0;
11717
11717
 
11718
11718
  this.ShortYLineLength=5;
@@ -12047,6 +12047,7 @@ function AverageWidthFrame()
12047
12047
  var pixelRatio=GetDevicePixelRatio();
12048
12048
  var itemHeight=(border.BottomEx-border.TopEx)/this.HorizontalInfo.length;
12049
12049
  var aryMultiText=[];
12050
+ var aryLeftMulitText=[];
12050
12051
  var rtPreRight, rtRight, rtLeft, rtPreLeft;
12051
12052
  var textBaseline=0; //0=上 1=中 2=下
12052
12053
  for(var i=this.HorizontalInfo.length-1; i>=0; --i) //从上往下画分割线
@@ -12153,7 +12154,12 @@ function AverageWidthFrame()
12153
12154
 
12154
12155
  if (Array.isArray(item.Message[0]))
12155
12156
  {
12156
- if (this.MultiTextFormat==3)
12157
+ if (this.MultiTextFormat==1) //显示1行 格式如:价格/百分比
12158
+ {
12159
+ var textData=this.CreateMulitCoordinateItem(item.Message[0], left-2, yText, this.Canvas.textBaseline, item);
12160
+ aryLeftMulitText.push(textData);
12161
+ }
12162
+ else if (this.MultiTextFormat==3)
12157
12163
  {
12158
12164
  var obj={ Data:item.Message[0], X:left, Y:yText, TextBaseLine:textBaseline, IsLeft:true, Item:item, TextPadding:this.YTextPadding[0] };
12159
12165
  this.DrawMultiLineText(obj);
@@ -12239,25 +12245,9 @@ function AverageWidthFrame()
12239
12245
  this.Canvas.textAlign="left";
12240
12246
  if (Array.isArray(item.Message[1]))
12241
12247
  {
12242
- if (this.MultiTextFormat==1) //显示1行 格式:价格/百分比
12248
+ if (this.MultiTextFormat==1) //显示1行 格式如:价格/百分比
12243
12249
  {
12244
- if (item.ExtendData)
12245
- {
12246
- if (item.ExtendData.Font) this.Canvas.font=item.ExtendData.Font;
12247
- }
12248
-
12249
- var textData=
12250
- {
12251
- Text:
12252
- [
12253
- {Text:item.Message[1][0], Width:this.Canvas.measureText(item.Message[1][0]).width },
12254
- {Text:item.Message[1][1], Width:this.Canvas.measureText(item.Message[1][1]).width }
12255
- ],
12256
- X:xText+2,
12257
- Y:yText,
12258
- TextBaseline:this.Canvas.textBaseline,
12259
- Item:item
12260
- }
12250
+ var textData=this.CreateMulitCoordinateItem(item.Message[1], xText+2, yText, this.Canvas.textBaseline, item);
12261
12251
  aryMultiText.push(textData);
12262
12252
  }
12263
12253
  else if (this.MultiTextFormat==2) //显示2行
@@ -12314,7 +12304,9 @@ function AverageWidthFrame()
12314
12304
  yPrev=y;
12315
12305
  }
12316
12306
 
12317
- if (IFrameSplitOperator.IsNonEmptyArray(aryMultiText) && this.MultiTextFormat==1) this.DrawHorizontalMuText(aryMultiText);
12307
+ if (IFrameSplitOperator.IsNonEmptyArray(aryLeftMulitText) && this.MultiTextFormat==1) this.DrawMultiCoordinateLeftText(aryLeftMulitText);
12308
+ if (IFrameSplitOperator.IsNonEmptyArray(aryMultiText) && this.MultiTextFormat==1) this.DrawMultiCoordinateRightText(aryMultiText);
12309
+
12318
12310
 
12319
12311
  if (isDrawRight && this.IsDrawRightBorder && this.YRightTextInfo)
12320
12312
  {
@@ -12343,6 +12335,41 @@ function AverageWidthFrame()
12343
12335
  }
12344
12336
  }
12345
12337
 
12338
+ this.CreateMulitCoordinateItem=function(aryData, x, y, textBaseline, data)
12339
+ {
12340
+ var coordinateItem=
12341
+ {
12342
+ AryText:[], X:x,Y:y, TextBaseline:textBaseline, Item:data
12343
+ };
12344
+
12345
+ for(var i=0;i<aryData.length;++i)
12346
+ {
12347
+ var item=aryData[i];
12348
+ if (item.Font) this.Canvas.font=item.Font;
12349
+ var textWidth=0;
12350
+ if (item.Text) textWidth=this.Canvas.measureText(item.Text).width;
12351
+
12352
+ coordinateItem.AryText.push({ Width:textWidth, Item:item });
12353
+ }
12354
+
12355
+ return coordinateItem;
12356
+ }
12357
+
12358
+ this.GetMulitCoordinateItemTextWidth=function(aryData)
12359
+ {
12360
+ var total=0;
12361
+ for(var i=0;i<aryData.length;++i)
12362
+ {
12363
+ var item=aryData[i];
12364
+ if (item.Font) this.Canvas.font=item.Font;
12365
+ var width=this.Canvas.measureText(item.Text).width;
12366
+
12367
+ total+=width;
12368
+ }
12369
+
12370
+ return total;
12371
+ }
12372
+
12346
12373
  //多行文字刻度输出 obj={ Data:, X:, Y:, TextBaseLine:, IsLeft:, Item:刻度数据 }
12347
12374
  this.DrawMultiLineText=function(obj)
12348
12375
  {
@@ -12433,53 +12460,86 @@ function AverageWidthFrame()
12433
12460
  return rtRight;
12434
12461
  }
12435
12462
 
12436
- this.DrawHorizontalMuText=function(aryText)
12463
+ //绘制多重坐标刻度文字 左侧
12464
+ this.DrawMultiCoordinateLeftText=function(aryText)
12437
12465
  {
12438
- var maxWidth=[null,null];
12439
- for(var i=0;i<aryText.length;++i)
12466
+ var aryMaxWidth=[];
12467
+ for(var i=0, j=0;i<aryText.length;++i)
12440
12468
  {
12441
12469
  var item=aryText[i];
12442
- var width=item.Text[0].Width;
12443
- if (!IFrameSplitOperator.IsNumber(maxWidth[0])) maxWidth[0]=width;
12444
- else if (maxWidth[0]<width) maxWidth[0]=width;
12445
-
12446
- width=item.Text[1].Width;
12447
- if (!IFrameSplitOperator.IsNumber(maxWidth[1])) maxWidth[1]=width;
12448
- else if (maxWidth[1]<width) maxWidth[1]=width;
12470
+ for(var j=0;j<item.AryText.length;++j)
12471
+ {
12472
+ var textItem=item.AryText[j];
12473
+ if (!IFrameSplitOperator.IsNumber(aryMaxWidth[j]) || aryMaxWidth[j]<textItem.Width) aryMaxWidth[j]=textItem.Width;
12474
+ }
12475
+
12449
12476
  }
12450
12477
 
12478
+ this.Canvas.textAlign="right";
12451
12479
  for(var i=0;i<aryText.length;++i)
12452
12480
  {
12453
12481
  var item=aryText[i];
12454
12482
  var message=item.Item;
12455
-
12483
+ var x=item.X;
12456
12484
  this.Canvas.textBaseline=item.TextBaseline;
12457
- if (message.ExtendData && message.ExtendData.Font) this.Canvas.font=message.ExtendData.Font;
12458
- else if (message.Font) this.Canvas.font=message.Font;
12459
-
12460
- if (message.ExtendData && message.ExtendData.PriceColor) this.Canvas.fillStyle=message.ExtendData.PriceColor;
12461
- else this.Canvas.fillStyle=message.TextColor;
12485
+ for(var j=0;j<item.AryText.length;++j)
12486
+ {
12487
+ var textItem=item.AryText[j];
12488
+ var subText=textItem.Item;
12489
+ if (subText && subText.Text)
12490
+ {
12491
+ if (subText.Font) this.Canvas.font=subText.Font; //字体
12492
+ else if (message.Font) this.Canvas.font=message.Font;
12493
+
12494
+ if (subText.Color) this.Canvas.fillStyle=subText.Color; //颜色
12495
+ else this.Canvas.fillStyle=message.TextColor;
12462
12496
 
12463
- this.Canvas.textAlign="right";
12464
- var x=item.X+maxWidth[1];
12465
- this.Canvas.fillText(item.Text[1].Text,x,item.Y);
12497
+ this.Canvas.fillText(subText.Text,x,item.Y);
12498
+ }
12466
12499
 
12467
- if (message.ExtendData && message.ExtendData.SplitColor) this.Canvas.fillStyle=message.ExtendData.SplitColor;
12468
- else this.Canvas.fillStyle=message.TextColor;
12500
+ x-=aryMaxWidth[j];
12501
+ }
12502
+ }
12503
+ }
12469
12504
 
12470
- this.Canvas.textAlign="left";
12471
- var splitWidth=this.Canvas.measureText('/').width;
12472
- this.Canvas.fillText('/',x,item.Y);
12505
+ //绘制多重坐标刻度文字 右侧
12506
+ this.DrawMultiCoordinateRightText=function(aryText)
12507
+ {
12508
+ var aryMaxWidth=[];
12509
+ for(var i=0, j=0;i<aryText.length;++i)
12510
+ {
12511
+ var item=aryText[i];
12512
+ for(var j=0;j<item.AryText.length;++j)
12513
+ {
12514
+ var textItem=item.AryText[j];
12515
+ if (!IFrameSplitOperator.IsNumber(aryMaxWidth[j]) || aryMaxWidth[j]<textItem.Width) aryMaxWidth[j]=textItem.Width;
12516
+ }
12473
12517
 
12474
- if (message.ExtendData && message.ExtendData.PercentageColor) this.Canvas.fillStyle=message.ExtendData.PercentageColor;
12475
- else this.Canvas.fillStyle=message.TextColor;
12518
+ }
12476
12519
 
12477
- this.Canvas.textAlign="right";
12478
- var x=item.X+maxWidth[1]+maxWidth[0]+splitWidth;
12479
- this.Canvas.fillText(item.Text[0].Text,x,item.Y);
12520
+ this.Canvas.textAlign="right";
12521
+ for(var i=0;i<aryText.length;++i)
12522
+ {
12523
+ var item=aryText[i];
12524
+ var message=item.Item;
12525
+ var x=item.X;
12526
+ this.Canvas.textBaseline=item.TextBaseline;
12527
+ for(var j=0;j<item.AryText.length;++j)
12528
+ {
12529
+ var textItem=item.AryText[j];
12530
+ var subText=textItem.Item;
12531
+ if (subText && subText.Text)
12532
+ {
12533
+ if (subText.Font) this.Canvas.font=subText.Font; //字体
12534
+ else if (message.Font) this.Canvas.font=message.Font;
12535
+
12536
+ if (subText.Color) this.Canvas.fillStyle=subText.Color; //颜色
12537
+ else this.Canvas.fillStyle=message.TextColor;
12480
12538
 
12481
- var textWidth=maxWidth[1]+maxWidth[0]+splitWidth*4;
12482
- if (this.RightTextMaxWidth<textWidth) this.RightTextMaxWidth=textWidth;
12539
+ x+=aryMaxWidth[j];
12540
+ this.Canvas.fillText(subText.Text,x,item.Y);
12541
+ }
12542
+ }
12483
12543
  }
12484
12544
  }
12485
12545
 
@@ -14057,7 +14117,8 @@ function AverageWidthFrame()
14057
14117
  {
14058
14118
  if (Array.isArray(item.Message[0]))
14059
14119
  {
14060
- textWidth=this.GetMulitTextMaxWidth(item.Message[0]);
14120
+ if (this.MultiTextFormat==1) textWidth=this.GetMulitCoordinateItemTextWidth(item.Message[0]);
14121
+ else textWidth=this.GetMulitTextMaxWidth(item.Message[0]);
14061
14122
  }
14062
14123
  else
14063
14124
  {
@@ -14076,17 +14137,9 @@ function AverageWidthFrame()
14076
14137
 
14077
14138
  if (Array.isArray(item.Message[1]))
14078
14139
  {
14079
- if (this.MultiTextFormat==1 && IFrameSplitOperator.IsNonEmptyArray(item.Message[1])) //显示1行 格式:价格/百分比
14140
+ if (this.MultiTextFormat==1) //显示1行 格式:价格/百分比
14080
14141
  {
14081
- if (item.ExtendData && item.ExtendData.Font) this.Canvas.font=item.ExtendData.Font;
14082
-
14083
- var width1=this.Canvas.measureText(item.Message[1][0]).width;
14084
- var width2=this.Canvas.measureText(item.Message[1][1]).width;
14085
- var width3=this.Canvas.measureText('/').width;
14086
- textWidth=width1+width3;
14087
- if (rightExtendWidth<width2) rightExtendWidth=width2;
14088
-
14089
- //JSConsole.Chart.Log(`[ChartData::GetScaleTextWidth] ${item.Message[1][1]}/${item.Message[1][0]} ${textWidth}, ${rightExtendWidth}`);
14142
+ textWidth=this.GetMulitCoordinateItemTextWidth(item.Message[1]);
14090
14143
  }
14091
14144
  else if (this.MultiTextFormat==2) //显示2行
14092
14145
  {
@@ -52840,7 +52893,7 @@ function FrameSplitMinutePriceY()
52840
52893
  var distanceValue=Math.max(Math.abs(this.YClose-max),Math.abs(this.YClose-min));
52841
52894
  max=this.YClose+distanceValue;
52842
52895
  min=this.YClose-distanceValue;
52843
- if (min<0) min=range.Min;
52896
+ //if (min<0) min=range.Min;
52844
52897
  }
52845
52898
  }
52846
52899
 
@@ -52881,47 +52934,6 @@ function FrameSplitMinutePriceY()
52881
52934
 
52882
52935
  aryCoordinate.sort((left,right)=>{ return left.Value-right.Value; })
52883
52936
 
52884
- /*
52885
- for(var i=0;i<showCount;++i)
52886
- {
52887
- var price=min+(distance*i);
52888
- var coordinate=new CoordinateInfo();
52889
- this.Frame.HorizontalInfo[i]=coordinate
52890
- coordinate.Value=price;
52891
- var strPrice=price.toFixed(defaultfloatPrecision); //价格刻度字符串
52892
- if (this.IsShowLeftText) coordinate.Message[0]=strPrice
52893
-
52894
- if (IFrameSplitOperator.IsNumber(this.YClose) && this.YClose!=0)
52895
- {
52896
- var per=(price/this.YClose-1)*100;
52897
- if (per>0) coordinate.TextColor=g_JSChartResource.UpTextColor;
52898
- else if (per<0) coordinate.TextColor=g_JSChartResource.DownTextColor;
52899
- var strPer=`${IFrameSplitOperator.FormatValueString(per,2)}%`;
52900
- if (this.IsShowRightText)
52901
- {
52902
- if (this.RightTextFormat==1)
52903
- {
52904
- coordinate.Message[1]=strPrice;
52905
- }
52906
- else if (this.RightTextFormat==2) //价格/百分比
52907
- {
52908
- coordinate.Message[1]=[strPer,strPrice];
52909
- }
52910
- else
52911
- {
52912
- coordinate.Message[1]=strPer; //百分比
52913
- }
52914
- }
52915
-
52916
- if (Math.abs(price-this.YClose) <0.00000000001) //小数有精度问题 使用差值
52917
- {
52918
- coordinate.LineType=2;//中间的线画虚线
52919
- coordinate.TextColor=g_JSChartResource.UnchagneTextColor;
52920
- if (g_JSChartResource.FrameDotSplitPen) coordinate.LineColor=g_JSChartResource.FrameDotSplitPen;
52921
- }
52922
- }
52923
- }*/
52924
-
52925
52937
  this.Frame.HorizontalInfo=aryCoordinate;
52926
52938
  this.Frame.HorizontalMax=max;
52927
52939
  this.Frame.HorizontalMin=min;
@@ -52948,7 +52960,7 @@ function FrameSplitMinutePriceY()
52948
52960
  }
52949
52961
  else if (this.RightTextFormat==2) //价格/百分比
52950
52962
  {
52951
- coordinate.Message[1]=[strPer,strPrice];
52963
+ coordinate.Message[1]=[ {Text:strPrice}, {Text:"/"}, { Text:strPer} ];
52952
52964
  }
52953
52965
  else
52954
52966
  {
@@ -15637,7 +15637,7 @@ function AverageWidthFrame()
15637
15637
  this.IsShowYLine=true;
15638
15638
  this.YInsideOffset=0;
15639
15639
  this.YTextBaseline=0; //0=居中 1=上部 (目前就支持内部刻度)
15640
- this.MultiTextFormat=0; //多行刻度信息显示模式 0=显示第1行 1=价格/百分比 2=显示2行
15640
+ this.MultiTextFormat=0; //多行刻度信息显示模式 0=显示第1行 1=单行多个文本 2=显示2行
15641
15641
  this.RightTextMaxWidth=0;
15642
15642
 
15643
15643
  this.ShortYLineLength=5;
@@ -15972,6 +15972,7 @@ function AverageWidthFrame()
15972
15972
  var pixelRatio=GetDevicePixelRatio();
15973
15973
  var itemHeight=(border.BottomEx-border.TopEx)/this.HorizontalInfo.length;
15974
15974
  var aryMultiText=[];
15975
+ var aryLeftMulitText=[];
15975
15976
  var rtPreRight, rtRight, rtLeft, rtPreLeft;
15976
15977
  var textBaseline=0; //0=上 1=中 2=下
15977
15978
  for(var i=this.HorizontalInfo.length-1; i>=0; --i) //从上往下画分割线
@@ -16078,7 +16079,12 @@ function AverageWidthFrame()
16078
16079
 
16079
16080
  if (Array.isArray(item.Message[0]))
16080
16081
  {
16081
- if (this.MultiTextFormat==3)
16082
+ if (this.MultiTextFormat==1) //显示1行 格式如:价格/百分比
16083
+ {
16084
+ var textData=this.CreateMulitCoordinateItem(item.Message[0], left-2, yText, this.Canvas.textBaseline, item);
16085
+ aryLeftMulitText.push(textData);
16086
+ }
16087
+ else if (this.MultiTextFormat==3)
16082
16088
  {
16083
16089
  var obj={ Data:item.Message[0], X:left, Y:yText, TextBaseLine:textBaseline, IsLeft:true, Item:item, TextPadding:this.YTextPadding[0] };
16084
16090
  this.DrawMultiLineText(obj);
@@ -16164,25 +16170,9 @@ function AverageWidthFrame()
16164
16170
  this.Canvas.textAlign="left";
16165
16171
  if (Array.isArray(item.Message[1]))
16166
16172
  {
16167
- if (this.MultiTextFormat==1) //显示1行 格式:价格/百分比
16173
+ if (this.MultiTextFormat==1) //显示1行 格式如:价格/百分比
16168
16174
  {
16169
- if (item.ExtendData)
16170
- {
16171
- if (item.ExtendData.Font) this.Canvas.font=item.ExtendData.Font;
16172
- }
16173
-
16174
- var textData=
16175
- {
16176
- Text:
16177
- [
16178
- {Text:item.Message[1][0], Width:this.Canvas.measureText(item.Message[1][0]).width },
16179
- {Text:item.Message[1][1], Width:this.Canvas.measureText(item.Message[1][1]).width }
16180
- ],
16181
- X:xText+2,
16182
- Y:yText,
16183
- TextBaseline:this.Canvas.textBaseline,
16184
- Item:item
16185
- }
16175
+ var textData=this.CreateMulitCoordinateItem(item.Message[1], xText+2, yText, this.Canvas.textBaseline, item);
16186
16176
  aryMultiText.push(textData);
16187
16177
  }
16188
16178
  else if (this.MultiTextFormat==2) //显示2行
@@ -16239,7 +16229,9 @@ function AverageWidthFrame()
16239
16229
  yPrev=y;
16240
16230
  }
16241
16231
 
16242
- if (IFrameSplitOperator.IsNonEmptyArray(aryMultiText) && this.MultiTextFormat==1) this.DrawHorizontalMuText(aryMultiText);
16232
+ if (IFrameSplitOperator.IsNonEmptyArray(aryLeftMulitText) && this.MultiTextFormat==1) this.DrawMultiCoordinateLeftText(aryLeftMulitText);
16233
+ if (IFrameSplitOperator.IsNonEmptyArray(aryMultiText) && this.MultiTextFormat==1) this.DrawMultiCoordinateRightText(aryMultiText);
16234
+
16243
16235
 
16244
16236
  if (isDrawRight && this.IsDrawRightBorder && this.YRightTextInfo)
16245
16237
  {
@@ -16268,6 +16260,41 @@ function AverageWidthFrame()
16268
16260
  }
16269
16261
  }
16270
16262
 
16263
+ this.CreateMulitCoordinateItem=function(aryData, x, y, textBaseline, data)
16264
+ {
16265
+ var coordinateItem=
16266
+ {
16267
+ AryText:[], X:x,Y:y, TextBaseline:textBaseline, Item:data
16268
+ };
16269
+
16270
+ for(var i=0;i<aryData.length;++i)
16271
+ {
16272
+ var item=aryData[i];
16273
+ if (item.Font) this.Canvas.font=item.Font;
16274
+ var textWidth=0;
16275
+ if (item.Text) textWidth=this.Canvas.measureText(item.Text).width;
16276
+
16277
+ coordinateItem.AryText.push({ Width:textWidth, Item:item });
16278
+ }
16279
+
16280
+ return coordinateItem;
16281
+ }
16282
+
16283
+ this.GetMulitCoordinateItemTextWidth=function(aryData)
16284
+ {
16285
+ var total=0;
16286
+ for(var i=0;i<aryData.length;++i)
16287
+ {
16288
+ var item=aryData[i];
16289
+ if (item.Font) this.Canvas.font=item.Font;
16290
+ var width=this.Canvas.measureText(item.Text).width;
16291
+
16292
+ total+=width;
16293
+ }
16294
+
16295
+ return total;
16296
+ }
16297
+
16271
16298
  //多行文字刻度输出 obj={ Data:, X:, Y:, TextBaseLine:, IsLeft:, Item:刻度数据 }
16272
16299
  this.DrawMultiLineText=function(obj)
16273
16300
  {
@@ -16358,53 +16385,86 @@ function AverageWidthFrame()
16358
16385
  return rtRight;
16359
16386
  }
16360
16387
 
16361
- this.DrawHorizontalMuText=function(aryText)
16388
+ //绘制多重坐标刻度文字 左侧
16389
+ this.DrawMultiCoordinateLeftText=function(aryText)
16362
16390
  {
16363
- var maxWidth=[null,null];
16364
- for(var i=0;i<aryText.length;++i)
16391
+ var aryMaxWidth=[];
16392
+ for(var i=0, j=0;i<aryText.length;++i)
16365
16393
  {
16366
16394
  var item=aryText[i];
16367
- var width=item.Text[0].Width;
16368
- if (!IFrameSplitOperator.IsNumber(maxWidth[0])) maxWidth[0]=width;
16369
- else if (maxWidth[0]<width) maxWidth[0]=width;
16370
-
16371
- width=item.Text[1].Width;
16372
- if (!IFrameSplitOperator.IsNumber(maxWidth[1])) maxWidth[1]=width;
16373
- else if (maxWidth[1]<width) maxWidth[1]=width;
16395
+ for(var j=0;j<item.AryText.length;++j)
16396
+ {
16397
+ var textItem=item.AryText[j];
16398
+ if (!IFrameSplitOperator.IsNumber(aryMaxWidth[j]) || aryMaxWidth[j]<textItem.Width) aryMaxWidth[j]=textItem.Width;
16399
+ }
16400
+
16374
16401
  }
16375
16402
 
16403
+ this.Canvas.textAlign="right";
16376
16404
  for(var i=0;i<aryText.length;++i)
16377
16405
  {
16378
16406
  var item=aryText[i];
16379
16407
  var message=item.Item;
16380
-
16408
+ var x=item.X;
16381
16409
  this.Canvas.textBaseline=item.TextBaseline;
16382
- if (message.ExtendData && message.ExtendData.Font) this.Canvas.font=message.ExtendData.Font;
16383
- else if (message.Font) this.Canvas.font=message.Font;
16384
-
16385
- if (message.ExtendData && message.ExtendData.PriceColor) this.Canvas.fillStyle=message.ExtendData.PriceColor;
16386
- else this.Canvas.fillStyle=message.TextColor;
16410
+ for(var j=0;j<item.AryText.length;++j)
16411
+ {
16412
+ var textItem=item.AryText[j];
16413
+ var subText=textItem.Item;
16414
+ if (subText && subText.Text)
16415
+ {
16416
+ if (subText.Font) this.Canvas.font=subText.Font; //字体
16417
+ else if (message.Font) this.Canvas.font=message.Font;
16418
+
16419
+ if (subText.Color) this.Canvas.fillStyle=subText.Color; //颜色
16420
+ else this.Canvas.fillStyle=message.TextColor;
16387
16421
 
16388
- this.Canvas.textAlign="right";
16389
- var x=item.X+maxWidth[1];
16390
- this.Canvas.fillText(item.Text[1].Text,x,item.Y);
16422
+ this.Canvas.fillText(subText.Text,x,item.Y);
16423
+ }
16391
16424
 
16392
- if (message.ExtendData && message.ExtendData.SplitColor) this.Canvas.fillStyle=message.ExtendData.SplitColor;
16393
- else this.Canvas.fillStyle=message.TextColor;
16425
+ x-=aryMaxWidth[j];
16426
+ }
16427
+ }
16428
+ }
16394
16429
 
16395
- this.Canvas.textAlign="left";
16396
- var splitWidth=this.Canvas.measureText('/').width;
16397
- this.Canvas.fillText('/',x,item.Y);
16430
+ //绘制多重坐标刻度文字 右侧
16431
+ this.DrawMultiCoordinateRightText=function(aryText)
16432
+ {
16433
+ var aryMaxWidth=[];
16434
+ for(var i=0, j=0;i<aryText.length;++i)
16435
+ {
16436
+ var item=aryText[i];
16437
+ for(var j=0;j<item.AryText.length;++j)
16438
+ {
16439
+ var textItem=item.AryText[j];
16440
+ if (!IFrameSplitOperator.IsNumber(aryMaxWidth[j]) || aryMaxWidth[j]<textItem.Width) aryMaxWidth[j]=textItem.Width;
16441
+ }
16398
16442
 
16399
- if (message.ExtendData && message.ExtendData.PercentageColor) this.Canvas.fillStyle=message.ExtendData.PercentageColor;
16400
- else this.Canvas.fillStyle=message.TextColor;
16443
+ }
16401
16444
 
16402
- this.Canvas.textAlign="right";
16403
- var x=item.X+maxWidth[1]+maxWidth[0]+splitWidth;
16404
- this.Canvas.fillText(item.Text[0].Text,x,item.Y);
16445
+ this.Canvas.textAlign="right";
16446
+ for(var i=0;i<aryText.length;++i)
16447
+ {
16448
+ var item=aryText[i];
16449
+ var message=item.Item;
16450
+ var x=item.X;
16451
+ this.Canvas.textBaseline=item.TextBaseline;
16452
+ for(var j=0;j<item.AryText.length;++j)
16453
+ {
16454
+ var textItem=item.AryText[j];
16455
+ var subText=textItem.Item;
16456
+ if (subText && subText.Text)
16457
+ {
16458
+ if (subText.Font) this.Canvas.font=subText.Font; //字体
16459
+ else if (message.Font) this.Canvas.font=message.Font;
16460
+
16461
+ if (subText.Color) this.Canvas.fillStyle=subText.Color; //颜色
16462
+ else this.Canvas.fillStyle=message.TextColor;
16405
16463
 
16406
- var textWidth=maxWidth[1]+maxWidth[0]+splitWidth*4;
16407
- if (this.RightTextMaxWidth<textWidth) this.RightTextMaxWidth=textWidth;
16464
+ x+=aryMaxWidth[j];
16465
+ this.Canvas.fillText(subText.Text,x,item.Y);
16466
+ }
16467
+ }
16408
16468
  }
16409
16469
  }
16410
16470
 
@@ -17982,7 +18042,8 @@ function AverageWidthFrame()
17982
18042
  {
17983
18043
  if (Array.isArray(item.Message[0]))
17984
18044
  {
17985
- textWidth=this.GetMulitTextMaxWidth(item.Message[0]);
18045
+ if (this.MultiTextFormat==1) textWidth=this.GetMulitCoordinateItemTextWidth(item.Message[0]);
18046
+ else textWidth=this.GetMulitTextMaxWidth(item.Message[0]);
17986
18047
  }
17987
18048
  else
17988
18049
  {
@@ -18001,17 +18062,9 @@ function AverageWidthFrame()
18001
18062
 
18002
18063
  if (Array.isArray(item.Message[1]))
18003
18064
  {
18004
- if (this.MultiTextFormat==1 && IFrameSplitOperator.IsNonEmptyArray(item.Message[1])) //显示1行 格式:价格/百分比
18065
+ if (this.MultiTextFormat==1) //显示1行 格式:价格/百分比
18005
18066
  {
18006
- if (item.ExtendData && item.ExtendData.Font) this.Canvas.font=item.ExtendData.Font;
18007
-
18008
- var width1=this.Canvas.measureText(item.Message[1][0]).width;
18009
- var width2=this.Canvas.measureText(item.Message[1][1]).width;
18010
- var width3=this.Canvas.measureText('/').width;
18011
- textWidth=width1+width3;
18012
- if (rightExtendWidth<width2) rightExtendWidth=width2;
18013
-
18014
- //JSConsole.Chart.Log(`[ChartData::GetScaleTextWidth] ${item.Message[1][1]}/${item.Message[1][0]} ${textWidth}, ${rightExtendWidth}`);
18067
+ textWidth=this.GetMulitCoordinateItemTextWidth(item.Message[1]);
18015
18068
  }
18016
18069
  else if (this.MultiTextFormat==2) //显示2行
18017
18070
  {
@@ -56765,7 +56818,7 @@ function FrameSplitMinutePriceY()
56765
56818
  var distanceValue=Math.max(Math.abs(this.YClose-max),Math.abs(this.YClose-min));
56766
56819
  max=this.YClose+distanceValue;
56767
56820
  min=this.YClose-distanceValue;
56768
- if (min<0) min=range.Min;
56821
+ //if (min<0) min=range.Min;
56769
56822
  }
56770
56823
  }
56771
56824
 
@@ -56806,47 +56859,6 @@ function FrameSplitMinutePriceY()
56806
56859
 
56807
56860
  aryCoordinate.sort((left,right)=>{ return left.Value-right.Value; })
56808
56861
 
56809
- /*
56810
- for(var i=0;i<showCount;++i)
56811
- {
56812
- var price=min+(distance*i);
56813
- var coordinate=new CoordinateInfo();
56814
- this.Frame.HorizontalInfo[i]=coordinate
56815
- coordinate.Value=price;
56816
- var strPrice=price.toFixed(defaultfloatPrecision); //价格刻度字符串
56817
- if (this.IsShowLeftText) coordinate.Message[0]=strPrice
56818
-
56819
- if (IFrameSplitOperator.IsNumber(this.YClose) && this.YClose!=0)
56820
- {
56821
- var per=(price/this.YClose-1)*100;
56822
- if (per>0) coordinate.TextColor=g_JSChartResource.UpTextColor;
56823
- else if (per<0) coordinate.TextColor=g_JSChartResource.DownTextColor;
56824
- var strPer=`${IFrameSplitOperator.FormatValueString(per,2)}%`;
56825
- if (this.IsShowRightText)
56826
- {
56827
- if (this.RightTextFormat==1)
56828
- {
56829
- coordinate.Message[1]=strPrice;
56830
- }
56831
- else if (this.RightTextFormat==2) //价格/百分比
56832
- {
56833
- coordinate.Message[1]=[strPer,strPrice];
56834
- }
56835
- else
56836
- {
56837
- coordinate.Message[1]=strPer; //百分比
56838
- }
56839
- }
56840
-
56841
- if (Math.abs(price-this.YClose) <0.00000000001) //小数有精度问题 使用差值
56842
- {
56843
- coordinate.LineType=2;//中间的线画虚线
56844
- coordinate.TextColor=g_JSChartResource.UnchagneTextColor;
56845
- if (g_JSChartResource.FrameDotSplitPen) coordinate.LineColor=g_JSChartResource.FrameDotSplitPen;
56846
- }
56847
- }
56848
- }*/
56849
-
56850
56862
  this.Frame.HorizontalInfo=aryCoordinate;
56851
56863
  this.Frame.HorizontalMax=max;
56852
56864
  this.Frame.HorizontalMin=min;
@@ -56873,7 +56885,7 @@ function FrameSplitMinutePriceY()
56873
56885
  }
56874
56886
  else if (this.RightTextFormat==2) //价格/百分比
56875
56887
  {
56876
- coordinate.Message[1]=[strPer,strPrice];
56888
+ coordinate.Message[1]=[ {Text:strPrice}, {Text:"/"}, { Text:strPer} ];
56877
56889
  }
56878
56890
  else
56879
56891
  {
@@ -127428,7 +127440,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
127428
127440
  {
127429
127441
  outVarItem.Data=this.FittingMinuteArray(item.data,date,time,hqChart);
127430
127442
  if (item.color) outVarItem.Color=item.color;
127431
- if (item.linewidth>=1) outVarItem.LineWidth=item.linewidth;
127443
+ if (item.linewidth) outVarItem.LineWidth=item.linewidth;
127432
127444
  if (item.isshow==false) outVarItem.IsShow = false;
127433
127445
  if (item.isexdata==true) outVarItem.IsExData = true;
127434
127446
  if (item.BreakPoint) outVarItem.BreakPoint=item.BreakPoint;
@@ -143392,7 +143404,7 @@ function ScrollBarBGChart()
143392
143404
 
143393
143405
 
143394
143406
 
143395
- var HQCHART_VERSION="1.1.14405";
143407
+ var HQCHART_VERSION="1.1.14410";
143396
143408
 
143397
143409
  function PrintHQChartVersion()
143398
143410
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.14405";
8
+ var HQCHART_VERSION="1.1.14410";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -15681,7 +15681,7 @@ function AverageWidthFrame()
15681
15681
  this.IsShowYLine=true;
15682
15682
  this.YInsideOffset=0;
15683
15683
  this.YTextBaseline=0; //0=居中 1=上部 (目前就支持内部刻度)
15684
- this.MultiTextFormat=0; //多行刻度信息显示模式 0=显示第1行 1=价格/百分比 2=显示2行
15684
+ this.MultiTextFormat=0; //多行刻度信息显示模式 0=显示第1行 1=单行多个文本 2=显示2行
15685
15685
  this.RightTextMaxWidth=0;
15686
15686
 
15687
15687
  this.ShortYLineLength=5;
@@ -16016,6 +16016,7 @@ function AverageWidthFrame()
16016
16016
  var pixelRatio=GetDevicePixelRatio();
16017
16017
  var itemHeight=(border.BottomEx-border.TopEx)/this.HorizontalInfo.length;
16018
16018
  var aryMultiText=[];
16019
+ var aryLeftMulitText=[];
16019
16020
  var rtPreRight, rtRight, rtLeft, rtPreLeft;
16020
16021
  var textBaseline=0; //0=上 1=中 2=下
16021
16022
  for(var i=this.HorizontalInfo.length-1; i>=0; --i) //从上往下画分割线
@@ -16122,7 +16123,12 @@ function AverageWidthFrame()
16122
16123
 
16123
16124
  if (Array.isArray(item.Message[0]))
16124
16125
  {
16125
- if (this.MultiTextFormat==3)
16126
+ if (this.MultiTextFormat==1) //显示1行 格式如:价格/百分比
16127
+ {
16128
+ var textData=this.CreateMulitCoordinateItem(item.Message[0], left-2, yText, this.Canvas.textBaseline, item);
16129
+ aryLeftMulitText.push(textData);
16130
+ }
16131
+ else if (this.MultiTextFormat==3)
16126
16132
  {
16127
16133
  var obj={ Data:item.Message[0], X:left, Y:yText, TextBaseLine:textBaseline, IsLeft:true, Item:item, TextPadding:this.YTextPadding[0] };
16128
16134
  this.DrawMultiLineText(obj);
@@ -16208,25 +16214,9 @@ function AverageWidthFrame()
16208
16214
  this.Canvas.textAlign="left";
16209
16215
  if (Array.isArray(item.Message[1]))
16210
16216
  {
16211
- if (this.MultiTextFormat==1) //显示1行 格式:价格/百分比
16217
+ if (this.MultiTextFormat==1) //显示1行 格式如:价格/百分比
16212
16218
  {
16213
- if (item.ExtendData)
16214
- {
16215
- if (item.ExtendData.Font) this.Canvas.font=item.ExtendData.Font;
16216
- }
16217
-
16218
- var textData=
16219
- {
16220
- Text:
16221
- [
16222
- {Text:item.Message[1][0], Width:this.Canvas.measureText(item.Message[1][0]).width },
16223
- {Text:item.Message[1][1], Width:this.Canvas.measureText(item.Message[1][1]).width }
16224
- ],
16225
- X:xText+2,
16226
- Y:yText,
16227
- TextBaseline:this.Canvas.textBaseline,
16228
- Item:item
16229
- }
16219
+ var textData=this.CreateMulitCoordinateItem(item.Message[1], xText+2, yText, this.Canvas.textBaseline, item);
16230
16220
  aryMultiText.push(textData);
16231
16221
  }
16232
16222
  else if (this.MultiTextFormat==2) //显示2行
@@ -16283,7 +16273,9 @@ function AverageWidthFrame()
16283
16273
  yPrev=y;
16284
16274
  }
16285
16275
 
16286
- if (IFrameSplitOperator.IsNonEmptyArray(aryMultiText) && this.MultiTextFormat==1) this.DrawHorizontalMuText(aryMultiText);
16276
+ if (IFrameSplitOperator.IsNonEmptyArray(aryLeftMulitText) && this.MultiTextFormat==1) this.DrawMultiCoordinateLeftText(aryLeftMulitText);
16277
+ if (IFrameSplitOperator.IsNonEmptyArray(aryMultiText) && this.MultiTextFormat==1) this.DrawMultiCoordinateRightText(aryMultiText);
16278
+
16287
16279
 
16288
16280
  if (isDrawRight && this.IsDrawRightBorder && this.YRightTextInfo)
16289
16281
  {
@@ -16312,6 +16304,41 @@ function AverageWidthFrame()
16312
16304
  }
16313
16305
  }
16314
16306
 
16307
+ this.CreateMulitCoordinateItem=function(aryData, x, y, textBaseline, data)
16308
+ {
16309
+ var coordinateItem=
16310
+ {
16311
+ AryText:[], X:x,Y:y, TextBaseline:textBaseline, Item:data
16312
+ };
16313
+
16314
+ for(var i=0;i<aryData.length;++i)
16315
+ {
16316
+ var item=aryData[i];
16317
+ if (item.Font) this.Canvas.font=item.Font;
16318
+ var textWidth=0;
16319
+ if (item.Text) textWidth=this.Canvas.measureText(item.Text).width;
16320
+
16321
+ coordinateItem.AryText.push({ Width:textWidth, Item:item });
16322
+ }
16323
+
16324
+ return coordinateItem;
16325
+ }
16326
+
16327
+ this.GetMulitCoordinateItemTextWidth=function(aryData)
16328
+ {
16329
+ var total=0;
16330
+ for(var i=0;i<aryData.length;++i)
16331
+ {
16332
+ var item=aryData[i];
16333
+ if (item.Font) this.Canvas.font=item.Font;
16334
+ var width=this.Canvas.measureText(item.Text).width;
16335
+
16336
+ total+=width;
16337
+ }
16338
+
16339
+ return total;
16340
+ }
16341
+
16315
16342
  //多行文字刻度输出 obj={ Data:, X:, Y:, TextBaseLine:, IsLeft:, Item:刻度数据 }
16316
16343
  this.DrawMultiLineText=function(obj)
16317
16344
  {
@@ -16402,53 +16429,86 @@ function AverageWidthFrame()
16402
16429
  return rtRight;
16403
16430
  }
16404
16431
 
16405
- this.DrawHorizontalMuText=function(aryText)
16432
+ //绘制多重坐标刻度文字 左侧
16433
+ this.DrawMultiCoordinateLeftText=function(aryText)
16406
16434
  {
16407
- var maxWidth=[null,null];
16408
- for(var i=0;i<aryText.length;++i)
16435
+ var aryMaxWidth=[];
16436
+ for(var i=0, j=0;i<aryText.length;++i)
16409
16437
  {
16410
16438
  var item=aryText[i];
16411
- var width=item.Text[0].Width;
16412
- if (!IFrameSplitOperator.IsNumber(maxWidth[0])) maxWidth[0]=width;
16413
- else if (maxWidth[0]<width) maxWidth[0]=width;
16414
-
16415
- width=item.Text[1].Width;
16416
- if (!IFrameSplitOperator.IsNumber(maxWidth[1])) maxWidth[1]=width;
16417
- else if (maxWidth[1]<width) maxWidth[1]=width;
16439
+ for(var j=0;j<item.AryText.length;++j)
16440
+ {
16441
+ var textItem=item.AryText[j];
16442
+ if (!IFrameSplitOperator.IsNumber(aryMaxWidth[j]) || aryMaxWidth[j]<textItem.Width) aryMaxWidth[j]=textItem.Width;
16443
+ }
16444
+
16418
16445
  }
16419
16446
 
16447
+ this.Canvas.textAlign="right";
16420
16448
  for(var i=0;i<aryText.length;++i)
16421
16449
  {
16422
16450
  var item=aryText[i];
16423
16451
  var message=item.Item;
16424
-
16452
+ var x=item.X;
16425
16453
  this.Canvas.textBaseline=item.TextBaseline;
16426
- if (message.ExtendData && message.ExtendData.Font) this.Canvas.font=message.ExtendData.Font;
16427
- else if (message.Font) this.Canvas.font=message.Font;
16428
-
16429
- if (message.ExtendData && message.ExtendData.PriceColor) this.Canvas.fillStyle=message.ExtendData.PriceColor;
16430
- else this.Canvas.fillStyle=message.TextColor;
16454
+ for(var j=0;j<item.AryText.length;++j)
16455
+ {
16456
+ var textItem=item.AryText[j];
16457
+ var subText=textItem.Item;
16458
+ if (subText && subText.Text)
16459
+ {
16460
+ if (subText.Font) this.Canvas.font=subText.Font; //字体
16461
+ else if (message.Font) this.Canvas.font=message.Font;
16462
+
16463
+ if (subText.Color) this.Canvas.fillStyle=subText.Color; //颜色
16464
+ else this.Canvas.fillStyle=message.TextColor;
16431
16465
 
16432
- this.Canvas.textAlign="right";
16433
- var x=item.X+maxWidth[1];
16434
- this.Canvas.fillText(item.Text[1].Text,x,item.Y);
16466
+ this.Canvas.fillText(subText.Text,x,item.Y);
16467
+ }
16435
16468
 
16436
- if (message.ExtendData && message.ExtendData.SplitColor) this.Canvas.fillStyle=message.ExtendData.SplitColor;
16437
- else this.Canvas.fillStyle=message.TextColor;
16469
+ x-=aryMaxWidth[j];
16470
+ }
16471
+ }
16472
+ }
16438
16473
 
16439
- this.Canvas.textAlign="left";
16440
- var splitWidth=this.Canvas.measureText('/').width;
16441
- this.Canvas.fillText('/',x,item.Y);
16474
+ //绘制多重坐标刻度文字 右侧
16475
+ this.DrawMultiCoordinateRightText=function(aryText)
16476
+ {
16477
+ var aryMaxWidth=[];
16478
+ for(var i=0, j=0;i<aryText.length;++i)
16479
+ {
16480
+ var item=aryText[i];
16481
+ for(var j=0;j<item.AryText.length;++j)
16482
+ {
16483
+ var textItem=item.AryText[j];
16484
+ if (!IFrameSplitOperator.IsNumber(aryMaxWidth[j]) || aryMaxWidth[j]<textItem.Width) aryMaxWidth[j]=textItem.Width;
16485
+ }
16442
16486
 
16443
- if (message.ExtendData && message.ExtendData.PercentageColor) this.Canvas.fillStyle=message.ExtendData.PercentageColor;
16444
- else this.Canvas.fillStyle=message.TextColor;
16487
+ }
16445
16488
 
16446
- this.Canvas.textAlign="right";
16447
- var x=item.X+maxWidth[1]+maxWidth[0]+splitWidth;
16448
- this.Canvas.fillText(item.Text[0].Text,x,item.Y);
16489
+ this.Canvas.textAlign="right";
16490
+ for(var i=0;i<aryText.length;++i)
16491
+ {
16492
+ var item=aryText[i];
16493
+ var message=item.Item;
16494
+ var x=item.X;
16495
+ this.Canvas.textBaseline=item.TextBaseline;
16496
+ for(var j=0;j<item.AryText.length;++j)
16497
+ {
16498
+ var textItem=item.AryText[j];
16499
+ var subText=textItem.Item;
16500
+ if (subText && subText.Text)
16501
+ {
16502
+ if (subText.Font) this.Canvas.font=subText.Font; //字体
16503
+ else if (message.Font) this.Canvas.font=message.Font;
16504
+
16505
+ if (subText.Color) this.Canvas.fillStyle=subText.Color; //颜色
16506
+ else this.Canvas.fillStyle=message.TextColor;
16449
16507
 
16450
- var textWidth=maxWidth[1]+maxWidth[0]+splitWidth*4;
16451
- if (this.RightTextMaxWidth<textWidth) this.RightTextMaxWidth=textWidth;
16508
+ x+=aryMaxWidth[j];
16509
+ this.Canvas.fillText(subText.Text,x,item.Y);
16510
+ }
16511
+ }
16452
16512
  }
16453
16513
  }
16454
16514
 
@@ -18026,7 +18086,8 @@ function AverageWidthFrame()
18026
18086
  {
18027
18087
  if (Array.isArray(item.Message[0]))
18028
18088
  {
18029
- textWidth=this.GetMulitTextMaxWidth(item.Message[0]);
18089
+ if (this.MultiTextFormat==1) textWidth=this.GetMulitCoordinateItemTextWidth(item.Message[0]);
18090
+ else textWidth=this.GetMulitTextMaxWidth(item.Message[0]);
18030
18091
  }
18031
18092
  else
18032
18093
  {
@@ -18045,17 +18106,9 @@ function AverageWidthFrame()
18045
18106
 
18046
18107
  if (Array.isArray(item.Message[1]))
18047
18108
  {
18048
- if (this.MultiTextFormat==1 && IFrameSplitOperator.IsNonEmptyArray(item.Message[1])) //显示1行 格式:价格/百分比
18109
+ if (this.MultiTextFormat==1) //显示1行 格式:价格/百分比
18049
18110
  {
18050
- if (item.ExtendData && item.ExtendData.Font) this.Canvas.font=item.ExtendData.Font;
18051
-
18052
- var width1=this.Canvas.measureText(item.Message[1][0]).width;
18053
- var width2=this.Canvas.measureText(item.Message[1][1]).width;
18054
- var width3=this.Canvas.measureText('/').width;
18055
- textWidth=width1+width3;
18056
- if (rightExtendWidth<width2) rightExtendWidth=width2;
18057
-
18058
- //JSConsole.Chart.Log(`[ChartData::GetScaleTextWidth] ${item.Message[1][1]}/${item.Message[1][0]} ${textWidth}, ${rightExtendWidth}`);
18111
+ textWidth=this.GetMulitCoordinateItemTextWidth(item.Message[1]);
18059
18112
  }
18060
18113
  else if (this.MultiTextFormat==2) //显示2行
18061
18114
  {
@@ -56809,7 +56862,7 @@ function FrameSplitMinutePriceY()
56809
56862
  var distanceValue=Math.max(Math.abs(this.YClose-max),Math.abs(this.YClose-min));
56810
56863
  max=this.YClose+distanceValue;
56811
56864
  min=this.YClose-distanceValue;
56812
- if (min<0) min=range.Min;
56865
+ //if (min<0) min=range.Min;
56813
56866
  }
56814
56867
  }
56815
56868
 
@@ -56850,47 +56903,6 @@ function FrameSplitMinutePriceY()
56850
56903
 
56851
56904
  aryCoordinate.sort((left,right)=>{ return left.Value-right.Value; })
56852
56905
 
56853
- /*
56854
- for(var i=0;i<showCount;++i)
56855
- {
56856
- var price=min+(distance*i);
56857
- var coordinate=new CoordinateInfo();
56858
- this.Frame.HorizontalInfo[i]=coordinate
56859
- coordinate.Value=price;
56860
- var strPrice=price.toFixed(defaultfloatPrecision); //价格刻度字符串
56861
- if (this.IsShowLeftText) coordinate.Message[0]=strPrice
56862
-
56863
- if (IFrameSplitOperator.IsNumber(this.YClose) && this.YClose!=0)
56864
- {
56865
- var per=(price/this.YClose-1)*100;
56866
- if (per>0) coordinate.TextColor=g_JSChartResource.UpTextColor;
56867
- else if (per<0) coordinate.TextColor=g_JSChartResource.DownTextColor;
56868
- var strPer=`${IFrameSplitOperator.FormatValueString(per,2)}%`;
56869
- if (this.IsShowRightText)
56870
- {
56871
- if (this.RightTextFormat==1)
56872
- {
56873
- coordinate.Message[1]=strPrice;
56874
- }
56875
- else if (this.RightTextFormat==2) //价格/百分比
56876
- {
56877
- coordinate.Message[1]=[strPer,strPrice];
56878
- }
56879
- else
56880
- {
56881
- coordinate.Message[1]=strPer; //百分比
56882
- }
56883
- }
56884
-
56885
- if (Math.abs(price-this.YClose) <0.00000000001) //小数有精度问题 使用差值
56886
- {
56887
- coordinate.LineType=2;//中间的线画虚线
56888
- coordinate.TextColor=g_JSChartResource.UnchagneTextColor;
56889
- if (g_JSChartResource.FrameDotSplitPen) coordinate.LineColor=g_JSChartResource.FrameDotSplitPen;
56890
- }
56891
- }
56892
- }*/
56893
-
56894
56906
  this.Frame.HorizontalInfo=aryCoordinate;
56895
56907
  this.Frame.HorizontalMax=max;
56896
56908
  this.Frame.HorizontalMin=min;
@@ -56917,7 +56929,7 @@ function FrameSplitMinutePriceY()
56917
56929
  }
56918
56930
  else if (this.RightTextFormat==2) //价格/百分比
56919
56931
  {
56920
- coordinate.Message[1]=[strPer,strPrice];
56932
+ coordinate.Message[1]=[ {Text:strPrice}, {Text:"/"}, { Text:strPer} ];
56921
56933
  }
56922
56934
  else
56923
56935
  {
@@ -127472,7 +127484,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
127472
127484
  {
127473
127485
  outVarItem.Data=this.FittingMinuteArray(item.data,date,time,hqChart);
127474
127486
  if (item.color) outVarItem.Color=item.color;
127475
- if (item.linewidth>=1) outVarItem.LineWidth=item.linewidth;
127487
+ if (item.linewidth) outVarItem.LineWidth=item.linewidth;
127476
127488
  if (item.isshow==false) outVarItem.IsShow = false;
127477
127489
  if (item.isexdata==true) outVarItem.IsExData = true;
127478
127490
  if (item.BreakPoint) outVarItem.BreakPoint=item.BreakPoint;
@@ -153187,7 +153199,7 @@ function HQChartScriptWorker()
153187
153199
 
153188
153200
 
153189
153201
 
153190
- var HQCHART_VERSION="1.1.14405";
153202
+ var HQCHART_VERSION="1.1.14410";
153191
153203
 
153192
153204
  function PrintHQChartVersion()
153193
153205
  {