hqchart 1.1.12767 → 1.1.12771

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.
@@ -1790,7 +1790,9 @@ var bDraw=false;if(drawPictureActive.Select.Guid&&drawPictureActive.Select.Chart
1790
1790
  this.SelectChartDrawPicture.DragInfo={Click:{X:e.clientX,Y:e.clientY}};}else{this.CurrentChartDrawPicture=null;this.SelectChartDrawPicture=null;}var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_DRAWPICTURE);//选中画图工具事件
1791
1791
  if(event&&event.Callback){var sendData={DrawPicture:drawPictrueData.ChartDrawPicture};event.Callback(event,sendData,this);}else{this.OnSelectChartPicture(drawPictrueData.ChartDrawPicture);//选中画图工具事件
1792
1792
  }}else{if(this.ClickChartTimer!=null){clearTimeout(this.ClickChartTimer);this.ClickChartTimer=null;}var self=this;var ptClick={X:this.ClickDownPoint.X,Y:this.ClickDownPoint.Y};this.ClickChartTimer=setTimeout(function(){self.TryClickPaintEvent(JSCHART_EVENT_ID.ON_CLICK_CHART_PAINT,ptClick,e);},250);var bSelectedChartChanged=false;if(this.SelectedChart.EnableSelected){var selectChart=this.PtInChart(x,y);if(selectChart){if(this.SelectedChart.Selected.Identify!=selectChart.Identify){this.SelectedChart.Selected.Identify=selectChart.Identify;this.SelectedChart.Selected.Chart=selectChart.Chart;bSelectedChartChanged=true;}if(this.EnableIndexChartDrag){this.IndexChartDrag={SelectedChart:selectChart,LastMove:{X:x,Y:y},Click:{X:x,Y:y}};this.IndexChartDrag.Info=this.GetSelectedChartInfo(selectChart);if(this.IndexChartDrag.Info)this.IndexChartDrag.Info.FrameID=this.Frame.PtInFrame(x,y);}}else{if(this.SelectedChart.Selected.Identify){this.SelectedChart.Selected.Identify=null;this.SelectedChart.Selected.Chart=null;bSelectedChartChanged=true;}}}else{if(this.SelectedChart.Selected.Identify){this.SelectedChart.Selected.Identify=null;bSelectedChartChanged=true;}}if(drawPictureActive.Select.Guid!=null&&this.SelectChartDrawPicture==null||bSelectedChartChanged){var drawType=0;if(drawPictureActive.Select.Guid&&drawPictureActive.Select.Chart&&drawPictureActive.Select.Chart.IsDrawMain)drawType=1;if(bSelectedChartChanged){var chart=selectedChart.Chart;if(chart&&chart.SetSelectedStatus){chart.SetSelectedStatus(0);drawType=1;}chart=this.SelectedChart.Selected.Chart;if(chart&&chart.SetSelectedStatus){chart.SetSelectedStatus(1);drawType=1;}}if(drawType==1)this.Draw();else this.DrawDynamicInfo();}else if(bDrawDynamicInfo){this.DrawDynamicInfo();}}}document.onmousemove=function(e){_this7.DocOnMouseMove(e);};document.onmouseup=function(e){_this7.DocOnMouseUp(e);};};this.DocOnMouseMove=function(e){//加载数据中,禁用鼠标事件
1793
- if(this.ChartSplashPaint&&this.IsEnableSplash==true)return;var drag=this.MouseDrag;if(!drag)return;var moveSetp=Math.abs(drag.LastMove.X-e.clientX);var moveSetpY=Math.abs(drag.LastMove.Y-e.clientY);var isDragSelectRect=this.RectSelectDrag&&this.RectSelectDrag.Index>=0;var isDragSubSelectRect=this.RectSelectDrag&&this.RectSelectDrag.Type==4;if(drag.CurrentMove){drag.CurrentMove.X=e.clientX;drag.CurrentMove.Y=e.clientY;}if(this.BorderDrag&&this.BorderDrag.Index>=0){if(Math.abs(drag.LastMove.Y-e.clientY)<5)return;var yMove=e.clientY-drag.LastMove.Y;this.OnMoveFromeBorder(this.BorderDrag.Index,yMove);drag.LastMove.X=e.clientX;drag.LastMove.Y=e.clientY;}else if(this.YDrag&&this.YDrag.Index>=0){if(moveSetpY<5)return;var yMove=e.clientY-drag.LastMove.Y;//this.UIElement.style.cursor="n-resize";
1793
+ if(this.ChartSplashPaint&&this.IsEnableSplash==true)return;var drag=this.MouseDrag;if(!drag)return;var moveSetp=Math.abs(drag.LastMove.X-e.clientX);var moveSetpY=Math.abs(drag.LastMove.Y-e.clientY);var isDragSelectRect=this.RectSelectDrag&&this.RectSelectDrag.Index>=0;var isDragSubSelectRect=this.RectSelectDrag&&this.RectSelectDrag.Type==4;if(drag.CurrentMove){drag.CurrentMove.X=e.clientX;drag.CurrentMove.Y=e.clientY;}if(this.BorderDrag&&this.BorderDrag.Index>=0)//边框拖动
1794
+ {if(Math.abs(drag.LastMove.Y-e.clientY)<5)return;var yMove=e.clientY-drag.LastMove.Y;this.OnMoveFromeBorder(this.BorderDrag.Index,yMove);drag.LastMove.X=e.clientX;drag.LastMove.Y=e.clientY;}else if(this.YDrag&&this.YDrag.Index>=0)//Y轴缩放
1795
+ {if(moveSetpY<5)return;var yMove=e.clientY-drag.LastMove.Y;//this.UIElement.style.cursor="n-resize";
1794
1796
  JSConsole.Chart.Log("[JSChartContainer::DocOnMouseMove] YDrag ",this.YDrag,yMove);this.OnZoomUpDownFrameY(this.YDrag,yMove);drag.LastMove.X=e.clientX;drag.LastMove.Y=e.clientY;}else if(this.IndexChartDrag&&this.IndexChartDrag.SelectedChart){if(Math.abs(drag.LastMove.Y-e.clientY)<2&&Math.abs(drag.LastMove.X-e.clientX)<2)return;var chartMove=this.GetExtendChartByClassName("DragMovePaint");if(chartMove&&chartMove.Chart){var pixelTatio=GetDevicePixelRatio();var x=(e.clientX-this.UIElement.getBoundingClientRect().left)*pixelTatio;var y=(e.clientY-this.UIElement.getBoundingClientRect().top)*pixelTatio;chartMove.Chart.Point={X:x,Y:y};chartMove.Chart.IsShow=true;chartMove.Chart.Info=this.IndexChartDrag.Info;this.DrawDynamicInfo();}this.IndexChartDrag.LastMove.X=x;this.IndexChartDrag.LastMove.Y=y;drag.LastMove.X=e.clientX;drag.LastMove.Y=e.clientY;}else if(this.CustomChartDrag){var pixelTatio=GetDevicePixelRatio();var x=(e.clientX-this.UIElement.getBoundingClientRect().left)*pixelTatio;var y=(e.clientY-this.UIElement.getBoundingClientRect().top)*pixelTatio;var sendData={X:x,Y:y,e:e,ChartDrag:this.CustomChartDrag,Drag:drag};this.TryDragMove_CustomChartDrag(sendData);}else if(this.CurrentChartDrawPicture){var drawPicture=this.CurrentChartDrawPicture;if(drawPicture.Status==1||drawPicture.Status==2){if(Math.abs(drag.LastMove.X-e.clientX)<5&&Math.abs(drag.LastMove.Y-e.clientY)<5)return;if(this.SetChartDrawPictureSecondPoint(e.clientX,e.clientY)){this.DrawDynamicInfo();}}else if(drawPicture.Status==3){if(this.SetChartDrawPictureThirdPoint(e.clientX,e.clientY)){this.DrawDynamicInfo();}}else if(drawPicture.Status==20)//画图工具移动
1795
1797
  {if(Math.abs(drag.LastMove.X-e.clientX)<5&&Math.abs(drag.LastMove.Y-e.clientY)<1)return;if(this.SelectChartDrawPicture){if(this.SelectChartDrawPicture.EnableCtrlMove){if(!e.ctrlKey)return;}}if(this.SelectChartDrawPicture&&this.SelectChartDrawPicture.DragInfo)this.SelectChartDrawPicture.DragInfo.Move={X:e.clientX,Y:e.client};if(this.MoveChartDrawPicture(e.clientX-drag.LastMove.X,e.clientY-drag.LastMove.Y,false,drag)){this.DrawDynamicInfo();}}drag.LastMove.X=e.clientX;drag.LastMove.Y=e.clientY;}else if(this.DragMode==1||isDragSelectRect||isDragSubSelectRect)//数据上下左右拖拽
1796
1798
  {this.OnDragMode_One({X:moveSetp,Y:moveSetpY},e);}else if(this.DragMode==2)//区间选择
@@ -2580,9 +2582,10 @@ this.Buttons=[];this.CloseButton=CloneData(g_JSChartResource.Buttons.CloseOverla
2580
2582
  this.TitleColor=g_JSChartResource.OverlayFrame.TitleColor;this.TitleFont=g_JSChartResource.OverlayFrame.TitleFont;}};this.Draw=function(){this.Buttons=[];if(this.ChartBorder.IsShowTitleOnly)return;this.SplitXYCoordinate();if(this.IsShow){this.DrawVertical();this.DrawHorizontal();this.DrawTitle();}this.SizeChange=false;this.XYSplit=false;this.XSplit=false;};//Y轴刻度线 x坐标
2581
2583
  this.GetXHorizontal=function(){var border=this.ChartBorder.GetBorder();var x=border.Right;x+=this.RightOffset;if(this.Style==1){}else{x+=this.BlankWidth;}return x;};this.GetHorizontalWidth=function(){var width=null;if(this.YRightTextInfo&&IFrameSplitOperator.IsNumber(this.TextWidthIndex))width=this.YRightTextInfo.AryOverlayWidth[this.TextWidthIndex];return width;};this.DrawTitle=function()//画标题
2582
2584
  {if(!this.IsShowTitle)return;if(!this.Title)return;var border=this.ChartBorder.GetBorder();var top=this.ChartBorder.GetTopTitle();var bottom=border.Bottom;var xText=this.GetXHorizontal();var leftLine=null,rightLine=null;if(IFrameSplitOperator.IsNonEmptyArray(this.YLineExtend)){rightLine=this.YLineExtend[1];leftLine=this.YLineExtend[0];}if(this.Style==1){this.Canvas.textBaseline="bottom";if(rightLine&&rightLine.Width>0)xText+=rightLine.Width+1;else xText+=1;}else{this.Canvas.textBaseline="top";if(leftLine&&leftLine.Width>0)xText-=leftLine.Width;else xText-=2;}var yText=top+(bottom-top)/2;this.Canvas.fillStyle=this.TitleColor;this.Canvas.font=this.TitleFont;this.Canvas.textAlign="center";this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(this.Title,0,0);this.Canvas.restore();};this.GetScaleTextWidth=function(){if(!this.IsShow)return null;var border=this.ChartBorder.GetBorder();var pixelTatio=GetDevicePixelRatio();//获取设备的分辨率
2583
- if(this.IsHScreen){var borderBottom=this.ChartBorder.Bottom;var isDrawRight=borderBottom>10*pixelTatio&&this.IsShowYText[1]===true&&this.YTextPosition[1]!=2;}else{var borderRight=this.ChartBorder.Right;var isDrawRight=borderRight>10&&this.IsShowYText[1]===true&&this.YTextPosition[1]!=2;}if(!isDrawRight)return null;var width={Left:null,Right:0};for(var i=0;i<this.HorizontalInfo.length;++i){var textWidth=null;var item=this.HorizontalInfo[i];if(!item)continue;if(item.Message[1]!=null&&isDrawRight){if(item.Font!=null)this.Canvas.font=item.Font;textWidth=this.Canvas.measureText(item.Message[1]).width;if(this.YTextPadding&&IFrameSplitOperator.IsNumber(this.YTextPadding[1]))textWidth+=this.YTextPadding[1];if(width.Right<textWidth)width.Right=textWidth;}}if(IFrameSplitOperator.IsNonEmptyArray(this.YLineExtend)){var line=this.YLineExtend[1];if(line&&line.Width>0)width.Right+=line.Width;}return{TextWidth:width};};//分割x,y轴坐标信息
2585
+ if(this.IsHScreen){var borderBottom=this.ChartBorder.Bottom;var isDrawRight=borderBottom>10*pixelTatio&&this.IsShowYText[1]===true&&this.YTextPosition[1]!=2;}else{var borderRight=this.ChartBorder.Right;var isDrawRight=borderRight>10&&this.IsShowYText[1]===true&&this.YTextPosition[1]!=2;}if(!isDrawRight)return null;var width={Left:null,Right:0};for(var i=0;i<this.HorizontalInfo.length;++i){var textWidth=null;var item=this.HorizontalInfo[i];if(!item)continue;if(item.Message[1]!=null&&isDrawRight){if(item.Font!=null)this.Canvas.font=item.Font;textWidth=this.Canvas.measureText(item.Message[1]).width;if(this.YTextPadding&&IFrameSplitOperator.IsNumber(this.YTextPadding[1]))textWidth+=this.YTextPadding[1];if(width.Right<textWidth)width.Right=textWidth;}}if(IFrameSplitOperator.IsNonEmptyArray(this.YLineExtend)){var line=this.YLineExtend[1];if(line&&line.Width>0)width.Right+=line.Width;}return{TextWidth:width};};//同步主图坐标
2586
+ this.SyncMainHorizontalInfo=function(){if(!this.MainFrame)return false;if(this.MainFrame.YMaxMin){this.YMaxMin.Max=this.MainFrame.YMaxMin.Max;this.YMaxMin.Min=this.MainFrame.YMaxMin.Min;}this.HorizontalMax=this.MainFrame.HorizontalMax;this.HorizontalMin=this.MainFrame.HorizontalMin;this.HorizontalInfo=[];for(var i=0;i<this.MainFrame.HorizontalInfo.length;++i){var item=this.MainFrame.HorizontalInfo[i];this.HorizontalInfo.push(item);}this.CoordinateType=this.MainFrame.CoordinateType;return true;};//分割x,y轴坐标信息
2584
2587
  this.SplitXYCoordinate=function(){if(this.XYSplit==false)return;if(this.IsShareY)//和主图指标共享Y轴坐标
2585
- {this.HorizontalMax=this.MainFrame.HorizontalMax;this.HorizontalMin=this.MainFrame.HorizontalMin;this.HorizontalInfo=[];for(var i in this.MainFrame.HorizontalInfo){var item=this.MainFrame.HorizontalInfo[i];this.HorizontalInfo.push(item);}this.CoordinateType=this.MainFrame.CoordinateType;}else//独立Y轴坐标
2588
+ {this.SyncMainHorizontalInfo();}else//独立Y轴坐标
2586
2589
  {if(this.YSplitOperator!=null)this.YSplitOperator.Operator();}// if (this.XSplitOperator!=null) this.XSplitOperator.Operator(); 子坐标和主坐标X轴一致 所以不用计算
2587
2590
  };//画Y轴
2588
2591
  this.DrawHorizontal=function(){var border=this.ChartBorder.GetBorder();var left=border.Left;var right=border.Right;var bottom=border.Bottom;var top=this.ChartBorder.GetTopTitle();var borderRight=this.ChartBorder.Right;right+=this.RightOffset;var xLine=this.GetXHorizontal();if(IFrameSplitOperator.IsNumber(this.BlankWidth))right+=this.BlankWidth;var rightExtendText=null;//右侧文字设置
@@ -2834,7 +2837,8 @@ this.DrawHorizontal=function(){}/*
2834
2837
  this.UpdateFrameMaxMin=function()//调整坐标最大 最小值
2835
2838
  {var value={Max:null,Min:null};if(this.Frame.IsShareY)//共享Y轴坐标
2836
2839
  {this.Frame.XYSplit=true;return;}if(this.Frame.YSpecificMaxMin)//固定坐标
2837
- {value.Max=this.Frame.YSpecificMaxMin.Max;value.Min=this.Frame.YSpecificMaxMin.Min;}else{for(var i in this.ChartPaint){var paint=this.ChartPaint[i];var range=paint.GetMaxMin();if(IFrameSplitOperator.IsNumber(range.Max)){if(value.Max==null||value.Max<range.Max)value.Max=range.Max;}if(IFrameSplitOperator.IsNumber(range.Min)){if(value.Min==null||value.Min>range.Min)value.Min=range.Min;}}}if(value.Max!=null&&value.Min!=null){this.Frame.HorizontalMax=value.Max;this.Frame.HorizontalMin=value.Min;this.Frame.XYSplit=true;}};}//行情框架
2840
+ {value.Max=this.Frame.YSpecificMaxMin.Max;value.Min=this.Frame.YSpecificMaxMin.Min;}else{for(var i=0;i<this.ChartPaint.length;++i){var paint=this.ChartPaint[i];if(paint.IsShow==false)continue;//隐藏的图形不计算
2841
+ var range=paint.GetMaxMin();if(range==null||range.Max==null||range.Min==null)continue;if(IFrameSplitOperator.IsNumber(range.Max)){if(value.Max==null||value.Max<range.Max)value.Max=range.Max;}if(IFrameSplitOperator.IsNumber(range.Min)){if(value.Min==null||value.Min>range.Min)value.Min=range.Min;}}}if(!IFrameSplitOperator.IsNumber(this.Frame.YMaxMin.Max)||this.Frame.YMaxMin.Max!=value.Max){this.Frame.YMaxMin.Max=value.Max;this.Frame.XYSplit=true;}if(!IFrameSplitOperator.IsNumber(this.Frame.YMaxMin.Min)||this.Frame.YMaxMin.Min!=value.Min){this.Frame.YMaxMin.Min=value.Min;this.Frame.XYSplit=true;}if(this.Frame.XYSplit){var max=10,min=0;if(value.Max!=null)max=value.Max;if(value.Min!=null)min=value.Min;this.Frame.HorizontalMax=max;this.Frame.HorizontalMin=min;}else{this.Frame.XYSplit=true;}};}//行情框架
2838
2842
  function HQTradeFrame(){this.SubFrame=new Array();//SubFrameItem 数组
2839
2843
  this.SizeChange=true;//大小是否改变
2840
2844
  this.ChartBorder;this.Canvas;//画布
@@ -2850,7 +2854,7 @@ this.FixedRightWidth={Main:60,Overlay:80};this.ZoomWindowsInfo=null;//附图指
2850
2854
  this.ZoomStartWindowIndex=1;//允许缩放窗口起始位置
2851
2855
  this.GetExtendChartByClassName;this.GetEventCallback;this.OnMoveFromeBorder=function(index,yMove){if(this.SubFrame.length<=0)return false;var topFrame=this.SubFrame[index];var bottomFrame=null;for(var i=index+1;i<this.SubFrame.length;++i){var item=this.SubFrame[i];if(item.Height>0){bottomFrame=item;break;}}if(!topFrame||!bottomFrame)return false;var bottomBackup=topFrame.Frame.ChartBorder.Bottom;var topBackup=bottomFrame.Frame.ChartBorder.Top;topFrame.Frame.ChartBorder.Bottom-=yMove;bottomFrame.Frame.ChartBorder.Top+=yMove;var height=topFrame.Frame.ChartBorder.GetHeightEx();var height2=bottomFrame.Frame.ChartBorder.GetHeightEx();//缩小的时候 小于最小高度 不处理
2852
2856
  if(height<this.MinSubFrameHeight&&yMove<0||height2<this.MinSubFrameHeight&&yMove>0){topFrame.Frame.ChartBorder.Bottom=bottomBackup;bottomFrame.Frame.ChartBorder.Top=topBackup;return false;}return true;};this.ReDrawToolbar=function(){for(var i in this.SubFrame){this.SubFrame[i].Frame.ReDrawToolbar=true;}};this.SetFrameBorderSizeChange=function(){var firstFrame=this.SubFrame[0];if(!firstFrame||!firstFrame.Frame)return;var splitOper=firstFrame.Frame.YSplitOperator;if(!splitOper)return;if(splitOper.CoordinateType==2)//对数坐标 需要重新计算Y轴分割
2853
- {firstFrame.Frame.XYSplit=true;}};this.CancelZoomUpDownFrameY=function(obj){var index=obj.Index;if(this.SubFrame.length<=0)return false;if(!this.SubFrame[index])return false;var subFrame=this.SubFrame[index];var frame=subFrame.Frame;var splitOper=frame.YSplitOperator;if(splitOper.FixedYMaxMin){splitOper.FixedYMaxMin=null;splitOper.EnableZoomUpDown=false;frame.XYSplit=true;for(var i in subFrame.OverlayIndex){var item=subFrame.OverlayIndex[i];if(item.Frame.IsShareY)item.Frame.XYSplit=true;}JSConsole.Chart.Log('[HQTradeFrame::CancelZoomUpDownFrameY]');return true;}return false;};this.OnZoomUpDownFrameY=function(obj,yMove){var index=obj.Index;if(this.SubFrame.length<=0)return false;if(!this.SubFrame[index])return false;var subFrame=this.SubFrame[index];var frame=subFrame.Frame;var top=frame.ChartBorder.GetTopEx();var bottom=frame.ChartBorder.GetBottomEx();var maxValue=frame.HorizontalMax;var minValue=frame.HorizontalMin;var moveStep=(maxValue-minValue)*Math.abs(yMove)/(bottom-top);var splitOper=frame.YSplitOperator;var newFixedYMaxMin={Max:maxValue,Min:minValue};if(obj.Position==1){var step=yMove>0?-moveStep:moveStep;newFixedYMaxMin.Max+=step;}else if(obj.Position==2){var step=yMove>0?-moveStep:moveStep;newFixedYMaxMin.Min+=step;}else if(obj.Position==0){var step=yMove>0?moveStep:-moveStep;newFixedYMaxMin.Max+=step;newFixedYMaxMin.Min-=step;}else{return false;}if(newFixedYMaxMin.Max>newFixedYMaxMin.Min){splitOper.FixedYMaxMin=newFixedYMaxMin;splitOper.EnableZoomUpDown=true;frame.XYSplit=true;for(var i in subFrame.OverlayIndex){var item=subFrame.OverlayIndex[i];if(item.Frame.IsShareY)item.Frame.XYSplit=true;}JSConsole.Chart.Log('[HQTradeFrame::OnZoomUpDownFrameY] Max='+newFixedYMaxMin.Max+', Min='+newFixedYMaxMin.Min);return true;}return false;};this.OnUpDonwFrameY=function(obj,yMove){var index=obj.Index;if(this.SubFrame.length<=0)return false;if(!this.SubFrame[index])return false;var subFrame=this.SubFrame[index];var frame=subFrame.Frame;var top=frame.ChartBorder.GetTopEx();var bottom=frame.ChartBorder.GetBottomEx();var splitOper=frame.YSplitOperator;if(!splitOper)return false;var maxValue=frame.HorizontalMax;var minValue=frame.HorizontalMin;var moveStep=(maxValue-minValue)*Math.abs(yMove)/(bottom-top);var step=yMove>0?-moveStep:moveStep;var newFixedYMaxMin={Max:maxValue,Min:minValue};newFixedYMaxMin.Max-=step;newFixedYMaxMin.Min-=step;splitOper.FixedYMaxMin=newFixedYMaxMin;splitOper.EnableZoomUpDown=true;frame.XYSplit=true;for(var i in subFrame.OverlayIndex){var item=subFrame.OverlayIndex[i];if(item.Frame.IsShareY)item.Frame.XYSplit=true;}JSConsole.Chart.Log('[HQTradeFrame::OnUpDonwFrameY] Max='+newFixedYMaxMin.Max+', Min='+newFixedYMaxMin.Min+', yMove='+yMove+', moveStep='+moveStep);return true;};this.ClearUpDonwFrameYData=function(option)//清空上下拖拽的数据
2857
+ {firstFrame.Frame.XYSplit=true;}};this.CancelZoomUpDownFrameY=function(obj){var index=obj.Index;if(this.SubFrame.length<=0)return false;if(!this.SubFrame[index])return false;var subFrame=this.SubFrame[index];var frame=subFrame.Frame;var splitOper=frame.YSplitOperator;if(splitOper.FixedYMaxMin){splitOper.FixedYMaxMin=null;splitOper.EnableZoomUpDown=false;frame.XYSplit=true;for(var i in subFrame.OverlayIndex){var item=subFrame.OverlayIndex[i];if(item.Frame.IsShareY)item.Frame.XYSplit=true;}JSConsole.Chart.Log('[HQTradeFrame::CancelZoomUpDownFrameY]');return true;}return false;};this.OnZoomUpDownFrameY=function(obj,yMove){var index=obj.Index;if(this.SubFrame.length<=0)return false;if(!this.SubFrame[index])return false;var subFrame=this.SubFrame[index];var frame=subFrame.Frame;var top=frame.ChartBorder.GetTopEx();var bottom=frame.ChartBorder.GetBottomEx();var maxValue=frame.HorizontalMax;var minValue=frame.HorizontalMin;var moveStep=(maxValue-minValue)*Math.abs(yMove)/(bottom-top);var splitOper=frame.YSplitOperator;var newFixedYMaxMin={Max:maxValue,Min:minValue};if(obj.Position==1){var step=yMove>0?-moveStep:moveStep;newFixedYMaxMin.Max+=step;}else if(obj.Position==2){var step=yMove>0?-moveStep:moveStep;newFixedYMaxMin.Min+=step;}else if(obj.Position==0){var step=yMove>0?moveStep:-moveStep;newFixedYMaxMin.Max+=step;newFixedYMaxMin.Min-=step;}else{return false;}if(newFixedYMaxMin.Max>newFixedYMaxMin.Min){splitOper.FixedYMaxMin=newFixedYMaxMin;splitOper.EnableZoomUpDown=true;frame.XYSplit=true;for(var i=0;i<subFrame.OverlayIndex.length;++i){var item=subFrame.OverlayIndex[i];if(item.Frame.IsShareY)item.Frame.XYSplit=true;}JSConsole.Chart.Log('[HQTradeFrame::OnZoomUpDownFrameY] Max='+newFixedYMaxMin.Max+', Min='+newFixedYMaxMin.Min);return true;}return false;};this.OnUpDonwFrameY=function(obj,yMove){var index=obj.Index;if(this.SubFrame.length<=0)return false;if(!this.SubFrame[index])return false;var subFrame=this.SubFrame[index];var frame=subFrame.Frame;var top=frame.ChartBorder.GetTopEx();var bottom=frame.ChartBorder.GetBottomEx();var splitOper=frame.YSplitOperator;if(!splitOper)return false;var maxValue=frame.HorizontalMax;var minValue=frame.HorizontalMin;var moveStep=(maxValue-minValue)*Math.abs(yMove)/(bottom-top);var step=yMove>0?-moveStep:moveStep;var newFixedYMaxMin={Max:maxValue,Min:minValue};newFixedYMaxMin.Max-=step;newFixedYMaxMin.Min-=step;splitOper.FixedYMaxMin=newFixedYMaxMin;splitOper.EnableZoomUpDown=true;frame.XYSplit=true;for(var i in subFrame.OverlayIndex){var item=subFrame.OverlayIndex[i];if(item.Frame.IsShareY)item.Frame.XYSplit=true;}JSConsole.Chart.Log('[HQTradeFrame::OnUpDonwFrameY] Max='+newFixedYMaxMin.Max+', Min='+newFixedYMaxMin.Min+', yMove='+yMove+', moveStep='+moveStep);return true;};this.ClearUpDonwFrameYData=function(option)//清空上下拖拽的数据
2854
2858
  {if(this.SubFrame.length<=0)return;if(option){var index=option.Index;if(index<0||index>=this.SubFrame.length)return;var item=this.SubFrame[index];if(!item||!item.Frame||!item.Frame.YSplitOperator)return;var splitOper=item.Frame.YSplitOperator;if(splitOper.EnableZoomUpDown==true)splitOper.FixedYMaxMin=null;}else{for(var i=0;i<this.SubFrame.length;++i){var item=this.SubFrame[i];if(!item||!item.Frame||!item.Frame.YSplitOperator)continue;var splitOper=item.Frame.YSplitOperator;if(splitOper.EnableZoomUpDown==true)splitOper.FixedYMaxMin=null;}}};this.ClearCoordinateText=function(option)//清空X,Y轴刻度文字, 线段保留
2855
2859
  {for(var i=0;i<this.SubFrame.length;++i){var item=this.SubFrame[i];if(!item.Frame)continue;item.Frame.ClearCoordinateText(option);}};this.RestoreIndexWindows=function(){if(!this.ZoomWindowsInfo)return false;var subFrame=this.SubFrame[this.ZoomWindowsInfo.FrameID];for(var i=this.ZoomStartWindowIndex;i<this.ZoomWindowsInfo.Data.length;++i){var restoreItem=this.ZoomWindowsInfo.Data[i];var frameItem=this.SubFrame[i];frameItem.Height=restoreItem.Height;frameItem.Frame.IsMinSize=false;frameItem.Frame.ReDrawToolbar=true;frameItem.Frame.XSplitOperator.ShowText=restoreItem.ShowXText;frameItem.Frame.XYSplit=true;for(var j=0;j<frameItem.OverlayIndex.length;++j){var overlayItem=frameItem.OverlayIndex[j];overlayItem.Frame.IsMinSize=false;}}this.ZoomWindowsInfo=null;return true;};this.ZoomIndexWindow=function(frameID,option){var subFrame=this.SubFrame[frameID];if(!subFrame)return false;subFrame.Frame.ChartBorder.IsShowTitleOnly=false;if(this.ZoomWindowsInfo)//还原
2856
2860
  {return this.RestoreIndexWindows();}else//放大
@@ -2865,8 +2869,11 @@ var minValue=frame.HorizontalMin;frame.YSplitOperator.Operator();var value=frame
2865
2869
  //frame.HorizontalMax=maxValue;
2866
2870
  //frame.HorizontalMin=minValue;
2867
2871
  if(value&&value.TextWidth){var widthItem=value.TextWidth;if(IFrameSplitOperator.IsNumber(widthItem.Left)){if(width.Left==null||width.Left<widthItem.Left)width.Left=widthItem.Left;}if(IFrameSplitOperator.IsNumber(widthItem.Right)){if(width.Right==null||width.Right<widthItem.Right)width.Right=widthItem.Right;}}//右侧叠加指标
2868
- if(IFrameSplitOperator.IsNonEmptyArray(item.OverlayIndex)){for(var j=0,k=0;j<item.OverlayIndex.length;++j){var overlayItem=item.OverlayIndex[j];if(!overlayItem.Frame)continue;var maxValue=overlayItem.Frame.HorizontalMax;//最大最小要还原
2869
- var minValue=overlayItem.Frame.HorizontalMin;overlayItem.Frame.YSplitOperator.Operator();var value=overlayItem.Frame.GetScaleTextWidth();overlayItem.Frame.HorizontalMax=maxValue;overlayItem.Frame.HorizontalMin=minValue;overlayItem.RightWidth={Index:-1,Width:0};if(!value||!value.TextWidth)continue;var widthItem=value.TextWidth;if(!IFrameSplitOperator.IsNumber(widthItem.Right))continue;overlayItem.RightWidth.Index=k;overlayItem.RightWidth.Width=widthItem.Right;if(aryOverlayWidth[k]){aryOverlayWidth[k][i]=overlayItem.RightWidth;}else{aryOverlayWidth[k]=[];aryOverlayWidth[k][i]=overlayItem.RightWidth;}++k;}}}var overlayWidth=[];for(var i=0;i<aryOverlayWidth.length;++i){var colItem=aryOverlayWidth[i];var max=0;for(var j=0;j<colItem.length;++j){if(!colItem[j])continue;var item=colItem[j].Width;if(max<item)max=item;}if(max>0)max+=this.OverlayBlankWidth;for(var j=0;j<colItem.length;++j){if(!colItem[j])continue;colItem[j].Width=max;}overlayWidth[i]=max;}for(var i=0;i<overlayWidth.length;++i){var value=overlayWidth[i];if(!IFrameSplitOperator.IsNumber(value))continue;width.OverlayRight+=value;}width.AryOverlayWidth=overlayWidth;return width;};this.IsFrameXYSplit=function(){for(var i in this.SubFrame){var item=this.SubFrame[i];if(item.Frame.XYSplit)return true;for(var j=0;j<item.OverlayIndex.length;++j){var overlayItem=item.OverlayIndex[j];if(overlayItem.Frame.XYSplit)return true;}}return false;};this.Draw=function(option){if(this.SizeChange===true){this.CalculateChartBorder();}var isSplash=false;//是否过场动画
2872
+ if(IFrameSplitOperator.IsNonEmptyArray(item.OverlayIndex)){for(var j=0,k=0;j<item.OverlayIndex.length;++j){var overlayItem=item.OverlayIndex[j];if(!overlayItem.Frame)continue;if(overlayItem.Frame.IsShareY){if(overlayItem.Frame.SyncMainHorizontalInfo)overlayItem.Frame.SyncMainHorizontalInfo();var value=overlayItem.Frame.GetScaleTextWidth();}else{var maxValue=overlayItem.Frame.HorizontalMax;//最大最小要还原
2873
+ var minValue=overlayItem.Frame.HorizontalMin;overlayItem.Frame.YSplitOperator.Operator();var value=overlayItem.Frame.GetScaleTextWidth();//数据原始范围存储在YMaxMin, 不需要还原HorizontalMax,HorizontalMin
2874
+ //overlayItem.Frame.HorizontalMax=maxValue;
2875
+ //overlayItem.Frame.HorizontalMin=minValue;
2876
+ }overlayItem.RightWidth={Index:-1,Width:0};if(!value||!value.TextWidth)continue;var widthItem=value.TextWidth;if(!IFrameSplitOperator.IsNumber(widthItem.Right))continue;overlayItem.RightWidth.Index=k;overlayItem.RightWidth.Width=widthItem.Right;if(aryOverlayWidth[k]){aryOverlayWidth[k][i]=overlayItem.RightWidth;}else{aryOverlayWidth[k]=[];aryOverlayWidth[k][i]=overlayItem.RightWidth;}++k;}}}var overlayWidth=[];for(var i=0;i<aryOverlayWidth.length;++i){var colItem=aryOverlayWidth[i];var max=0;for(var j=0;j<colItem.length;++j){if(!colItem[j])continue;var item=colItem[j].Width;if(max<item)max=item;}if(max>0)max+=this.OverlayBlankWidth;for(var j=0;j<colItem.length;++j){if(!colItem[j])continue;colItem[j].Width=max;}overlayWidth[i]=max;}for(var i=0;i<overlayWidth.length;++i){var value=overlayWidth[i];if(!IFrameSplitOperator.IsNumber(value))continue;width.OverlayRight+=value;}width.AryOverlayWidth=overlayWidth;return width;};this.IsFrameXYSplit=function(){for(var i in this.SubFrame){var item=this.SubFrame[i];if(item.Frame.XYSplit)return true;for(var j=0;j<item.OverlayIndex.length;++j){var overlayItem=item.OverlayIndex[j];if(overlayItem.Frame.XYSplit)return true;}}return false;};this.Draw=function(option){if(this.SizeChange===true){this.CalculateChartBorder();}var isSplash=false;//是否过场动画
2870
2877
  if(option&&option.IsEnableSplash===true)isSplash=true;if(isSplash==false&&(this.AutoLeftBorder||this.AutoRightBorder)&&this.IsFrameXYSplit()){this.AutoRightOverlayWidth=[];var textWidth=this.GetScaleTextWidth();var bSizeChange=false;if(IFrameSplitOperator.IsNumber(textWidth.Left)&&this.AutoLeftBorder){var blank=0;if(IFrameSplitOperator.IsNumber(this.AutoLeftBorder.Blank))blank=this.AutoLeftBorder.Blank;var value=textWidth.Left+blank;if(IFrameSplitOperator.IsNumber(this.AutoLeftBorder.MinWidth)){if(this.AutoLeftBorder.MinWidth>value)value=this.AutoLeftBorder.MinWidth;}if(this.IsHScreen)this.ChartBorder.Top=value;else this.ChartBorder.Left=value;for(var i=0;i<this.SubFrame.length;++i){var item=this.SubFrame[i];if(this.IsHScreen)item.Frame.ChartBorder.Top=value;else item.Frame.ChartBorder.Left=value;}}if(IFrameSplitOperator.IsNumber(textWidth.Right)){if(this.AutoRightBorder)//自动调整右侧间距
2871
2878
  {var rightTextInfo={};var blank=0;if(IFrameSplitOperator.IsNumber(this.AutoRightBorder.Blank))blank=this.AutoRightBorder.Blank;var value=textWidth.Right+blank;if(IFrameSplitOperator.IsNumber(this.AutoRightBorder.MinWidth)){if(this.AutoRightBorder.MinWidth>value)value=this.AutoRightBorder.MinWidth;}this.AuotRightWidth=value;rightTextInfo.MainTextWidth=value;//主图坐标宽度
2872
2879
  if(IFrameSplitOperator.IsNonEmptyArray(textWidth.AryOverlayWidth))rightTextInfo.AryOverlayWidth=textWidth.AryOverlayWidth;if(IFrameSplitOperator.IsPlusNumber(textWidth.OverlayRight)){this.AuotRightWidth=value;value+=textWidth.OverlayRight;}if(this.GetExtendChartRightWidth){var extendWidth=this.GetExtendChartRightWidth();if(this.GetExtendChartByClassName){var finder=this.GetExtendChartByClassName("StockChip");if(finder&&finder.Chart){finder.Chart.Left=value;}}value+=extendWidth;}if(this.IsHScreen){if(this.ChartBorder.Bottom!=value)bSizeChange=true;this.ChartBorder.Bottom=value;}else{if(this.ChartBorder.Right!=value)bSizeChange=true;this.ChartBorder.Right=value;}for(var i=0;i<this.SubFrame.length;++i){var item=this.SubFrame[i];if(this.IsHScreen)item.Frame.ChartBorder.Bottom=value;else item.Frame.ChartBorder.Right=value;item.Frame.ReDrawToolbar=true;item.Frame.YRightTextInfo=rightTextInfo;for(var j=0;j<item.OverlayIndex.length;++j){var overlayItem=item.OverlayIndex[j];overlayItem.Frame.YRightTextInfo=rightTextInfo;}}}else{var rightTextInfo={};rightTextInfo.MainTextWidth=this.FixedRightWidth.Main;if(textWidth.OverlayRight==0)//无叠加直接最右边
@@ -12913,7 +12920,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
12913
12920
  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);};}/********************************************************************************
12914
12921
  * 版本信息输出
12915
12922
  *
12916
- */var HQCHART_VERSION="1.1.12765";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();//把给外界调用的方法暴露出来
12923
+ */var HQCHART_VERSION="1.1.12770";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();//把给外界调用的方法暴露出来
12917
12924
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
12918
12925
  // BaseIndex:BaseIndex,
12919
12926
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.12767",
3
+ "version": "1.1.12771",
4
4
  "description": "stock chart",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -3595,7 +3595,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3595
3595
  drag.CurrentMove.Y=e.clientY;
3596
3596
  }
3597
3597
 
3598
- if (this.BorderDrag && this.BorderDrag.Index>=0)
3598
+ if (this.BorderDrag && this.BorderDrag.Index>=0) //边框拖动
3599
3599
  {
3600
3600
  if(Math.abs(drag.LastMove.Y-e.clientY)<5) return;
3601
3601
 
@@ -3606,7 +3606,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3606
3606
  drag.LastMove.X=e.clientX;
3607
3607
  drag.LastMove.Y=e.clientY;
3608
3608
  }
3609
- else if (this.YDrag && this.YDrag.Index>=0)
3609
+ else if (this.YDrag && this.YDrag.Index>=0) //Y轴缩放
3610
3610
  {
3611
3611
  if(moveSetpY<5) return;
3612
3612
 
@@ -14964,6 +14964,7 @@ function OverlayKLineFrame()
14964
14964
  {
14965
14965
  this.Buttons=[];
14966
14966
  if (this.ChartBorder.IsShowTitleOnly) return;
14967
+
14967
14968
  this.SplitXYCoordinate();
14968
14969
 
14969
14970
  if (this.IsShow)
@@ -15094,6 +15095,31 @@ function OverlayKLineFrame()
15094
15095
  return { TextWidth:width };
15095
15096
  }
15096
15097
 
15098
+ //同步主图坐标
15099
+ this.SyncMainHorizontalInfo=function()
15100
+ {
15101
+ if (!this.MainFrame) return false;
15102
+
15103
+ if (this.MainFrame.YMaxMin)
15104
+ {
15105
+ this.YMaxMin.Max=this.MainFrame.YMaxMin.Max;
15106
+ this.YMaxMin.Min=this.MainFrame.YMaxMin.Min;
15107
+ }
15108
+
15109
+ this.HorizontalMax=this.MainFrame.HorizontalMax;
15110
+ this.HorizontalMin=this.MainFrame.HorizontalMin;
15111
+ this.HorizontalInfo=[];
15112
+ for(var i=0;i<this.MainFrame.HorizontalInfo.length; ++i)
15113
+ {
15114
+ var item=this.MainFrame.HorizontalInfo[i];
15115
+ this.HorizontalInfo.push(item);
15116
+ }
15117
+
15118
+ this.CoordinateType=this.MainFrame.CoordinateType;
15119
+
15120
+ return true;
15121
+ }
15122
+
15097
15123
  //分割x,y轴坐标信息
15098
15124
  this.SplitXYCoordinate=function()
15099
15125
  {
@@ -15101,16 +15127,7 @@ function OverlayKLineFrame()
15101
15127
 
15102
15128
  if (this.IsShareY) //和主图指标共享Y轴坐标
15103
15129
  {
15104
- this.HorizontalMax=this.MainFrame.HorizontalMax;
15105
- this.HorizontalMin=this.MainFrame.HorizontalMin;
15106
- this.HorizontalInfo=[];
15107
- for(var i in this.MainFrame.HorizontalInfo)
15108
- {
15109
- var item=this.MainFrame.HorizontalInfo[i];
15110
- this.HorizontalInfo.push(item);
15111
- }
15112
-
15113
- this.CoordinateType=this.MainFrame.CoordinateType;
15130
+ this.SyncMainHorizontalInfo();
15114
15131
  }
15115
15132
  else //独立Y轴坐标
15116
15133
  {
@@ -16388,10 +16405,12 @@ function OverlayIndexItem()
16388
16405
  }
16389
16406
  else
16390
16407
  {
16391
- for(var i in this.ChartPaint)
16408
+ for(var i=0;i<this.ChartPaint.length;++i)
16392
16409
  {
16393
16410
  var paint=this.ChartPaint[i];
16411
+ if (paint.IsShow==false) continue; //隐藏的图形不计算
16394
16412
  var range=paint.GetMaxMin();
16413
+ if (range==null || range.Max==null || range.Min==null) continue;
16395
16414
 
16396
16415
  if (IFrameSplitOperator.IsNumber(range.Max))
16397
16416
  {
@@ -16405,10 +16424,29 @@ function OverlayIndexItem()
16405
16424
  }
16406
16425
  }
16407
16426
 
16408
- if (value.Max!=null && value.Min!=null)
16427
+ if (!IFrameSplitOperator.IsNumber(this.Frame.YMaxMin.Max) || this.Frame.YMaxMin.Max!=value.Max)
16428
+ {
16429
+ this.Frame.YMaxMin.Max=value.Max;
16430
+ this.Frame.XYSplit=true;
16431
+ }
16432
+
16433
+ if (!IFrameSplitOperator.IsNumber(this.Frame.YMaxMin.Min) || this.Frame.YMaxMin.Min!=value.Min)
16434
+ {
16435
+ this.Frame.YMaxMin.Min=value.Min;
16436
+ this.Frame.XYSplit=true;
16437
+ }
16438
+
16439
+ if (this.Frame.XYSplit)
16440
+ {
16441
+ var max=10, min=0;
16442
+ if (value.Max!=null) max=value.Max;
16443
+ if (value.Min!=null) min=value.Min;
16444
+
16445
+ this.Frame.HorizontalMax=max;
16446
+ this.Frame.HorizontalMin=min;
16447
+ }
16448
+ else
16409
16449
  {
16410
- this.Frame.HorizontalMax=value.Max;
16411
- this.Frame.HorizontalMin=value.Min;
16412
16450
  this.Frame.XYSplit=true;
16413
16451
  }
16414
16452
  }
@@ -16575,7 +16613,7 @@ function HQTradeFrame()
16575
16613
  splitOper.EnableZoomUpDown=true;
16576
16614
  frame.XYSplit=true;
16577
16615
 
16578
- for(var i in subFrame.OverlayIndex)
16616
+ for(var i=0;i<subFrame.OverlayIndex.length;++i)
16579
16617
  {
16580
16618
  var item=subFrame.OverlayIndex[i];
16581
16619
  if (item.Frame.IsShareY) item.Frame.XYSplit=true;
@@ -16939,14 +16977,25 @@ function HQTradeFrame()
16939
16977
  var overlayItem=item.OverlayIndex[j];
16940
16978
  if (!overlayItem.Frame) continue;
16941
16979
 
16942
- var maxValue=overlayItem.Frame.HorizontalMax; //最大最小要还原
16943
- var minValue=overlayItem.Frame.HorizontalMin;
16980
+ if (overlayItem.Frame.IsShareY)
16981
+ {
16982
+ if (overlayItem.Frame.SyncMainHorizontalInfo)
16983
+ overlayItem.Frame.SyncMainHorizontalInfo();
16944
16984
 
16945
- overlayItem.Frame.YSplitOperator.Operator();
16946
- var value=overlayItem.Frame.GetScaleTextWidth();
16947
-
16948
- overlayItem.Frame.HorizontalMax=maxValue;
16949
- overlayItem.Frame.HorizontalMin=minValue;
16985
+ var value=overlayItem.Frame.GetScaleTextWidth();
16986
+ }
16987
+ else
16988
+ {
16989
+ var maxValue=overlayItem.Frame.HorizontalMax; //最大最小要还原
16990
+ var minValue=overlayItem.Frame.HorizontalMin;
16991
+
16992
+ overlayItem.Frame.YSplitOperator.Operator();
16993
+ var value=overlayItem.Frame.GetScaleTextWidth();
16994
+
16995
+ //数据原始范围存储在YMaxMin, 不需要还原HorizontalMax,HorizontalMin
16996
+ //overlayItem.Frame.HorizontalMax=maxValue;
16997
+ //overlayItem.Frame.HorizontalMin=minValue;
16998
+ }
16950
16999
 
16951
17000
  overlayItem.RightWidth={ Index:-1, Width:0 };
16952
17001
  if (!value || !value.TextWidth) continue;
@@ -7739,7 +7739,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7739
7739
  drag.CurrentMove.Y=e.clientY;
7740
7740
  }
7741
7741
 
7742
- if (this.BorderDrag && this.BorderDrag.Index>=0)
7742
+ if (this.BorderDrag && this.BorderDrag.Index>=0) //边框拖动
7743
7743
  {
7744
7744
  if(Math.abs(drag.LastMove.Y-e.clientY)<5) return;
7745
7745
 
@@ -7750,7 +7750,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7750
7750
  drag.LastMove.X=e.clientX;
7751
7751
  drag.LastMove.Y=e.clientY;
7752
7752
  }
7753
- else if (this.YDrag && this.YDrag.Index>=0)
7753
+ else if (this.YDrag && this.YDrag.Index>=0) //Y轴缩放
7754
7754
  {
7755
7755
  if(moveSetpY<5) return;
7756
7756
 
@@ -19108,6 +19108,7 @@ function OverlayKLineFrame()
19108
19108
  {
19109
19109
  this.Buttons=[];
19110
19110
  if (this.ChartBorder.IsShowTitleOnly) return;
19111
+
19111
19112
  this.SplitXYCoordinate();
19112
19113
 
19113
19114
  if (this.IsShow)
@@ -19238,6 +19239,31 @@ function OverlayKLineFrame()
19238
19239
  return { TextWidth:width };
19239
19240
  }
19240
19241
 
19242
+ //同步主图坐标
19243
+ this.SyncMainHorizontalInfo=function()
19244
+ {
19245
+ if (!this.MainFrame) return false;
19246
+
19247
+ if (this.MainFrame.YMaxMin)
19248
+ {
19249
+ this.YMaxMin.Max=this.MainFrame.YMaxMin.Max;
19250
+ this.YMaxMin.Min=this.MainFrame.YMaxMin.Min;
19251
+ }
19252
+
19253
+ this.HorizontalMax=this.MainFrame.HorizontalMax;
19254
+ this.HorizontalMin=this.MainFrame.HorizontalMin;
19255
+ this.HorizontalInfo=[];
19256
+ for(var i=0;i<this.MainFrame.HorizontalInfo.length; ++i)
19257
+ {
19258
+ var item=this.MainFrame.HorizontalInfo[i];
19259
+ this.HorizontalInfo.push(item);
19260
+ }
19261
+
19262
+ this.CoordinateType=this.MainFrame.CoordinateType;
19263
+
19264
+ return true;
19265
+ }
19266
+
19241
19267
  //分割x,y轴坐标信息
19242
19268
  this.SplitXYCoordinate=function()
19243
19269
  {
@@ -19245,16 +19271,7 @@ function OverlayKLineFrame()
19245
19271
 
19246
19272
  if (this.IsShareY) //和主图指标共享Y轴坐标
19247
19273
  {
19248
- this.HorizontalMax=this.MainFrame.HorizontalMax;
19249
- this.HorizontalMin=this.MainFrame.HorizontalMin;
19250
- this.HorizontalInfo=[];
19251
- for(var i in this.MainFrame.HorizontalInfo)
19252
- {
19253
- var item=this.MainFrame.HorizontalInfo[i];
19254
- this.HorizontalInfo.push(item);
19255
- }
19256
-
19257
- this.CoordinateType=this.MainFrame.CoordinateType;
19274
+ this.SyncMainHorizontalInfo();
19258
19275
  }
19259
19276
  else //独立Y轴坐标
19260
19277
  {
@@ -20532,10 +20549,12 @@ function OverlayIndexItem()
20532
20549
  }
20533
20550
  else
20534
20551
  {
20535
- for(var i in this.ChartPaint)
20552
+ for(var i=0;i<this.ChartPaint.length;++i)
20536
20553
  {
20537
20554
  var paint=this.ChartPaint[i];
20555
+ if (paint.IsShow==false) continue; //隐藏的图形不计算
20538
20556
  var range=paint.GetMaxMin();
20557
+ if (range==null || range.Max==null || range.Min==null) continue;
20539
20558
 
20540
20559
  if (IFrameSplitOperator.IsNumber(range.Max))
20541
20560
  {
@@ -20549,10 +20568,29 @@ function OverlayIndexItem()
20549
20568
  }
20550
20569
  }
20551
20570
 
20552
- if (value.Max!=null && value.Min!=null)
20571
+ if (!IFrameSplitOperator.IsNumber(this.Frame.YMaxMin.Max) || this.Frame.YMaxMin.Max!=value.Max)
20572
+ {
20573
+ this.Frame.YMaxMin.Max=value.Max;
20574
+ this.Frame.XYSplit=true;
20575
+ }
20576
+
20577
+ if (!IFrameSplitOperator.IsNumber(this.Frame.YMaxMin.Min) || this.Frame.YMaxMin.Min!=value.Min)
20578
+ {
20579
+ this.Frame.YMaxMin.Min=value.Min;
20580
+ this.Frame.XYSplit=true;
20581
+ }
20582
+
20583
+ if (this.Frame.XYSplit)
20584
+ {
20585
+ var max=10, min=0;
20586
+ if (value.Max!=null) max=value.Max;
20587
+ if (value.Min!=null) min=value.Min;
20588
+
20589
+ this.Frame.HorizontalMax=max;
20590
+ this.Frame.HorizontalMin=min;
20591
+ }
20592
+ else
20553
20593
  {
20554
- this.Frame.HorizontalMax=value.Max;
20555
- this.Frame.HorizontalMin=value.Min;
20556
20594
  this.Frame.XYSplit=true;
20557
20595
  }
20558
20596
  }
@@ -20719,7 +20757,7 @@ function HQTradeFrame()
20719
20757
  splitOper.EnableZoomUpDown=true;
20720
20758
  frame.XYSplit=true;
20721
20759
 
20722
- for(var i in subFrame.OverlayIndex)
20760
+ for(var i=0;i<subFrame.OverlayIndex.length;++i)
20723
20761
  {
20724
20762
  var item=subFrame.OverlayIndex[i];
20725
20763
  if (item.Frame.IsShareY) item.Frame.XYSplit=true;
@@ -21083,14 +21121,25 @@ function HQTradeFrame()
21083
21121
  var overlayItem=item.OverlayIndex[j];
21084
21122
  if (!overlayItem.Frame) continue;
21085
21123
 
21086
- var maxValue=overlayItem.Frame.HorizontalMax; //最大最小要还原
21087
- var minValue=overlayItem.Frame.HorizontalMin;
21124
+ if (overlayItem.Frame.IsShareY)
21125
+ {
21126
+ if (overlayItem.Frame.SyncMainHorizontalInfo)
21127
+ overlayItem.Frame.SyncMainHorizontalInfo();
21088
21128
 
21089
- overlayItem.Frame.YSplitOperator.Operator();
21090
- var value=overlayItem.Frame.GetScaleTextWidth();
21091
-
21092
- overlayItem.Frame.HorizontalMax=maxValue;
21093
- overlayItem.Frame.HorizontalMin=minValue;
21129
+ var value=overlayItem.Frame.GetScaleTextWidth();
21130
+ }
21131
+ else
21132
+ {
21133
+ var maxValue=overlayItem.Frame.HorizontalMax; //最大最小要还原
21134
+ var minValue=overlayItem.Frame.HorizontalMin;
21135
+
21136
+ overlayItem.Frame.YSplitOperator.Operator();
21137
+ var value=overlayItem.Frame.GetScaleTextWidth();
21138
+
21139
+ //数据原始范围存储在YMaxMin, 不需要还原HorizontalMax,HorizontalMin
21140
+ //overlayItem.Frame.HorizontalMax=maxValue;
21141
+ //overlayItem.Frame.HorizontalMin=minValue;
21142
+ }
21094
21143
 
21095
21144
  overlayItem.RightWidth={ Index:-1, Width:0 };
21096
21145
  if (!value || !value.TextWidth) continue;
@@ -131228,7 +131277,7 @@ function ScrollBarBGChart()
131228
131277
 
131229
131278
 
131230
131279
 
131231
- var HQCHART_VERSION="1.1.12765";
131280
+ var HQCHART_VERSION="1.1.12770";
131232
131281
 
131233
131282
  function PrintHQChartVersion()
131234
131283
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12765";
8
+ var HQCHART_VERSION="1.1.12770";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -7783,7 +7783,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7783
7783
  drag.CurrentMove.Y=e.clientY;
7784
7784
  }
7785
7785
 
7786
- if (this.BorderDrag && this.BorderDrag.Index>=0)
7786
+ if (this.BorderDrag && this.BorderDrag.Index>=0) //边框拖动
7787
7787
  {
7788
7788
  if(Math.abs(drag.LastMove.Y-e.clientY)<5) return;
7789
7789
 
@@ -7794,7 +7794,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7794
7794
  drag.LastMove.X=e.clientX;
7795
7795
  drag.LastMove.Y=e.clientY;
7796
7796
  }
7797
- else if (this.YDrag && this.YDrag.Index>=0)
7797
+ else if (this.YDrag && this.YDrag.Index>=0) //Y轴缩放
7798
7798
  {
7799
7799
  if(moveSetpY<5) return;
7800
7800
 
@@ -19152,6 +19152,7 @@ function OverlayKLineFrame()
19152
19152
  {
19153
19153
  this.Buttons=[];
19154
19154
  if (this.ChartBorder.IsShowTitleOnly) return;
19155
+
19155
19156
  this.SplitXYCoordinate();
19156
19157
 
19157
19158
  if (this.IsShow)
@@ -19282,6 +19283,31 @@ function OverlayKLineFrame()
19282
19283
  return { TextWidth:width };
19283
19284
  }
19284
19285
 
19286
+ //同步主图坐标
19287
+ this.SyncMainHorizontalInfo=function()
19288
+ {
19289
+ if (!this.MainFrame) return false;
19290
+
19291
+ if (this.MainFrame.YMaxMin)
19292
+ {
19293
+ this.YMaxMin.Max=this.MainFrame.YMaxMin.Max;
19294
+ this.YMaxMin.Min=this.MainFrame.YMaxMin.Min;
19295
+ }
19296
+
19297
+ this.HorizontalMax=this.MainFrame.HorizontalMax;
19298
+ this.HorizontalMin=this.MainFrame.HorizontalMin;
19299
+ this.HorizontalInfo=[];
19300
+ for(var i=0;i<this.MainFrame.HorizontalInfo.length; ++i)
19301
+ {
19302
+ var item=this.MainFrame.HorizontalInfo[i];
19303
+ this.HorizontalInfo.push(item);
19304
+ }
19305
+
19306
+ this.CoordinateType=this.MainFrame.CoordinateType;
19307
+
19308
+ return true;
19309
+ }
19310
+
19285
19311
  //分割x,y轴坐标信息
19286
19312
  this.SplitXYCoordinate=function()
19287
19313
  {
@@ -19289,16 +19315,7 @@ function OverlayKLineFrame()
19289
19315
 
19290
19316
  if (this.IsShareY) //和主图指标共享Y轴坐标
19291
19317
  {
19292
- this.HorizontalMax=this.MainFrame.HorizontalMax;
19293
- this.HorizontalMin=this.MainFrame.HorizontalMin;
19294
- this.HorizontalInfo=[];
19295
- for(var i in this.MainFrame.HorizontalInfo)
19296
- {
19297
- var item=this.MainFrame.HorizontalInfo[i];
19298
- this.HorizontalInfo.push(item);
19299
- }
19300
-
19301
- this.CoordinateType=this.MainFrame.CoordinateType;
19318
+ this.SyncMainHorizontalInfo();
19302
19319
  }
19303
19320
  else //独立Y轴坐标
19304
19321
  {
@@ -20576,10 +20593,12 @@ function OverlayIndexItem()
20576
20593
  }
20577
20594
  else
20578
20595
  {
20579
- for(var i in this.ChartPaint)
20596
+ for(var i=0;i<this.ChartPaint.length;++i)
20580
20597
  {
20581
20598
  var paint=this.ChartPaint[i];
20599
+ if (paint.IsShow==false) continue; //隐藏的图形不计算
20582
20600
  var range=paint.GetMaxMin();
20601
+ if (range==null || range.Max==null || range.Min==null) continue;
20583
20602
 
20584
20603
  if (IFrameSplitOperator.IsNumber(range.Max))
20585
20604
  {
@@ -20593,10 +20612,29 @@ function OverlayIndexItem()
20593
20612
  }
20594
20613
  }
20595
20614
 
20596
- if (value.Max!=null && value.Min!=null)
20615
+ if (!IFrameSplitOperator.IsNumber(this.Frame.YMaxMin.Max) || this.Frame.YMaxMin.Max!=value.Max)
20616
+ {
20617
+ this.Frame.YMaxMin.Max=value.Max;
20618
+ this.Frame.XYSplit=true;
20619
+ }
20620
+
20621
+ if (!IFrameSplitOperator.IsNumber(this.Frame.YMaxMin.Min) || this.Frame.YMaxMin.Min!=value.Min)
20622
+ {
20623
+ this.Frame.YMaxMin.Min=value.Min;
20624
+ this.Frame.XYSplit=true;
20625
+ }
20626
+
20627
+ if (this.Frame.XYSplit)
20628
+ {
20629
+ var max=10, min=0;
20630
+ if (value.Max!=null) max=value.Max;
20631
+ if (value.Min!=null) min=value.Min;
20632
+
20633
+ this.Frame.HorizontalMax=max;
20634
+ this.Frame.HorizontalMin=min;
20635
+ }
20636
+ else
20597
20637
  {
20598
- this.Frame.HorizontalMax=value.Max;
20599
- this.Frame.HorizontalMin=value.Min;
20600
20638
  this.Frame.XYSplit=true;
20601
20639
  }
20602
20640
  }
@@ -20763,7 +20801,7 @@ function HQTradeFrame()
20763
20801
  splitOper.EnableZoomUpDown=true;
20764
20802
  frame.XYSplit=true;
20765
20803
 
20766
- for(var i in subFrame.OverlayIndex)
20804
+ for(var i=0;i<subFrame.OverlayIndex.length;++i)
20767
20805
  {
20768
20806
  var item=subFrame.OverlayIndex[i];
20769
20807
  if (item.Frame.IsShareY) item.Frame.XYSplit=true;
@@ -21127,14 +21165,25 @@ function HQTradeFrame()
21127
21165
  var overlayItem=item.OverlayIndex[j];
21128
21166
  if (!overlayItem.Frame) continue;
21129
21167
 
21130
- var maxValue=overlayItem.Frame.HorizontalMax; //最大最小要还原
21131
- var minValue=overlayItem.Frame.HorizontalMin;
21168
+ if (overlayItem.Frame.IsShareY)
21169
+ {
21170
+ if (overlayItem.Frame.SyncMainHorizontalInfo)
21171
+ overlayItem.Frame.SyncMainHorizontalInfo();
21132
21172
 
21133
- overlayItem.Frame.YSplitOperator.Operator();
21134
- var value=overlayItem.Frame.GetScaleTextWidth();
21135
-
21136
- overlayItem.Frame.HorizontalMax=maxValue;
21137
- overlayItem.Frame.HorizontalMin=minValue;
21173
+ var value=overlayItem.Frame.GetScaleTextWidth();
21174
+ }
21175
+ else
21176
+ {
21177
+ var maxValue=overlayItem.Frame.HorizontalMax; //最大最小要还原
21178
+ var minValue=overlayItem.Frame.HorizontalMin;
21179
+
21180
+ overlayItem.Frame.YSplitOperator.Operator();
21181
+ var value=overlayItem.Frame.GetScaleTextWidth();
21182
+
21183
+ //数据原始范围存储在YMaxMin, 不需要还原HorizontalMax,HorizontalMin
21184
+ //overlayItem.Frame.HorizontalMax=maxValue;
21185
+ //overlayItem.Frame.HorizontalMin=minValue;
21186
+ }
21138
21187
 
21139
21188
  overlayItem.RightWidth={ Index:-1, Width:0 };
21140
21189
  if (!value || !value.TextWidth) continue;
@@ -131386,7 +131435,7 @@ function HQChartScriptWorker()
131386
131435
 
131387
131436
 
131388
131437
 
131389
- var HQCHART_VERSION="1.1.12765";
131438
+ var HQCHART_VERSION="1.1.12770";
131390
131439
 
131391
131440
  function PrintHQChartVersion()
131392
131441
  {