hqchart 1.1.14851 → 1.1.14855

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.
@@ -1214,7 +1214,7 @@ var scriptData=new JSIndexScript();if(option.ColorIndex)//五彩K线
1214
1214
  {var apiItem=item.API;chart.WindowIndex[i]=new APIScriptIndex(apiItem.Name,apiItem.Script,apiItem.Args,item);}else{var indexItem=JSIndexMap.Get(item.Index);if(indexItem){chart.WindowIndex[i]=indexItem.Create(item.Option);if(chart.WindowIndex[i].SetArgs)chart.WindowIndex[i].SetArgs(item.Args);chart.CreateWindowIndex(i);}else{var scriptData=new JSIndexScript();var _indexInfo2=scriptData.Get(item.Index);if(!_indexInfo2)continue;JSIndexScript.ModifyAttribute(_indexInfo2,item);_indexInfo2.ID=item.Index;chart.WindowIndex[i]=new ScriptIndex(_indexInfo2.Name,_indexInfo2.Script,_indexInfo2.Args,_indexInfo2);//脚本执行
1215
1215
  if(item.StringFormat>0)chart.WindowIndex[i].StringFormat=item.StringFormat;if(item.FloatPrecision>=0)chart.WindowIndex[i].FloatPrecision=item.FloatPrecision;}}var frame=chart.Frame.SubFrame[i].Frame;if(IFrameSplitOperator.IsBool(item.Modify))frame.ModifyIndex=item.Modify;if(IFrameSplitOperator.IsBool(item.Change))frame.ChangeIndex=item.Change;if(IFrameSplitOperator.IsBool(item.Close))frame.CloseIndex=item.Close;if(IFrameSplitOperator.IsBool(item.Overlay))frame.OverlayIndex=item.Overlay;if(IFrameSplitOperator.IsBool(item.Export))frame.ExportData=item.Export;if(IFrameSplitOperator.IsBool(item.MaxMin))chart.Frame.SubFrame[i].Frame.MaxMinWindow=item.MaxMin;if(IFrameSplitOperator.IsBool(item.TitleWindow))chart.Frame.SubFrame[i].Frame.TitleWindow=item.TitleWindow;if(IFrameSplitOperator.IsBool(item.AddIndexWindow))frame.AddIndexWindow=item.AddIndexWindow;if(item.IsDrawTitleBG==true)chart.Frame.SubFrame[i].Frame.IsDrawTitleBG=item.IsDrawTitleBG;if(IFrameSplitOperator.IsBool(item.IsShowNameArrow))chart.Frame.SubFrame[i].Frame.IsShowNameArrow=item.IsShowNameArrow;if(IFrameSplitOperator.IsNumber(item.TitleHeight))chart.Frame.SubFrame[i].Frame.ChartBorder.TitleHeight=item.TitleHeight;else item.TitleHeight=chart.Frame.SubFrame[i].Frame.ChartBorder.TitleHeight;if(IFrameSplitOperator.IsBool(item.IsShowTitleArrow))frame.IsShowTitleArrow=item.IsShowTitleArrow;if(IFrameSplitOperator.IsNumber(item.TitleArrowType))frame.TitleArrowType=item.TitleArrowType;if(item.IsShowIndexName==false)chart.Frame.SubFrame[i].Frame.IsShowIndexName=false;if(item.IsShowOverlayIndexName==false)chart.Frame.SubFrame[i].Frame.IsShowOverlayIndexName=false;if(IFrameSplitOperator.IsNumber(item.IndexParamSpace))chart.Frame.SubFrame[i].Frame.IndexParamSpace=item.IndexParamSpace;if(IFrameSplitOperator.IsNumber(item.IndexTitleSpace))chart.Frame.SubFrame[i].Frame.IndexTitleSpace=item.IndexTitleSpace;if(!IFrameSplitOperator.IsUndefined(item.HorizontalReserved))frame.HorizontalReserved=item.HorizontalReserved;if(item.OverlayIndexType){if(IFrameSplitOperator.IsNumber(item.OverlayIndexType.Position))chart.Frame.SubFrame[i].Frame.OverlayIndexType.Position=item.OverlayIndexType.Position;if(IFrameSplitOperator.IsNumber(item.OverlayIndexType.LineSpace))chart.Frame.SubFrame[i].Frame.OverlayIndexType.LineSpace=item.OverlayIndexType.LineSpace;}}//叠加指标宽度
1216
1216
  if(option.OverlayIndexFrameWidth>40)chart.Frame.FixedRightWidth.Overlay=option.OverlayIndexFrameWidth;//叠加指标
1217
- if(IFrameSplitOperator.IsNonEmptyArray(option.OverlayIndex)){for(var i=0;i<option.OverlayIndex.length;++i){var item=option.OverlayIndex[i];if(item.Windows>=chart.Frame.SubFrame.length)continue;var itemString=(0,_stringify2.default)(item);var obj=JSON.parse(itemString);if(item.Index)obj.IndexName=item.Index;if(item.Windows>=0)obj.WindowIndex=item.Windows;chart.CreateOverlayWindowsIndex(obj);}}this.AdjustTitleHeight(chart);return chart;};//自定义指数历史K线图
1217
+ if(IFrameSplitOperator.IsNonEmptyArray(option.OverlayIndex)){for(var i=0;i<option.OverlayIndex.length;++i){var item=option.OverlayIndex[i];if(item.Windows>=chart.Frame.SubFrame.length)continue;var itemString=(0,_stringify2.default)(item);var obj=JSON.parse(itemString);if(item.Index)obj.IndexName=item.Index;if(item.Windows>=0)obj.WindowIndex=item.Windows;chart.CreateOverlayWindowsIndex(obj);}}this.AdjustTitleHeight(chart);if(option.LatestPointFlash){var item=option.LatestPointFlash;if(item.Enable){this.CreateExtraCanvasElement(JSChart.LatestPointFlashKey,{ZIndex:6});chart.CreateExtendChart("LatestPointFlashPaint",item);chart.StartLatestPointFlash();}}return chart;};//自定义指数历史K线图
1218
1218
  this.CreateCustomKLineChartContainer=function(option){var chart=new CustomKLineChartContainer(this.CanvasElement);//右键菜单
1219
1219
  if(IFrameSplitOperator.IsBool(option.IsShowRightMenu))chart.IsShowRightMenu=option.IsShowRightMenu;if(option.KLine)//k线图的属性设置
1220
1220
  {if(option.KLine.DragMode>=0)chart.DragMode=option.KLine.DragMode;if(option.KLine.Right>=0)chart.Right=option.KLine.Right;if(option.KLine.Period>=0)chart.Period=option.KLine.Period;if(option.KLine.MaxRequestDataCount>0)chart.MaxRequestDataCount=option.KLine.MaxRequestDataCount;if(option.KLine.Info&&option.KLine.Info.length>0)chart.SetKLineInfo(option.KLine.Info,false);if(option.KLine.PageSize>0)chart.PageSize=option.KLine.PageSize;if(option.KLine.IsShowTooltip==false)chart.IsShowTooltip=false;}if(option.CustomStock)chart.CustomStock=option.CustomStock;if(option.QueryDate)chart.QueryDate=option.QueryDate;if(!option.Windows||option.Windows.length<=0)return null;//创建子窗口
@@ -1564,7 +1564,11 @@ OP_CORSSCURSOR_GOTO:14,//十字光标移动某一个时刻点
1564
1564
  OP_SCROOLBAR_SLIDER_CHANGED:15,//滑块变动
1565
1565
  OP_GOTO:16,//移动到某一个天或某一个分钟
1566
1566
  OP_GOTO_BY_DATAINDEX:17,//的移动到某一个数据起始位置
1567
- OP_MOVE_CORSSCURSOR:18//移动十字光标 { Step, Start:{ Date:, Time: } }
1567
+ OP_MOVE_CORSSCURSOR:18,//移动十字光标 { Step, Start:{ Date:, Time: } }
1568
+ OP_CORSSCURSOR_PAGE_START:19,//当前屏第1条数据
1569
+ OP_CORSSCURSOR_PAGE_END:20,//当前屏最后1条数据
1570
+ OP_CORSSCURSOR_DATA_START:21,//所有数据的第1条数据
1571
+ OP_CORSSCURSOR_DATA_END:22//所有数据的最后1条数据
1568
1572
  };var JSCHART_DRAG_ID={DISABLE_DRAG_ID:0,CLICK_TOUCH_MODE_ID:3//长按十字光标显示保留/点击十字光标消失 (使用TouchStatus)
1569
1573
  };var JSCHART_BUTTON_ID={CLOSE_BEFOREOPEN_ID:1,//关闭集合竞价
1570
1574
  CLOSE_OVERLAY_INDEX:2,//关闭叠加指标
@@ -2117,6 +2121,8 @@ if(this.SelectChartDrawPicture){var drawPicture=this.SelectChartDrawPicture;JSCo
2117
2121
  this.OnMarkRectSelect(e);break;case 27://ESCAPE 取消画布工具
2118
2122
  if(this.CurrentChartDrawPicture){var drawPicture=this.CurrentChartDrawPicture;if(drawPicture.Status!=20)//画布移动的时候不能取消
2119
2123
  this.CurrentChartDrawPicture=null;}break;case 13://回车
2124
+ case 35://END
2125
+ case 36://HOME
2120
2126
  if(this.OnCustomKeyDown)this.OnCustomKeyDown(keyID,e);break;default:return;}if(draw)this.DrawDynamicInfo();if(keyID==37||keyID==39)this.StartKeyboardMoveTimer(e);//不让滚动条滚动
2121
2127
  if(e.preventDefault)e.preventDefault();else e.returnValue=false;};this.ClearKeyboardMoveTimer=function(){if(!this.KeyboardMove)return;this.KeyboardMove.Event=null;if(this.KeyboardMove.Timer){clearTimeout(this.KeyboardMove.Timer);this.KeyboardMove.Timer=null;JSConsole.Chart.Log('[JSChartContainer::ClearKeyboardMoveTimer] Stop');}this.KeyboardMove.Enable=false;};this.StartKeyboardMoveTimer=function(e){if(!this.KeyboardMove)return;if(this.KeyboardMove.Enable)return;//已启动
2122
2128
  this.KeyboardMove.Event=e;this.KeyboardMove.Enable=true;JSConsole.Chart.Log('[JSChartContainer::StartKeyboardMoveTimer] Start');this.AutoKeyboardMove();};this.AutoKeyboardMove=function(){var _this15=this;if(!this.KeyboardMove)return false;if(!this.KeyboardMove.Enable)return false;if(!this.KeyboardMove.Event)return false;this.KeyboardMove.Timer=setTimeout(function(){_this15.OnKeyboardMoveTimerProc();},this.KeyboardMove.Delay);};this.OnKeyboardMoveTimerProc=function(){if(!this.KeyboardMove)return false;if(!this.KeyboardMove.Enable)return false;if(!this.KeyboardMove.Event)return false;var e=this.KeyboardMove.Event;var keyID=e.keyCode?e.keyCode:e.which;var bStop=false;switch(keyID){case 37://left
@@ -3742,7 +3748,8 @@ this.ChartHeatMap;//=new ChartHeatMap();
3742
3748
  this.PriceGap={Enable:false,Count:1};this.PriceGapStyple={Line:{Color:g_JSChartResource.PriceGapStyple.Line.Color},Text:{Color:g_JSChartResource.PriceGapStyple.Text.Color,Font:g_JSChartResource.PriceGapStyple.Text.Font}};this.AryPriceGapCache=[];//缺口数据 { }
3743
3749
  //面积图和收盘价线 断开点
3744
3750
  this.AryBreakPoint;//天数统计
3745
- this.DaySummary={MapDate:new _map2.default(),Enable:false};this.DaySummaryConfig={Font:g_JSChartResource.DaySummaryKLine.Font,TextColor:g_JSChartResource.DaySummaryKLine.TextColor,LeftMargin:g_JSChartResource.DaySummaryKLine.LeftMargin};this.AddToDaySummary=function(kItem){if(!this.DaySummary.Enable)return false;if(!kItem)return false;if(!IFrameSplitOperator.IsPlusNumber(kItem.Date))return false;if(this.DaySummary.MapDate.has(kItem.Date))return false;this.DaySummary.MapDate.set(kItem.Date,{Date:kItem.Date});};this.ClearDaySummary=function(){this.DaySummary.MapDate.clear();};this.BuildDateTimeKey=function(item){if(!item)return null;if(!IFrameSplitOperator.IsNumber(item.Time))return''+item.Date;return item.Date+'-'+item.Time;};this.BuildBreakPoint=function(){if(!IFrameSplitOperator.IsNonEmptyArray(this.AryBreakPoint))return null;var mapBreakPoint=new _map2.default();for(var i=0;i<this.AryBreakPoint.length;++i){var item=this.AryBreakPoint[i];var key=this.BuildDateTimeKey(item);if(key)mapBreakPoint.set(key,item);}return mapBreakPoint;};this.ReloadResource=function(resource){this.TextFont=g_JSChartResource.KLine.MaxMin.Font;this.TextColor=g_JSChartResource.KLine.MaxMin.Color;this.CloseLineColor=g_JSChartResource.CloseLineColor;this.CloseLineAreaColor=g_JSChartResource.CloseLineAreaColor;this.CloseLineWidth=g_JSChartResource.CloseLineWidth;this.UpColor=g_JSChartResource.UpBarColor;this.DownColor=g_JSChartResource.DownBarColor;this.UnchagneColor=g_JSChartResource.UnchagneBarColor;//平盘
3751
+ this.DaySummary={MapDate:new _map2.default(),Enable:false};this.DaySummaryConfig={Font:g_JSChartResource.DaySummaryKLine.Font,TextColor:g_JSChartResource.DaySummaryKLine.TextColor,LeftMargin:g_JSChartResource.DaySummaryKLine.LeftMargin};this.LastPoint={};//最后一个点的信息 {X, Y, KItem:, Date:, Time: }
3752
+ this.AddToDaySummary=function(kItem){if(!this.DaySummary.Enable)return false;if(!kItem)return false;if(!IFrameSplitOperator.IsPlusNumber(kItem.Date))return false;if(this.DaySummary.MapDate.has(kItem.Date))return false;this.DaySummary.MapDate.set(kItem.Date,{Date:kItem.Date});};this.ClearDaySummary=function(){this.DaySummary.MapDate.clear();};this.BuildDateTimeKey=function(item){if(!item)return null;if(!IFrameSplitOperator.IsNumber(item.Time))return''+item.Date;return item.Date+'-'+item.Time;};this.BuildBreakPoint=function(){if(!IFrameSplitOperator.IsNonEmptyArray(this.AryBreakPoint))return null;var mapBreakPoint=new _map2.default();for(var i=0;i<this.AryBreakPoint.length;++i){var item=this.AryBreakPoint[i];var key=this.BuildDateTimeKey(item);if(key)mapBreakPoint.set(key,item);}return mapBreakPoint;};this.ReloadResource=function(resource){this.TextFont=g_JSChartResource.KLine.MaxMin.Font;this.TextColor=g_JSChartResource.KLine.MaxMin.Color;this.CloseLineColor=g_JSChartResource.CloseLineColor;this.CloseLineAreaColor=g_JSChartResource.CloseLineAreaColor;this.CloseLineWidth=g_JSChartResource.CloseLineWidth;this.UpColor=g_JSChartResource.UpBarColor;this.DownColor=g_JSChartResource.DownBarColor;this.UnchagneColor=g_JSChartResource.UnchagneBarColor;//平盘
3746
3753
  this.HighLowBarColor=g_JSChartResource.HighLowBarColor;this.OrderFlow.UpColor={BG:g_JSChartResource.OrderFlow.UpColor.BG,Border:g_JSChartResource.OrderFlow.UpColor.Border};this.OrderFlow.DownColor={BG:g_JSChartResource.OrderFlow.DownColor.BG,Border:g_JSChartResource.OrderFlow.DownColor.Border};this.OrderFlow.UnchagneColor={BG:g_JSChartResource.OrderFlow.UnchagneColor.BG,Border:g_JSChartResource.OrderFlow.UnchagneColor.Border};this.OrderFlow.Text={Color:g_JSChartResource.OrderFlow.Text.Color,Family:g_JSChartResource.OrderFlow.Text.Family,FontMaxSize:g_JSChartResource.OrderFlow.Text.FontMaxSize,MaxValue:g_JSChartResource.OrderFlow.Text.MaxValue};this.OrderFlow.Line={UpDownColor:g_JSChartResource.OrderFlow.Line.UpDownColor,MiddleColor:g_JSChartResource.OrderFlow.Line.MiddleColor};this.PredictionConfig.Line={Color:g_JSChartResource.PredictionKLine.Line.Color,LineDash:g_JSChartResource.PredictionKLine.Line.LineDash,LineWidth:g_JSChartResource.PredictionKLine.Line.LineWidth};this.PredictionConfig.Bar={UpColor:g_JSChartResource.PredictionKLine.Bar.UpColor,DownColor:g_JSChartResource.PredictionKLine.Bar.DownColor,UnchangeColor:g_JSChartResource.PredictionKLine.Bar.UnchangeColor,DrawType:g_JSChartResource.PredictionKLine.Bar.DrawType};this.DaySummaryConfig={Font:g_JSChartResource.DaySummaryKLine.Font,TextColor:g_JSChartResource.DaySummaryKLine.TextColor,LeftMargin:g_JSChartResource.DaySummaryKLine.LeftMargin};};this.ClearCustomKLine=function(){this.CustomKLine=null;};this.ClearBreakPoint=function(){this.AryBreakPoint=null;};this.GetCustomKLine=function(kItem){if(!this.CustomKLine)return null;if(!kItem)return null;var key=kItem.Date*1000000;if(IFrameSplitOperator.IsNumber(kItem.Time))key+=kItem.Time;if(!this.CustomKLine.has(key))return null;var value=this.CustomKLine.get(key);return value;};this.DrawHeatMap=function(){if(!this.ChartHeatMap)return;this.ChartHeatMap.Canvas=this.Canvas;this.ChartHeatMap.ChartBorder=this.ChartBorder;this.ChartHeatMap.ChartFrame=this.ChartFrame;this.ChartHeatMap.Data=this.Data;this.ChartHeatMap.Draw();};this.ClearHeatMap=function(){this.ChartHeatMap=null;};this.CreateHeatMap=function(){this.ChartHeatMap=new ChartHeatMap();};this.DrawAKLine=function()//美国线
3747
3754
  {var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;if(isHScreen){var border=this.ChartBorder.GetHScreenBorder();var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.BottomEx;}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;}var upColor=this.UpColor;var downColor=this.DownColor;var unchagneColor=this.UnchagneColor;var ptMax={X:null,Y:null,Value:null,Align:'left'};var ptMin={X:null,Y:null,Value:null,Align:'left'};this.ShowRange.Start=this.Data.DataOffset;this.ShowRange.End=this.ShowRange.Start;this.ShowRange.DataCount=0;this.ShowRange.ShowCount=xPointCount;this.DrawKRange.Start=this.Data.DataOffset;var eventUnchangeKLine=null;//定制平盘K线颜色事件
3748
3755
  if(this.GetEventCallback){eventUnchangeKLine=this.GetEventCallback(JSCHART_EVENT_ID.ON_CUSTOM_UNCHANGE_KLINE_COLOR);}var preKItemInfo=null;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth,++this.ShowRange.DataCount){var data=this.Data.Data[i];this.ShowRange.End=i;if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var yClose=this.GetYFromData(data.Close,false);this.DrawKRange.End=i;this.AddToDaySummary(data);var kItemInfo={Data:data,Coordinate:{X:x,Low:yLow,High:yHigh,Close:yClose,Open:yOpen,Left:left,Right:right}};if(ptMax.Value==null||ptMax.Value<data.High)//求最大值
@@ -3764,11 +3771,12 @@ var yTop=yClose-barWidth/2;if(isHScreen){this.Canvas.fillRect(yTop,aryX[2],barWi
3764
3771
  {var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;if(isHScreen){var border=this.ChartBorder.GetHScreenBorder();var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.BottomEx;var borderLeft=border.TopEx;}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var borderLeft=border.LeftEx;}var bFirstPoint=true;var firstPoint=null;this.Canvas.beginPath();this.Canvas.strokeStyle=this.CloseLineColor;if(IFrameSplitOperator.IsNumber(this.CloseLineWidth))this.Canvas.lineWidth=this.CloseLineWidth;var ptLast=null;if(this.Data.DataOffset>0)//把最左边的一个点连上
3765
3772
  {var data=this.Data.Data[this.Data.DataOffset-1];if(data&&IFrameSplitOperator.IsNumber(data.Close)){var x=borderLeft;var yClose=this.GetYFromData(data.Close,false);if(isHScreen){this.Canvas.moveTo(yClose,x);firstPoint={X:yClose,Y:x};}else{this.Canvas.moveTo(x,yClose);firstPoint={X:x,Y:yClose};}bFirstPoint=false;}}this.ShowRange.Start=this.Data.DataOffset;this.ShowRange.End=this.ShowRange.Start;this.ShowRange.DataCount=0;this.ShowRange.ShowCount=xPointCount;this.DrawKRange.Start=this.Data.DataOffset;var preKItemInfo=null;var prePoint=null;var xEnd=null;//最后一个点
3766
3773
  for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth,++this.ShowRange.DataCount){var data=this.Data.Data[i];this.ShowRange.End=i;if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var yClose=this.GetYFromData(data.Close,false);this.DrawKRange.End=i;this.AddToDaySummary(data);if(data.IsVirtual&&this.PredictionConfig.Enable)//预测数据|虚拟数据
3767
- {this.AryPredictionCache.push({PrePoint:prePoint,Point:{X:x,Y:yClose}});prePoint={X:x,Y:yClose};continue;}if(bFirstPoint){if(isHScreen){this.Canvas.moveTo(yClose,x);firstPoint={X:yClose,Y:x};}else{this.Canvas.moveTo(x,yClose);firstPoint={X:x,Y:yClose};}bFirstPoint=false;}else{if(isHScreen)this.Canvas.lineTo(yClose,x);else this.Canvas.lineTo(x,yClose);}xEnd=x;prePoint={X:x,Y:yClose};if(i==this.Data.Data.length-1){ptLast={X:x,Y:yClose,XLeft:left,XRight:right,KItem:data,ChartRight:chartright};}if(this.PriceGap.Enable){var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var kItemInfo={Data:data,Coordinate:{X:x,Low:yLow,High:yHigh,Close:yClose,Open:yOpen,Left:left,Right:right}};if(preKItemInfo){this.CheckPriceGap(kItemInfo);var value=this.IsPriceGap(kItemInfo,preKItemInfo);if(value>0)this.AryPriceGapCache.push({Data:[preKItemInfo,kItemInfo],Type:value});}preKItemInfo=kItemInfo;}}this.DrawLastPointEvent(ptLast);//通知外部绘制最后一个点
3774
+ {this.AryPredictionCache.push({PrePoint:prePoint,Point:{X:x,Y:yClose}});prePoint={X:x,Y:yClose};continue;}if(bFirstPoint){if(isHScreen){this.Canvas.moveTo(yClose,x);firstPoint={X:yClose,Y:x};}else{this.Canvas.moveTo(x,yClose);firstPoint={X:x,Y:yClose};}bFirstPoint=false;}else{if(isHScreen)this.Canvas.lineTo(yClose,x);else this.Canvas.lineTo(x,yClose);}xEnd=x;prePoint={X:x,Y:yClose};if(i==this.Data.Data.length-1){ptLast={X:x,Y:yClose,XLeft:left,XRight:right,KItem:data,ChartRight:chartright};this.LastPoint={X:x,Y:yClose,KItem:data};}if(this.PriceGap.Enable){var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var kItemInfo={Data:data,Coordinate:{X:x,Low:yLow,High:yHigh,Close:yClose,Open:yOpen,Left:left,Right:right}};if(preKItemInfo){this.CheckPriceGap(kItemInfo);var value=this.IsPriceGap(kItemInfo,preKItemInfo);if(value>0)this.AryPriceGapCache.push({Data:[preKItemInfo,kItemInfo],Type:value});}preKItemInfo=kItemInfo;}}this.DrawLastPointEvent(ptLast);//通知外部绘制最后一个点
3768
3775
  if(bFirstPoint)return;this.Canvas.stroke();if(isHScreen){this.Canvas.lineTo(border.Left,xEnd);this.Canvas.lineTo(border.Left,firstPoint.Y);}else{this.Canvas.lineTo(xEnd,border.Bottom);this.Canvas.lineTo(firstPoint.X,border.Bottom);}this.Canvas.closePath();if(Array.isArray(this.CloseLineAreaColor)){if(isHScreen){var gradient=this.Canvas.createLinearGradient(this.ChartBorder.GetRightEx(),this.ChartBorder.GetTop(),this.ChartBorder.GetLeft(),this.ChartBorder.GetTop());gradient.addColorStop(0,this.CloseLineAreaColor[0]);gradient.addColorStop(1,this.CloseLineAreaColor[1]);this.Canvas.fillStyle=gradient;}else{var _gradient=this.Canvas.createLinearGradient(firstPoint.X,this.ChartBorder.GetTopEx(),firstPoint.X,this.ChartBorder.GetBottom());_gradient.addColorStop(0,this.CloseLineAreaColor[0]);_gradient.addColorStop(1,this.CloseLineAreaColor[1]);this.Canvas.fillStyle=_gradient;}}else{this.Canvas.fillStyle=this.CloseLineAreaColor;}this.Canvas.fill();};this.DrawCloseLine=function()//收盘价线
3769
3776
  {var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;if(isHScreen){var border=this.ChartBorder.GetHScreenBorder();var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.BottomEx;}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;}var bFirstPoint=true;var drawCount=0;this.Canvas.beginPath();this.Canvas.strokeStyle=this.CloseLineColor;if(IFrameSplitOperator.IsNumber(this.CloseLineWidth))this.Canvas.lineWidth=this.CloseLineWidth;this.ShowRange.Start=this.Data.DataOffset;this.ShowRange.End=this.ShowRange.Start;this.ShowRange.DataCount=0;this.ShowRange.ShowCount=xPointCount;this.DrawKRange.Start=this.Data.DataOffset;var mapBreakPoint=this.BuildBreakPoint();//断点
3770
3777
  var preKItemInfo=null;var prePoint=null;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth,++this.ShowRange.DataCount){var data=this.Data.Data[i];this.ShowRange.End=i;if(!data||data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var yClose=this.GetYFromData(data.Close,false);this.DrawKRange.End=i;this.AddToDaySummary(data);if(data.IsVirtual&&this.PredictionConfig.Enable)//预测数据|虚拟数据
3771
- {this.AryPredictionCache.push({PrePoint:prePoint,Point:{X:x,Y:yClose}});prePoint={X:x,Y:yClose};continue;}if(bFirstPoint){if(isHScreen)this.Canvas.moveTo(yClose,x);else this.Canvas.moveTo(x,yClose);bFirstPoint=false;}else{if(isHScreen)this.Canvas.lineTo(yClose,x);else this.Canvas.lineTo(x,yClose);}++drawCount;prePoint={X:x,Y:yClose};if(this.PriceGap.Enable){var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var kItemInfo={Data:data,Coordinate:{X:x,Low:yLow,High:yHigh,Close:yClose,Open:yOpen,Left:left,Right:right}};if(preKItemInfo){this.CheckPriceGap(kItemInfo);var value=this.IsPriceGap(kItemInfo,preKItemInfo);if(value>0)this.AryPriceGapCache.push({Data:[preKItemInfo,kItemInfo],Type:value});}preKItemInfo=kItemInfo;}//断开点
3778
+ {this.AryPredictionCache.push({PrePoint:prePoint,Point:{X:x,Y:yClose}});prePoint={X:x,Y:yClose};continue;}if(bFirstPoint){if(isHScreen)this.Canvas.moveTo(yClose,x);else this.Canvas.moveTo(x,yClose);bFirstPoint=false;}else{if(isHScreen)this.Canvas.lineTo(yClose,x);else this.Canvas.lineTo(x,yClose);}++drawCount;prePoint={X:x,Y:yClose};if(i==this.Data.Data.length-1)//最后一个点
3779
+ {this.LastPoint={X:x,Y:yClose,KItem:data};}if(this.PriceGap.Enable){var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var kItemInfo={Data:data,Coordinate:{X:x,Low:yLow,High:yHigh,Close:yClose,Open:yOpen,Left:left,Right:right}};if(preKItemInfo){this.CheckPriceGap(kItemInfo);var value=this.IsPriceGap(kItemInfo,preKItemInfo);if(value>0)this.AryPriceGapCache.push({Data:[preKItemInfo,kItemInfo],Type:value});}preKItemInfo=kItemInfo;}//断开点
3772
3780
  if(mapBreakPoint){var kItem=data;var key=this.BuildDateTimeKey(kItem);if(key&&mapBreakPoint.has(key)){if(drawCount>0)this.Canvas.stroke();bFirstPoint=true;drawCount=0;}}}if(drawCount>0)this.Canvas.stroke();};this.DrawKBar=function()//蜡烛头
3773
3781
  {var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var xPointCount=this.ChartFrame.XPointCount;if(isHScreen){var border=this.ChartBorder.GetHScreenBorder();xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;chartright=border.BottomEx;}var ptMax={X:null,Y:null,Value:null,Align:'left'};var ptMin={X:null,Y:null,Value:null,Align:'left'};var upColor=this.UpColor;var downColor=this.DownColor;var unchagneColor=this.UnchagneColor;this.ShowRange.Start=this.Data.DataOffset;this.ShowRange.End=this.ShowRange.Start;this.ShowRange.DataCount=0;this.ShowRange.ShowCount=xPointCount;var ptLast=null;this.DrawKRange.Start=this.Data.DataOffset;var eventUnchangeKLine=null;//定制平盘K线颜色事件
3774
3782
  if(this.GetEventCallback){eventUnchangeKLine=this.GetEventCallback(JSCHART_EVENT_ID.ON_CUSTOM_UNCHANGE_KLINE_COLOR);}var preKItemInfo=null;var prePoint=null;//上一个点的位置
@@ -3920,11 +3928,11 @@ this.TooltipRect.push([i,rect]);//[0]数据索引 [1]数据区域
3920
3928
  this.Canvas.clip();};this.ClipClient=function(isHScreen)//裁剪客户端
3921
3929
  {if(isHScreen==true){var left=this.ChartBorder.GetLeftEx();var right=this.ChartBorder.GetRightEx();var top=this.ChartBorder.GetTop();var bottom=this.ChartBorder.GetBottom();}else{var left=this.ChartBorder.GetLeft();var right=this.ChartBorder.GetRight();var top=this.ChartBorder.GetTopEx();var bottom=this.ChartBorder.GetBottomEx();if(this.ChartBorder.BottomSpace>0)bottom+=1;if(this.DrawType==13)//需要显示文字,裁剪要大点
3922
3930
  {top=this.ChartBorder.GetTopTitle();bottom=this.ChartBorder.GetBottom();}}this.Canvas.beginPath();this.Canvas.rect(left,top,right-left,bottom-top);//this.Canvas.stroke(); //调试用
3923
- this.Canvas.clip();};this.Draw=function(){if(!this.IsShow||this.ChartFrame.IsMinSize||!this.IsVisible)return;if(this.IsShowIndexTitleOnly())return;if(this.IsHideScriptIndex())return;this.ClearDaySummary();this.IsShowOrderText=false;this.TooltipRect=[];this.InfoTooltipRect=[];this.TradeIconTooltipRect=[];this.PtMax={X:null,Y:null,Value:null,Align:'left'};//清空最大
3931
+ this.Canvas.clip();};this.ClearLastPoint=function(){this.LastPoint={};if(this.ChartFrame.GlobalOption){var item=this.ChartFrame.GlobalOption;item.LatestPoint=null;}};this.UpdateGlobalLatestPoint=function(){if(this.Identify!="Main-KLine")return;if(!this.ChartFrame.GlobalOption)return;var item=this.ChartFrame.GlobalOption;if(IFrameSplitOperator.IsNumber(this.LastPoint.X)&&IFrameSplitOperator.IsNumber(this.LastPoint.Y))item.LatestPoint={X:this.LastPoint.X,Y:this.LastPoint.Y};};this.Draw=function(){this.ClearLastPoint();if(!this.IsShow||this.ChartFrame.IsMinSize||!this.IsVisible)return;if(this.IsShowIndexTitleOnly())return;if(this.IsHideScriptIndex())return;this.ClearDaySummary();this.IsShowOrderText=false;this.TooltipRect=[];this.InfoTooltipRect=[];this.TradeIconTooltipRect=[];this.PtMax={X:null,Y:null,Value:null,Align:'left'};//清空最大
3924
3932
  this.PtMin={X:null,Y:null,Value:null,Align:'left'};//清空最小
3925
3933
  this.DrawKRange={Start:null,End:null};this.AryPriceGapCache=[];this.AryPredictionCache=[];this.ChartFrame.ChartKLine={Max:null,Min:null};//保存K线上 显示最大最小值坐标
3926
3934
  this.DrawHeatMap();if(!this.IsShow)return;if(this.ChartFrame.IsMinSize&&this.Name=="Self Kline")return;if(ChartData.IsTickPeriod(this.Period))//分笔图
3927
- {this.Canvas.save();if(this.DrawType==1){this.ClipClient(this.ChartFrame.IsHScreen);this.DrawCloseLine();}else if(this.DrawType==4){this.ClipClient(this.ChartFrame.IsHScreen);this.DrawCloseArea();}else{this.ClipTickClient(this.ChartFrame.IsHScreen);this.DrawTick();}this.Canvas.restore();return;}this.Canvas.save();this.ClipClient(this.ChartFrame.IsHScreen);if(this.DrawType==1){this.DrawCloseLine();this.Canvas.restore();this.DrawPredictionLine();if(this.PriceGap.Enable)this.DrawPriceGap();return;}else if(this.DrawType==2){this.DrawAKLine();}else if(this.DrawType==4){this.DrawCloseArea();}else if(this.DrawType==5){this.DrawOrderFlow();}else if(this.DrawType==7){this.DrawOrderFlow_Style2();}else if(this.DrawType==8){this.DrawOrderFlow_Style3();}else if(this.DrawType==9){this.DrawKBar();}else if(this.DrawType==10){this.DrawRenkoCandle();}else if(this.DrawType==12){this.DrawLineBreak();}else if(this.DrawType==13){this.DrawHighLow();}else if(this.DrawType==14){if(this.FFKChart&&this.FFKChart.Draw){this.FFKChart.Draw(this);}}else if(this.DrawType==15){this.DrawHLCArea();}else if(this.DrawType==16){this.DrawKagi();}else if(this.DrawType==17){this.DrawOrderFlow_Style4();}else if(this.DrawType==18){this.DrawOrderFlow_Style5();}else{this.DrawKBar();}if(this.TradeIcon)this.DrawTradeIcon();else this.DrawTrade();this.Canvas.restore();this.DrawPredictionLine();if(this.PriceGap.Enable)this.DrawPriceGap();if(this.IsShowMaxMinPrice)//标注最大值最小值
3935
+ {this.Canvas.save();if(this.DrawType==1){this.ClipClient(this.ChartFrame.IsHScreen);this.DrawCloseLine();}else if(this.DrawType==4){this.ClipClient(this.ChartFrame.IsHScreen);this.DrawCloseArea();}else{this.ClipTickClient(this.ChartFrame.IsHScreen);this.DrawTick();}this.Canvas.restore();return;}this.Canvas.save();this.ClipClient(this.ChartFrame.IsHScreen);if(this.DrawType==1){this.DrawCloseLine();this.Canvas.restore();this.DrawPredictionLine();if(this.PriceGap.Enable)this.DrawPriceGap();this.UpdateGlobalLatestPoint();return;}else if(this.DrawType==2){this.DrawAKLine();}else if(this.DrawType==4){this.DrawCloseArea();}else if(this.DrawType==5){this.DrawOrderFlow();}else if(this.DrawType==7){this.DrawOrderFlow_Style2();}else if(this.DrawType==8){this.DrawOrderFlow_Style3();}else if(this.DrawType==9){this.DrawKBar();}else if(this.DrawType==10){this.DrawRenkoCandle();}else if(this.DrawType==12){this.DrawLineBreak();}else if(this.DrawType==13){this.DrawHighLow();}else if(this.DrawType==14){if(this.FFKChart&&this.FFKChart.Draw){this.FFKChart.Draw(this);}}else if(this.DrawType==15){this.DrawHLCArea();}else if(this.DrawType==16){this.DrawKagi();}else if(this.DrawType==17){this.DrawOrderFlow_Style4();}else if(this.DrawType==18){this.DrawOrderFlow_Style5();}else{this.DrawKBar();}if(this.TradeIcon)this.DrawTradeIcon();else this.DrawTrade();this.Canvas.restore();this.UpdateGlobalLatestPoint();this.DrawPredictionLine();if(this.PriceGap.Enable)this.DrawPriceGap();if(this.IsShowMaxMinPrice)//标注最大值最小值
3928
3936
  {if(this.ChartFrame.IsHScreen===true)this.HScreenDrawMaxMinPrice(this.PtMax,this.PtMin);else this.DrawMaxMinPrice(this.PtMax,this.PtMin);}if(this.DrawType==14)//自定义图形 标注最大最小值
3929
3937
  {if(this.FFKChart&&this.FFKChart.DrawMaxMinPrice){this.FFKChart.DrawMaxMinPrice();}}this.DrawDaySummary();};this.OnFormatHighLowTitle=function(ptMax,ptMin){if(!ptMax||!ptMin)return null;if(!IFrameSplitOperator.IsNumber(ptMax.Value)||!IFrameSplitOperator.IsNumber(ptMin.Value))return null;var defaultfloatPrecision=GetfloatPrecision(this.Symbol);//小数位数
3930
3938
  var title={High:ptMax.Value.toFixed(defaultfloatPrecision),Low:ptMin.Value.toFixed(defaultfloatPrecision)};if(!this.GetEventCallback)return title;var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_FORMAT_KLINE_HIGH_LOW_TITLE);if(!event||!event.Callback)return title;var data={Max:ptMax,Min:ptMin,Symbol:this.Symbol,Title:{High:title.High,Low:title.Low},Decimal:defaultfloatPrecision,PreventDefault:false};event.Callback(event,data,this);if(data.PreventDefault)return data.Title;//使用外部回调的数值
@@ -5312,8 +5320,9 @@ var yText=subFrame.ChartBorder.GetTopEx()+this.MerginTop;for(var i=0;i<this.Data
5312
5320
  function LatestPointFlashPaint(){this.newMethod=IExtendChartPainting;//派生
5313
5321
  this.newMethod();delete this.newMethod;this.ClassName='LatestPointFlashPaint';this.HQChart;this.Status=0;this.UpdateTime=new Date();this.FlashCount=0;//闪烁次数
5314
5322
  this.Frequency=500;//闪烁频率ms
5315
- this.PointColor=g_JSChartResource.LatestPointFlash.PointColor;this.PointRadius=g_JSChartResource.LatestPointFlash.PointRadius;this.BGColor=g_JSChartResource.LatestPointFlash.BGColor;this.BGRadius=g_JSChartResource.LatestPointFlash.BGRadius;this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;this.FlashCanvas;this.SetOption=function(option){if(this.HQChart){var extraElement=this.HQChart.GetExtraCanvas(JSChart.LatestPointFlashKey);if(extraElement&&extraElement.Canvas)this.FlashCanvas=extraElement.Canvas;//绑定独立的画布
5316
- }if(option){if(IFrameSplitOperator.IsNumber(option.Frequency))this.Frequency=option.Frequency;}};this.ReloadResource=function(resource){this.PointColor=g_JSChartResource.LatestPointFlash.PointColor;this.PointRadius=g_JSChartResource.LatestPointFlash.PointRadius;this.BGColor=g_JSChartResource.LatestPointFlash.BGColor;this.BGRadius=g_JSChartResource.LatestPointFlash.BGRadius;};this.Draw=function(){if(!this.FlashCanvas)return;if(!this.HQChart)return;this.HQChart.ClearCanvas(this.FlashCanvas);if(this.FlashCount<=0)return;if(this.IsStatusChange()){this.Status=(this.Status+1)%2;--this.FlashCount;}if(this.Status==0)return;if(!this.HQChart.GlobalOption||!this.HQChart.GlobalOption.LatestPoint)return;var point=this.HQChart.GlobalOption.LatestPoint;if(!IFrameSplitOperator.IsNumber(point.X)||!IFrameSplitOperator.IsNumber(point.Y))return;this.FlashCanvas.fillStyle=this.BGColor;this.FlashCanvas.beginPath();this.FlashCanvas.arc(point.X,point.Y,this.BGRadius,0,360,false);this.FlashCanvas.fill();this.FlashCanvas.closePath();//画实心圆
5323
+ this.PointColor=g_JSChartResource.LatestPointFlash.PointColor;this.PointRadius=g_JSChartResource.LatestPointFlash.PointRadius;this.BGColor=g_JSChartResource.LatestPointFlash.BGColor;this.BGRadius=g_JSChartResource.LatestPointFlash.BGRadius;this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;this.Style=1;//0=默认配置 1=图形保持一致
5324
+ this.FlashCanvas;this.SetOption=function(option){if(this.HQChart){var extraElement=this.HQChart.GetExtraCanvas(JSChart.LatestPointFlashKey);if(extraElement&&extraElement.Canvas)this.FlashCanvas=extraElement.Canvas;//绑定独立的画布
5325
+ }if(option){if(IFrameSplitOperator.IsNumber(option.Frequency))this.Frequency=option.Frequency;}};this.ReloadResource=function(resource){this.PointColor=g_JSChartResource.LatestPointFlash.PointColor;this.PointRadius=g_JSChartResource.LatestPointFlash.PointRadius;this.BGColor=g_JSChartResource.LatestPointFlash.BGColor;this.BGRadius=g_JSChartResource.LatestPointFlash.BGRadius;};this.GetChartColor=function(){var chart=this.HQChart.ChartPaint[0];if(!chart)return;if(chart.ClassName=="ChartKLine"){this.PointColor=chart.CloseLineColor;this.BGColor=IChartDrawPicture.ColorToRGBA(chart.CloseLineColor,0.6);}else if(chart.ClassName=="ChartMinutePriceLine"){this.PointColor=chart.Color;this.BGColor=IChartDrawPicture.ColorToRGBA(chart.Color,0.6);}};this.Draw=function(){if(!this.FlashCanvas)return;if(!this.HQChart)return;this.HQChart.ClearCanvas(this.FlashCanvas);if(this.FlashCount<=0)return;if(this.IsStatusChange()){this.Status=(this.Status+1)%2;--this.FlashCount;}if(this.Status==0)return;if(!this.HQChart.GlobalOption||!this.HQChart.GlobalOption.LatestPoint)return;var point=this.HQChart.GlobalOption.LatestPoint;if(!IFrameSplitOperator.IsNumber(point.X)||!IFrameSplitOperator.IsNumber(point.Y))return;if(this.Style==1)this.GetChartColor();this.FlashCanvas.fillStyle=this.BGColor;this.FlashCanvas.beginPath();this.FlashCanvas.arc(point.X,point.Y,this.BGRadius,0,360,false);this.FlashCanvas.fill();this.FlashCanvas.closePath();//画实心圆
5317
5326
  this.FlashCanvas.fillStyle=this.PointColor;this.FlashCanvas.beginPath();this.FlashCanvas.arc(point.X,point.Y,this.PointRadius,0,360,false);this.FlashCanvas.fill();this.FlashCanvas.closePath();};this.IsStatusChange=function(){if(!this.UpdateTime){this.UpdateTime=new Date();return true;}var now=new Date();var diffValue=now.getTime()-this.UpdateTime.getTime();if(diffValue<=this.Frequency)return false;this.UpdateTime=now;return true;};}//拖拽效果图
5318
5327
  var JSCHART_DRAGCHART_TYPE_ID={MAIN_KLINE:1,OVERLAY_KLINE:2,MAIN_INDEX:3,OVERLAY_INDEX:4,OVERLAY_MINUTE:5,//叠加走势图
5319
5328
  MAIN_MINUTE:6,//走势图
@@ -7588,7 +7597,19 @@ var kData=this.GetKData();if(!kData||!IFrameSplitOperator.IsNonEmptyArray(kData.
7588
7597
  var start=kData.DataOffset;var bDayPeriod=ChartData.IsDayPeriod(this.Period,true);var findItem=null,dataIndex=-1;for(var i=0;i<kData.Data.length;++i){var item=kData.Data[i];if(!item)continue;if(bDayPeriod){if(item.Date==obj.Start.Date){findItem=item;dataIndex=i;break;}}else{if(item.Date==obj.Start.Date&&item.Time==obj.Start.Time){findItem=item;dataIndex=i;break;}}}if(!findItem)return false;var index=-1;var dataOffset=kData.DataOffset;if(dataIndex>=start&&dataIndex<=start+(showCount-1)){index=dataIndex-start;}else//需要调整当前屏范围
7589
7598
  {if(step>0){if(dataIndex+showCount>=kData.Data.length){dataOffset=kData.Data.length-showCount;index=dataIndex-dataOffset;}else{index=0;dataOffset=dataIndex;}}else{if(dataIndex-showCount<0){dataOffset=0;index=dataIndex;}else if(dataIndex+showCount>=kData.Data.length){dataOffset=kData.Data.length-showCount;index=dataIndex-dataOffset;}else{index=showCount;dataOffset=dataIndex-showCount;}}}var kItem=findItem;if(step>0){for(var i=dataIndex+1,j=0;i<kData.Data.length&&j<step;++i,++j){++index;dataIndex=i;if(index>=showCount-1){index=showCount-1;dataOffset+=1;}var item=kData.Data[i];if(!item)continue;var kItem=item;}}else if(step<0){for(var i=dataIndex-1,j=0;i>=0&&j<Math.abs(step);--i,++j){--index;dataIndex=i;if(index<=0){index=0;dataOffset-=1;}var item=kData.Data[i];if(!item)continue;var kItem=item;}}if(!kItem)return false;obj.KItem=kItem;if(kData.DataOffset==dataOffset){return this.ChartOperator_Temp_SetChartCorssCursor(index,kItem);}else{kData.DataOffset=dataOffset;this.UpdataDataoffset();//更新数据偏移
7590
7599
  this.UpdateFrameMaxMin();//调整坐标最大 最小值
7591
- this.ResetFrameXSplit();this.Frame.SetSizeChage(true);this.Draw();this.ChartOperator_Temp_SetChartCorssCursor(index,kItem);return true;}}};this.ChartOperator_Temp_SetChartCorssCursor=function(index,kItem){if(!this.Frame||!this.Frame.SubFrame[0]||!this.Frame.SubFrame[0].Frame)return false;var frame=this.Frame.SubFrame[0].Frame;var x=frame.GetXFromIndex(index);var y=frame.GetYFromData(kItem.Close);//保存最后一次鼠标移动信息
7600
+ this.ResetFrameXSplit();this.Frame.SetSizeChage(true);this.Draw();this.ChartOperator_Temp_SetChartCorssCursor(index,kItem);return true;}}else if(id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_START)//当前屏第1条数据
7601
+ {var kData=this.GetKData();if(!kData||!IFrameSplitOperator.IsNonEmptyArray(kData.Data))return false;//数据还没有到达
7602
+ var startIndex=kData.DataOffset;var kItem=kData.Data[startIndex];this.ChartOperator_Temp_SetChartCorssCursor(0,kItem);return true;}else if(id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_END)//当前屏最后1条数据
7603
+ {var kData=this.GetKData();if(!kData||!IFrameSplitOperator.IsNonEmptyArray(kData.Data))return false;//数据还没有到达
7604
+ if(!this.Frame||!this.Frame.SubFrame[0]||!this.Frame.SubFrame[0].Frame)return false;var showCount=this.Frame.SubFrame[0].Frame.XPointCount;//一屏显示个数
7605
+ var endIndex=kData.DataOffset+showCount-1;if(endIndex>=kData.Data.length)endIndex=kData.Data.length-1;var kItem=kData.Data[endIndex];var index=endIndex-kData.DataOffset;this.ChartOperator_Temp_SetChartCorssCursor(index,kItem);return true;}else if(id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_START){var kData=this.GetKData();if(!kData||!IFrameSplitOperator.IsNonEmptyArray(kData.Data))return false;//数据还没有到达
7606
+ var kItem=kData.Data[0];if(kData.DataOffset!=0){kData.DataOffset=0;this.UpdataDataoffset();//更新数据偏移
7607
+ this.UpdateFrameMaxMin();//调整坐标最大 最小值
7608
+ this.ResetFrameXSplit();this.Frame.SetSizeChage(true);this.Draw();this.ChartOperator_Temp_SetChartCorssCursor(0,kItem);}else{this.ChartOperator_Temp_SetChartCorssCursor(0,kItem);}return true;}else if(id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_END){var kData=this.GetKData();if(!kData||!IFrameSplitOperator.IsNonEmptyArray(kData.Data))return false;//数据还没有到达
7609
+ var kItem=kData.Data[kData.Data.length-1];if(!this.Frame||!this.Frame.SubFrame[0]||!this.Frame.SubFrame[0].Frame)return false;var showCount=this.Frame.SubFrame[0].Frame.XPointCount;//一屏显示个数
7610
+ var dataOffset=kData.Data.length-showCount;if(kData.DataOffset<dataOffset){kData.DataOffset=dataOffset;var index=kData.Data.length-kData.DataOffset-1;this.UpdataDataoffset();//更新数据偏移
7611
+ this.UpdateFrameMaxMin();//调整坐标最大 最小值
7612
+ this.ResetFrameXSplit();this.Frame.SetSizeChage(true);this.Draw();this.ChartOperator_Temp_SetChartCorssCursor(index,kItem);}else{var index=kData.Data.length-kData.DataOffset-1;this.ChartOperator_Temp_SetChartCorssCursor(index,kItem);}return true;}};this.ChartOperator_Temp_SetChartCorssCursor=function(index,kItem){if(!this.Frame||!this.Frame.SubFrame[0]||!this.Frame.SubFrame[0].Frame)return false;var frame=this.Frame.SubFrame[0].Frame;var x=frame.GetXFromIndex(index);var y=frame.GetYFromData(kItem.Close);//保存最后一次鼠标移动信息
7592
7613
  var MoveStatus={X:x,Y:y,IsInClient:this.IsMouseOnClient(x,y)};this.LastMouseStatus.OnMouseMove=MoveStatus;this.LastMouseStatus.MoveOnPoint={X:x,Y:y};//鼠标移动的位置
7593
7614
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_MOUSE_MOVE);var titleChart=this.TitlePaint[0];if(event&&titleChart)titleChart.OnMouseMoveEvent=event;var pixelTatio=GetDevicePixelRatio();var e={};e.clientX=x/pixelTatio+this.UIElement.getBoundingClientRect().left;e.clientY=y/pixelTatio+this.UIElement.getBoundingClientRect().top;this.MoveOnPoint={X:x,Y:y};this.OnMouseMove(x,y,e);this.LastMouseStatus.MoveOnPoint=null;if(titleChart)titleChart.OnMouseMoveEvent=null;return true;};//内部函数
7594
7615
  this.ChartOperator_Temp_GetHistoryData=function(){var hisData=null;if(!this.Frame.Data)hisData=this.Frame.Data;else hisData=this.Frame.SubFrame[0].Frame.Data;if(!hisData)return null;//数据还没有到达
@@ -7623,6 +7644,8 @@ for(var i in this.Frame.SubFrame){var titlePaint=new DynamicChartTitlePainting()
7623
7644
  if(!data.Tooltip||!data.Chart)return;var pixelRatio=GetDevicePixelRatio();var rtClient=this.UIElement.getBoundingClientRect();var rtScroll=GetScrollPosition();x+=rtClient.left+rtScroll.Left;y+=rtClient.top+rtScroll.Top;var item=data.Tooltip.Data;var date=item.Date;var symbol=null;if(data.Tooltip.ChartPaint&&data.Tooltip.ChartPaint.Name=="DRAWKLINE"){if(item.Symbol)symbol=item.Symbol;else if(data.Tooltip.Symbol)symbol=data.Tooltip.Symbol;}else{symbol=data.Chart.Symbol;}if(!symbol)return;this.PopMinuteChart.Show({Date:date,Symbol:symbol,Data:data.Tooltip.Data,Chart:data.Tooltip.ChartPaint},x/pixelRatio,y/pixelRatio);};//Alt+W 区间统计
7624
7645
  //Alt+数字 切换多个窗口
7625
7646
  //Ctrl+I
7647
+ //HOME / END 当前屏 第1条 最后一条
7648
+ //Ctrl+HOME / Ctrl+END 第1条 最后一条
7626
7649
  this.OnCustomKeyDown=function(keyID,e)//自定义键盘事件
7627
7650
  {if(keyID==37&&e.ctrlKey)//Ctrl+Left
7628
7651
  {this.MoveCorssCursorLeft(this.CtrlMoveStep);return true;}else if(keyID==39&&e.ctrlKey)//Ctrl+Right
@@ -7631,7 +7654,11 @@ this.OnCustomKeyDown=function(keyID,e)//自定义键盘事件
7631
7654
  {this.MoveKLineRight(this.ShiftMoveStep);return true;}else if(keyID==38&&e.shiftKey)//shift+up 上移十字光标
7632
7655
  {this.MoveCorssCursorUp(this.ShiftUpDownStepPixel);return true;}else if(keyID==40&&e.shiftKey)//shift+down 下移十字光标
7633
7656
  {this.MoveCorssCursorDown(this.ShiftUpDownStepPixel);return true;}else if(keyID==13)//回车显示分时图
7634
- {this.OnEnterKeyDown();}else{return false;}};this.MoveKLineLeft=function(value){return this.MoveKLine(-value);};this.MoveKLineRight=function(value){return this.MoveKLine(value);};this.MoveKLine=function(step){if(step==0)return;var oneStepWidth=this.GetMoveOneStepWidth();var moveSetp=step*oneStepWidth;var bLeft=true;if(step<0){moveSetp=Math.abs(step)*oneStepWidth;bLeft=false;}if(!this.DataMove(moveSetp,bLeft))return;this.UpdataDataoffset();this.RepairCursorIndex();this.UpdatePointByCursorIndex();//推拽数据的时候不需要把鼠标位置更新到K线上
7657
+ {this.OnEnterKeyDown();}else if(keyID==36)//HOME 第1条
7658
+ {var option=null;if(e.ctrlKey)option={ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_START};//所有数据的第1条数据
7659
+ else option={ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_START};if(option)this.ChartOperator(option);}else if(keyID==35)//END 最后一条
7660
+ {var option=null;if(e.ctrlKey)option={ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_END};//所有数据的最后1条数据
7661
+ else option={ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_END};if(option)this.ChartOperator(option);}else{return false;}};this.MoveKLineLeft=function(value){return this.MoveKLine(-value);};this.MoveKLineRight=function(value){return this.MoveKLine(value);};this.MoveKLine=function(step){if(step==0)return;var oneStepWidth=this.GetMoveOneStepWidth();var moveSetp=step*oneStepWidth;var bLeft=true;if(step<0){moveSetp=Math.abs(step)*oneStepWidth;bLeft=false;}if(!this.DataMove(moveSetp,bLeft))return;this.UpdataDataoffset();this.RepairCursorIndex();this.UpdatePointByCursorIndex();//推拽数据的时候不需要把鼠标位置更新到K线上
7635
7662
  this.UpdateFrameMaxMin();this.ResetFrameXYSplit();this.Draw();this.ShowTooltipByKeyDown();this.OnKLinePageChange("datamove");};//修复 当前数据索引大于数据个数的请求
7636
7663
  this.RepairCursorIndex=function(){var kData=this.GetKData();if(!kData)return;var xPointcount=0;if(this.Frame.XPointCount)xPointcount=this.Frame.XPointCount;else xPointcount=this.Frame.SubFrame[0].Frame.XPointCount;if(!IFrameSplitOperator.IsPlusNumber(xPointcount))return;if(this.CursorIndex<0)this.CursorIndex=0;var index=this.CursorIndex;index=parseInt(index.toFixed(0));if(index+kData.DataOffset>=kData.Data.length){this.CursorIndex=kData.Data.length-1-kData.DataOffset;}};this.MoveCorssCursorLeft=function(step){var data=null;if(this.Frame.Data)data=this.Frame.Data;else data=this.Frame.SubFrame[0].Frame.Data;if(!data)return;if(data.DataOffset<=0&&this.CursorIndex<=0)//数据到头了
7637
7664
  {if(this.DragDownloadData)this.DragDownloadData();return;}if(this.CursorIndex-step<0)//当前屏到头了
@@ -7908,7 +7935,8 @@ var lastDataCount=this.GetHistoryDataCount();//保存下上一次的数据个数
7908
7935
  if(this.SourceData.Data.length==0)//第1条数据
7909
7936
  {var newItem=new HistoryData();HistoryData.CopyTo(newItem,realtimeData);this.SourceData.Data.push(newItem);}else if(item.Date==realtimeData.Date)//实时行情数据更新
7910
7937
  {JSConsole.Chart.Log('[KLineChartContainer::RecvRealtimeData] update kline by realtime data',realtimeData);HistoryData.CopyTo(item,realtimeData);}else if(item.Date<realtimeData.Date)//新增加数据
7911
- {JSConsole.Chart.Log('[KLineChartContainer::RecvRealtimeData] insert kline by realtime data',realtimeData);var newItem=new HistoryData();HistoryData.CopyTo(newItem,realtimeData);if(!IFrameSplitOperator.IsNumber(newItem.YClose)&&this.SourceData.Data.length>0)newItem.YClose=this.SourceData.Data[this.SourceData.Data.length-1].YClose;this.SourceData.Data.push(newItem);}else{var bFind=false;var aryKData=this.SourceData.Data;for(var i=aryKData.length-1;i>=0;--i){var kItem=aryKData[i];if(kItem.Date==realtimeData.Date){HistoryData.CopyTo(kItem,realtimeData);bFind=true;break;}}if(!bFind)return;}var bindData=new ChartData();bindData.Data=this.SourceData.Data;bindData.Period=this.Period;bindData.Right=this.Right;bindData.DataType=this.SourceData.DataType;bindData.Symbol=this.Symbol;if(bindData.Right>0&&ChartData.IsDayPeriod(bindData.Period,true)&&MARKET_SUFFIX_NAME.IsSHSZStockA(this.Symbol)&&!this.IsApiPeriod)//复权(A股日线数据才复权)
7938
+ {JSConsole.Chart.Log('[KLineChartContainer::RecvRealtimeData] insert kline by realtime data',realtimeData);var newItem=new HistoryData();HistoryData.CopyTo(newItem,realtimeData);if(!IFrameSplitOperator.IsNumber(newItem.YClose)&&this.SourceData.Data.length>0)newItem.YClose=this.SourceData.Data[this.SourceData.Data.length-1].YClose;this.SourceData.Data.push(newItem);}else{var bFind=false;var aryKData=this.SourceData.Data;for(var i=aryKData.length-1;i>=0;--i){var kItem=aryKData[i];if(kItem.Date==realtimeData.Date){HistoryData.CopyTo(kItem,realtimeData);bFind=true;break;}}if(!bFind)return;}if(data.LatestPointFlash)//最新数据闪烁
7939
+ {var item=data.LatestPointFlash;if(IFrameSplitOperator.IsNumber(item.FlashCount))this.SetLatestPointFlash(item.FlashCount);}var bindData=new ChartData();bindData.Data=this.SourceData.Data;bindData.Period=this.Period;bindData.Right=this.Right;bindData.DataType=this.SourceData.DataType;bindData.Symbol=this.Symbol;if(bindData.Right>0&&ChartData.IsDayPeriod(bindData.Period,true)&&MARKET_SUFFIX_NAME.IsSHSZStockA(this.Symbol)&&!this.IsApiPeriod)//复权(A股日线数据才复权)
7912
7940
  {var rightData=bindData.GetRightData(bindData.Right,{AlgorithmType:this.RightFormula});bindData.Data=rightData;}if(!this.IsApiPeriod){if(ChartData.IsDayPeriod(bindData.Period,false)||ChartData.IsMinutePeriod(bindData.Period,false))//周期数据 (0= 日线,4=1分钟线 不需要处理)
7913
7941
  {var periodData=bindData.GetPeriodData(bindData.Period);bindData.Data=periodData;}}var kLineCalculate=this.GetKLineCalulate();if(kLineCalculate)//额外的K线图形计算
7914
7942
  {var newBindData=kLineCalculate.RecvHistoryData(bindData,{Symbol:this.Symbol,Function:"RecvRealtimeData"});bindData=newBindData;this.FlowCapitalReady=true;}this.UpdateMainData(bindData,lastDataCount);//更新主图数据
@@ -13094,7 +13122,7 @@ this.DrawItemTextV2(drawInfo,rtItem);}else{this.DrawItemText(text,textColor,text
13094
13122
  var tooltipData=(0,_defineProperty3.default)({Rect:rtItem,Data:data,Index:dataIndex,Column:item,Type:drawInfo.Tooltip.Type},'Data',drawInfo.Tooltip.Data);this.TooltipRect.push(tooltipData);}else if(item.ChartTooltip&&item.ChartTooltip.Enable&&IFrameSplitOperator.IsNumber(item.ChartTooltip.Type))//Type 20分时图 21K线图
13095
13123
  {var tooltipData={Rect:rtItem,Data:data,Index:dataIndex,Column:item,Type:item.ChartTooltip.Type};this.TooltipRect.push(tooltipData);}left+=item.Width;}};this.FormatReserveNumber=function(column,data,drawInfo){if(column.DefaultText)drawInfo.Text=column.DefaultText;var fieldName=MAP_DEAL_COLUMN_FIELD.get(column.Type);if(!data||!fieldName)return;var value=data[fieldName];if(!IFrameSplitOperator.IsNumber(value))return;if(IFrameSplitOperator.IsNumber(column.ColorType)){if(column.ColorType==1){drawInfo.TextColor=this.GetUpDownColor(value,0);}else if(column.ColorType==2){drawInfo.TextColor=this.GetUpDownColorV2(value,0);}}var text=value.toFixed(column.FloatPrecision);if(column.Format&&IFrameSplitOperator.IsNumber(column.Format.Type)){var format=column.Format;switch(format.Type){case 1://原始数据
13096
13124
  text=value.toFixed(column.FloatPrecision);break;case 2://千分位分割
13097
- text=IFrameSplitOperator.FormatValueThousandsString(value,column.FloatPrecision);break;case 3:var exfloatPrecision=1;if(IFrameSplitOperator.IsNumber(format.ExFloatPrecision))exfloatPrecision=format.ExFloatPrecision;text=IFrameSplitOperator.FormatValueStringV2(value,column.FloatPrecision,exfloatPrecision);break;}}drawInfo.Text=text;};this.FormatReserveString=function(column,data,drawInfo){if(column.DefaultText)drawInfo.Text=column.DefaultText;var fieldName=MAP_DEAL_COLUMN_FIELD.get(column.Type);if(!data||!fieldName)return;var item=data[fieldName];if(IFrameSplitOperator.IsObject(item)){if(item.Text)drawInfo.Text=item.Text;if(item.TextColor)drawInfo.TextColor=item.TextColor;if(item.BGColor)drawInfo.BGColor=item.BGColor;}else if(IFrameSplitOperator.IsString(item)){drawInfo.Text=item;}if(item&&item.Tooltip&&IFrameSplitOperator.IsNonEmptyArray(item.Tooltip.AryText)){drawInfo.Tooltip={Type:2,Data:{AryText:item.Tooltip.AryText}};}};this.GetUpDownColor=function(price,price2){if(price>price2)return this.UpColor;else if(price<price2)return this.DownColor;else return this.UnchangeColor;};this.GetUpDownColorV2=function(price,price2){if(price>=price2)return this.UpColor;else return this.DownColor;};this.DrawSelectedRow=function(data,index,rtRow){if(!this.SelectedData)return false;if(!this.SelectedData.Enable)return false;if(!this.SelectedData.Guid||this.SelectedData.Guid!=data.Guid)return false;if(this.SelectedStyle==1){this.Canvas.fillStyle=this.SelectedConfig.BGColor;this.Canvas.fillRect(rtRow.Left,rtRow.Top,rtRow.Width,rtRow.Height);}return true;};this.DrawItemText=function(text,textColor,textAlign,left,top,width){var x=left;if(textAlign=='center'){x=left+width/2;this.Canvas.textAlign="center";}else if(textAlign=='right'){x=left+width;this.Canvas.textAlign="right";}else{this.Canvas.textAlign="left";}this.Canvas.textBaseline="bottom";this.Canvas.fillStyle=textColor;if(text)this.Canvas.fillText(text,x,top+this.RowHeight-2);};this.DrawItemTextV2=function(drawInfo,rtItem){if(drawInfo.BGColor){this.Canvas.fillStyle=drawInfo.BGColor;this.Canvas.fillRect(rtItem.Left,rtItem.Top,rtItem.Width,rtItem.Height);}if(drawInfo.Text){var text=drawInfo.Text;var x=rtItem.Left;if(drawInfo.TextAlign=='center'){x=rtItem.Left+rtItem.Width/2;this.Canvas.textAlign="center";}else if(drawInfo.TextAlign=='right'){x=rtItem.Left+rtItem.Width-2;this.Canvas.textAlign="right";}else{x+=2;this.Canvas.textAlign="left";}var textWidth=this.Canvas.measureText(text).width+1;this.Canvas.textBaseline="bottom";this.Canvas.fillStyle=drawInfo.TextColor;this.Canvas.fillText(text,x,rtItem.Top+this.RowHeight-2);}};this.DrawMultiBar=function(colunmInfo,data,rtItem){if(!data.Source||!IFrameSplitOperator.IsNonEmptyArray(data.Source))return false;var barData=data.Source[colunmInfo.DataIndex];//{ Value:[0.4,0,2], Color:[0,1] };
13125
+ text=IFrameSplitOperator.FormatValueThousandsString(value,column.FloatPrecision);break;case 3:var exfloatPrecision=1;if(IFrameSplitOperator.IsNumber(format.ExFloatPrecision))exfloatPrecision=format.ExFloatPrecision;text=IFrameSplitOperator.FormatValueStringV2(value,column.FloatPrecision,exfloatPrecision);break;}}drawInfo.Text=text;};this.FormatReserveString=function(column,data,drawInfo){if(column.DefaultText)drawInfo.Text=column.DefaultText;var fieldName=MAP_DEAL_COLUMN_FIELD.get(column.Type);if(!data||!fieldName)return;var item=data[fieldName];if(IFrameSplitOperator.IsObject(item)){if(item.Text)drawInfo.Text=item.Text;if(item.TextColor)drawInfo.TextColor=item.TextColor;if(item.BGColor)drawInfo.BGColor=item.BGColor;}else if(IFrameSplitOperator.IsString(item)){drawInfo.Text=item;}if(item&&item.Tooltip&&IFrameSplitOperator.IsNonEmptyArray(item.Tooltip.AryText)){drawInfo.Tooltip={Type:2,Data:{AryText:item.Tooltip.AryText}};}};this.GetUpDownColor=function(price,price2){if(price>price2)return this.UpColor;else if(price<price2)return this.DownColor;else return this.UnchangeColor;};this.GetUpDownColorV2=function(price,price2){if(price>=price2)return this.UpColor;else return this.DownColor;};this.DrawSelectedRow=function(data,index,rtRow){if(!this.SelectedData)return false;if(!this.SelectedData.Enable)return false;if(!this.SelectedData.Guid||this.SelectedData.Guid!=data.Guid)return false;if(this.SelectedStyle==1){this.Canvas.fillStyle=this.SelectedConfig.BGColor;this.Canvas.fillRect(rtRow.Left+1,rtRow.Top+1,rtRow.Width-2,rtRow.Height-2);}return true;};this.DrawItemText=function(text,textColor,textAlign,left,top,width){var x=left;if(textAlign=='center'){x=left+width/2;this.Canvas.textAlign="center";}else if(textAlign=='right'){x=left+width;this.Canvas.textAlign="right";}else{this.Canvas.textAlign="left";}this.Canvas.textBaseline="bottom";this.Canvas.fillStyle=textColor;if(text)this.Canvas.fillText(text,x,top+this.RowHeight-2);};this.DrawItemTextV2=function(drawInfo,rtItem){if(drawInfo.BGColor){this.Canvas.fillStyle=drawInfo.BGColor;this.Canvas.fillRect(rtItem.Left,rtItem.Top,rtItem.Width,rtItem.Height);}if(drawInfo.Text){var text=drawInfo.Text;var x=rtItem.Left;if(drawInfo.TextAlign=='center'){x=rtItem.Left+rtItem.Width/2;this.Canvas.textAlign="center";}else if(drawInfo.TextAlign=='right'){x=rtItem.Left+rtItem.Width-2;this.Canvas.textAlign="right";}else{x+=2;this.Canvas.textAlign="left";}var textWidth=this.Canvas.measureText(text).width+1;this.Canvas.textBaseline="bottom";this.Canvas.fillStyle=drawInfo.TextColor;this.Canvas.fillText(text,x,rtItem.Top+this.RowHeight-2);}};this.DrawMultiBar=function(colunmInfo,data,rtItem){if(!data.Source||!IFrameSplitOperator.IsNonEmptyArray(data.Source))return false;var barData=data.Source[colunmInfo.DataIndex];//{ Value:[0.4,0,2], Color:[0,1] };
13098
13126
  if(!barData)return false;if(!IFrameSplitOperator.IsNonEmptyArray(barData.Value))return false;var width=rtItem.Width-this.BarMergin.Left-this.BarMergin.Right;var left=rtItem.Left+this.BarMergin.Left;var top=rtItem.Top+this.RowMergin.Top+this.BarMergin.Top;var height=rtItem.Height-this.RowMergin.Top-this.RowMergin.Bottom-this.BarMergin.Top-this.BarMergin.Bottom;var right=left+width;for(var i=0;i<barData.Value.length;++i){var value=barData.Value[i];if(value<=0)continue;if(left>=right)break;var barWidth=width*value;if(barWidth<1)barWidth=1;if(left+barWidth>right)barWidth=right-left;var colorIndex=i;if(IFrameSplitOperator.IsNonEmptyArray(barData.Color)&&i<barData.Color.length)colorIndex=barData.Color[i];this.Canvas.fillStyle=g_JSChartResource.DealList.FieldColor.Bar[colorIndex];this.Canvas.fillRect(left,top,barWidth,height);left+=barWidth;}return true;};this.DrawCenterBar=function(colunmInfo,data,rtItem){if(!data.Source||!IFrameSplitOperator.IsNonEmptyArray(data.Source))return false;var barData=data.Source[colunmInfo.DataIndex];//{ Value:[0.4,0,2], Color:[0,1] };
13099
13127
  if(!barData)return false;if(!IFrameSplitOperator.IsNonEmptyArray(barData.Value))return false;var width=(rtItem.Width-this.BarMergin.Left-this.BarMergin.Right)/2;var left=rtItem.Left+this.BarMergin.Left;var center=left+width;var top=rtItem.Top+this.RowMergin.Top+this.BarMergin.Top;var height=rtItem.Height-this.RowMergin.Top-this.RowMergin.Bottom-this.BarMergin.Top-this.BarMergin.Bottom;var right=left+width;for(var i=0;i<barData.Value.length&&i<2;++i){var value=barData.Value[i];if(value<=0)continue;if(value>1)value=1;var barWidth=width*value;if(barWidth<1)barWidth=1;var colorIndex=i;if(IFrameSplitOperator.IsNonEmptyArray(barData.Color)&&i<barData.Color.length)colorIndex=barData.Color[i];this.Canvas.fillStyle=g_JSChartResource.DealList.FieldColor.Bar[colorIndex];if(i==0)//左边
13100
13128
  {this.Canvas.fillRect(center,top,-barWidth,height);}else//右边
@@ -15050,7 +15078,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
15050
15078
  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);};}/********************************************************************************
15051
15079
  * 版本信息输出
15052
15080
  *
15053
- */var HQCHART_VERSION="1.1.14850";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();//把给外界调用的方法暴露出来
15081
+ */var HQCHART_VERSION="1.1.14854";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();//把给外界调用的方法暴露出来
15054
15082
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
15055
15083
  // BaseIndex:BaseIndex,
15056
15084
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.14851",
3
+ "version": "1.1.14855",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -2020,7 +2020,7 @@ function ChartDealList()
2020
2020
  if ( this.SelectedStyle==1)
2021
2021
  {
2022
2022
  this.Canvas.fillStyle=this.SelectedConfig.BGColor;
2023
- this.Canvas.fillRect(rtRow.Left,rtRow.Top, rtRow.Width, rtRow.Height);
2023
+ this.Canvas.fillRect(rtRow.Left+1,rtRow.Top+1, rtRow.Width-2, rtRow.Height-2);
2024
2024
  }
2025
2025
 
2026
2026
  return true;
@@ -787,6 +787,17 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
787
787
 
788
788
  this.AdjustTitleHeight(chart);
789
789
 
790
+ if (option.LatestPointFlash)
791
+ {
792
+ var item=option.LatestPointFlash;
793
+ if (item.Enable)
794
+ {
795
+ this.CreateExtraCanvasElement(JSChart.LatestPointFlashKey, { ZIndex:6 });
796
+ chart.CreateExtendChart("LatestPointFlashPaint", item);
797
+ chart.StartLatestPointFlash();
798
+ }
799
+ }
800
+
790
801
  return chart;
791
802
  }
792
803
 
@@ -2834,6 +2845,12 @@ var JSCHART_OPERATOR_ID=
2834
2845
  OP_GOTO_BY_DATAINDEX:17, //的移动到某一个数据起始位置
2835
2846
 
2836
2847
  OP_MOVE_CORSSCURSOR:18, //移动十字光标 { Step, Start:{ Date:, Time: } }
2848
+
2849
+ OP_CORSSCURSOR_PAGE_START:19, //当前屏第1条数据
2850
+ OP_CORSSCURSOR_PAGE_END:20, //当前屏最后1条数据
2851
+
2852
+ OP_CORSSCURSOR_DATA_START:21, //所有数据的第1条数据
2853
+ OP_CORSSCURSOR_DATA_END:22, //所有数据的最后1条数据
2837
2854
  }
2838
2855
 
2839
2856
  var JSCHART_DRAG_ID=
@@ -7783,6 +7800,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7783
7800
  }
7784
7801
  break;
7785
7802
  case 13: //回车
7803
+ case 35: //END
7804
+ case 36: //HOME
7786
7805
  if (this.OnCustomKeyDown) this.OnCustomKeyDown(keyID, e);
7787
7806
  break;
7788
7807
  default:
@@ -27235,6 +27254,8 @@ function ChartKLine()
27235
27254
  LeftMargin:g_JSChartResource.DaySummaryKLine.LeftMargin,
27236
27255
  }
27237
27256
 
27257
+ this.LastPoint={ }; //最后一个点的信息 {X, Y, KItem:, Date:, Time: }
27258
+
27238
27259
  this.AddToDaySummary=function(kItem)
27239
27260
  {
27240
27261
  if (!this.DaySummary.Enable) return false;
@@ -27738,6 +27759,8 @@ function ChartKLine()
27738
27759
  if (i==this.Data.Data.length-1)
27739
27760
  {
27740
27761
  ptLast={ X:x, Y:yClose, XLeft:left, XRight:right, KItem:data, ChartRight:chartright };
27762
+
27763
+ this.LastPoint={ X:x, Y:yClose, KItem:data };
27741
27764
  }
27742
27765
 
27743
27766
  if (this.PriceGap.Enable )
@@ -27871,6 +27894,11 @@ function ChartKLine()
27871
27894
 
27872
27895
  prePoint={ X:x, Y:yClose};
27873
27896
 
27897
+ if (i==this.Data.Data.length-1) //最后一个点
27898
+ {
27899
+ this.LastPoint={ X:x, Y:yClose, KItem:data };
27900
+ }
27901
+
27874
27902
  if (this.PriceGap.Enable)
27875
27903
  {
27876
27904
  var yLow=this.GetYFromData(data.Low, false);
@@ -29834,8 +29862,29 @@ function ChartKLine()
29834
29862
  this.Canvas.clip();
29835
29863
  }
29836
29864
 
29865
+ this.ClearLastPoint=function()
29866
+ {
29867
+ this.LastPoint={ };
29868
+ if (this.ChartFrame.GlobalOption)
29869
+ {
29870
+ var item=this.ChartFrame.GlobalOption;
29871
+ item.LatestPoint=null;
29872
+ }
29873
+ }
29874
+
29875
+ this.UpdateGlobalLatestPoint=function()
29876
+ {
29877
+ if (this.Identify!="Main-KLine") return;
29878
+ if (!this.ChartFrame.GlobalOption) return;
29879
+
29880
+ var item=this.ChartFrame.GlobalOption;
29881
+ if (IFrameSplitOperator.IsNumber(this.LastPoint.X) && IFrameSplitOperator.IsNumber(this.LastPoint.Y))
29882
+ item.LatestPoint={ X:this.LastPoint.X, Y:this.LastPoint.Y };
29883
+ }
29884
+
29837
29885
  this.Draw=function()
29838
29886
  {
29887
+ this.ClearLastPoint();
29839
29888
  if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
29840
29889
  if (this.IsShowIndexTitleOnly()) return;
29841
29890
  if (this.IsHideScriptIndex()) return;
@@ -29892,6 +29941,7 @@ function ChartKLine()
29892
29941
  this.Canvas.restore();
29893
29942
  this.DrawPredictionLine();
29894
29943
  if (this.PriceGap.Enable) this.DrawPriceGap();
29944
+ this.UpdateGlobalLatestPoint();
29895
29945
  return;
29896
29946
  }
29897
29947
  else if (this.DrawType==2)
@@ -29963,6 +30013,8 @@ function ChartKLine()
29963
30013
 
29964
30014
  this.Canvas.restore();
29965
30015
 
30016
+ this.UpdateGlobalLatestPoint();
30017
+
29966
30018
  this.DrawPredictionLine();
29967
30019
  if (this.PriceGap.Enable) this.DrawPriceGap();
29968
30020
 
@@ -52066,6 +52118,7 @@ function LatestPointFlashPaint()
52066
52118
  this.BGColor=g_JSChartResource.LatestPointFlash.BGColor;
52067
52119
  this.BGRadius=g_JSChartResource.LatestPointFlash.BGRadius;
52068
52120
  this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
52121
+ this.Style=1; //0=默认配置 1=图形保持一致
52069
52122
  this.FlashCanvas;
52070
52123
 
52071
52124
  this.SetOption=function(option)
@@ -52090,6 +52143,23 @@ function LatestPointFlashPaint()
52090
52143
  this.BGRadius=g_JSChartResource.LatestPointFlash.BGRadius;
52091
52144
  }
52092
52145
 
52146
+ this.GetChartColor=function()
52147
+ {
52148
+ var chart=this.HQChart.ChartPaint[0];
52149
+ if (!chart) return;
52150
+
52151
+ if (chart.ClassName=="ChartKLine")
52152
+ {
52153
+ this.PointColor=chart.CloseLineColor;
52154
+ this.BGColor=IChartDrawPicture.ColorToRGBA(chart.CloseLineColor, 0.6);
52155
+ }
52156
+ else if (chart.ClassName=="ChartMinutePriceLine")
52157
+ {
52158
+ this.PointColor=chart.Color;
52159
+ this.BGColor=IChartDrawPicture.ColorToRGBA(chart.Color, 0.6);
52160
+ }
52161
+ }
52162
+
52093
52163
  this.Draw=function()
52094
52164
  {
52095
52165
  if (!this.FlashCanvas) return;
@@ -52108,6 +52178,8 @@ function LatestPointFlashPaint()
52108
52178
  var point=this.HQChart.GlobalOption.LatestPoint;
52109
52179
  if (!IFrameSplitOperator.IsNumber(point.X) || !IFrameSplitOperator.IsNumber(point.Y)) return;
52110
52180
 
52181
+ if (this.Style==1) this.GetChartColor();
52182
+
52111
52183
  this.FlashCanvas.fillStyle=this.BGColor;
52112
52184
  this.FlashCanvas.beginPath();
52113
52185
  this.FlashCanvas.arc(point.X,point.Y,this.BGRadius,0,360,false);
@@ -80103,6 +80175,80 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
80103
80175
  return true;
80104
80176
  }
80105
80177
  }
80178
+ else if (id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_START) //当前屏第1条数据
80179
+ {
80180
+ var kData=this.GetKData();
80181
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false; //数据还没有到达
80182
+ var startIndex=kData.DataOffset;
80183
+ var kItem=kData.Data[startIndex];
80184
+ this.ChartOperator_Temp_SetChartCorssCursor(0, kItem);
80185
+ return true;
80186
+ }
80187
+ else if (id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_END) //当前屏最后1条数据
80188
+ {
80189
+ var kData=this.GetKData();
80190
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false; //数据还没有到达
80191
+ if (!this.Frame || !this.Frame.SubFrame[0] || !this.Frame.SubFrame[0].Frame) return false;
80192
+ var showCount=this.Frame.SubFrame[0].Frame.XPointCount; //一屏显示个数
80193
+ var endIndex=kData.DataOffset+showCount-1;
80194
+ if (endIndex>=kData.Data.length) endIndex=kData.Data.length-1;
80195
+ var kItem=kData.Data[endIndex];
80196
+ var index=endIndex-kData.DataOffset;
80197
+ this.ChartOperator_Temp_SetChartCorssCursor(index, kItem);
80198
+ return true;
80199
+ }
80200
+ else if (id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_START)
80201
+ {
80202
+ var kData=this.GetKData();
80203
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false; //数据还没有到达
80204
+ var kItem=kData.Data[0];
80205
+
80206
+ if (kData.DataOffset!=0)
80207
+ {
80208
+ kData.DataOffset=0
80209
+ this.UpdataDataoffset(); //更新数据偏移
80210
+ this.UpdateFrameMaxMin(); //调整坐标最大 最小值
80211
+ this.ResetFrameXSplit();
80212
+ this.Frame.SetSizeChage(true);
80213
+ this.Draw();
80214
+ this.ChartOperator_Temp_SetChartCorssCursor(0, kItem);
80215
+ }
80216
+ else
80217
+ {
80218
+ this.ChartOperator_Temp_SetChartCorssCursor(0, kItem);
80219
+ }
80220
+
80221
+ return true;
80222
+ }
80223
+ else if (id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_END)
80224
+ {
80225
+ var kData=this.GetKData();
80226
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false; //数据还没有到达
80227
+
80228
+ var kItem=kData.Data[kData.Data.length-1];
80229
+ if (!this.Frame || !this.Frame.SubFrame[0] || !this.Frame.SubFrame[0].Frame) return false;
80230
+ var showCount=this.Frame.SubFrame[0].Frame.XPointCount; //一屏显示个数
80231
+ var dataOffset=kData.Data.length-showCount;
80232
+
80233
+ if (kData.DataOffset<dataOffset)
80234
+ {
80235
+ kData.DataOffset=dataOffset;
80236
+ var index=kData.Data.length-kData.DataOffset-1;
80237
+ this.UpdataDataoffset(); //更新数据偏移
80238
+ this.UpdateFrameMaxMin(); //调整坐标最大 最小值
80239
+ this.ResetFrameXSplit();
80240
+ this.Frame.SetSizeChage(true);
80241
+ this.Draw();
80242
+ this.ChartOperator_Temp_SetChartCorssCursor(index, kItem);
80243
+ }
80244
+ else
80245
+ {
80246
+ var index=kData.Data.length-kData.DataOffset-1;
80247
+ this.ChartOperator_Temp_SetChartCorssCursor(index, kItem);
80248
+ }
80249
+
80250
+ return true;
80251
+ }
80106
80252
  }
80107
80253
 
80108
80254
 
@@ -80463,6 +80609,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
80463
80609
  //Alt+W 区间统计
80464
80610
  //Alt+数字 切换多个窗口
80465
80611
  //Ctrl+I
80612
+ //HOME / END 当前屏 第1条 最后一条
80613
+ //Ctrl+HOME / Ctrl+END 第1条 最后一条
80466
80614
  this.OnCustomKeyDown=function(keyID, e) //自定义键盘事件
80467
80615
  {
80468
80616
  if (keyID==37 && e.ctrlKey) //Ctrl+Left
@@ -80499,6 +80647,26 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
80499
80647
  {
80500
80648
  this.OnEnterKeyDown();
80501
80649
  }
80650
+ else if (keyID==36) //HOME 第1条
80651
+ {
80652
+ var option=null;
80653
+ if (e.ctrlKey)
80654
+ option={ ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_START }; //所有数据的第1条数据
80655
+ else
80656
+ option={ ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_START };
80657
+
80658
+ if (option) this.ChartOperator(option);
80659
+ }
80660
+ else if (keyID==35) //END 最后一条
80661
+ {
80662
+ var option=null;
80663
+ if (e.ctrlKey)
80664
+ option={ ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_END }; //所有数据的最后1条数据
80665
+ else
80666
+ option={ ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_END };
80667
+
80668
+ if (option) this.ChartOperator(option);
80669
+ }
80502
80670
  else
80503
80671
  {
80504
80672
  return false;
@@ -82226,6 +82394,13 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
82226
82394
 
82227
82395
  if (!bFind) return;
82228
82396
  }
82397
+
82398
+ if (data.LatestPointFlash) //最新数据闪烁
82399
+ {
82400
+ var item=data.LatestPointFlash;
82401
+ if (IFrameSplitOperator.IsNumber(item.FlashCount))
82402
+ this.SetLatestPointFlash(item.FlashCount)
82403
+ }
82229
82404
 
82230
82405
  var bindData=new ChartData();
82231
82406
  bindData.Data=this.SourceData.Data;
@@ -4883,6 +4883,17 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4883
4883
 
4884
4884
  this.AdjustTitleHeight(chart);
4885
4885
 
4886
+ if (option.LatestPointFlash)
4887
+ {
4888
+ var item=option.LatestPointFlash;
4889
+ if (item.Enable)
4890
+ {
4891
+ this.CreateExtraCanvasElement(JSChart.LatestPointFlashKey, { ZIndex:6 });
4892
+ chart.CreateExtendChart("LatestPointFlashPaint", item);
4893
+ chart.StartLatestPointFlash();
4894
+ }
4895
+ }
4896
+
4886
4897
  return chart;
4887
4898
  }
4888
4899
 
@@ -6930,6 +6941,12 @@ var JSCHART_OPERATOR_ID=
6930
6941
  OP_GOTO_BY_DATAINDEX:17, //的移动到某一个数据起始位置
6931
6942
 
6932
6943
  OP_MOVE_CORSSCURSOR:18, //移动十字光标 { Step, Start:{ Date:, Time: } }
6944
+
6945
+ OP_CORSSCURSOR_PAGE_START:19, //当前屏第1条数据
6946
+ OP_CORSSCURSOR_PAGE_END:20, //当前屏最后1条数据
6947
+
6948
+ OP_CORSSCURSOR_DATA_START:21, //所有数据的第1条数据
6949
+ OP_CORSSCURSOR_DATA_END:22, //所有数据的最后1条数据
6933
6950
  }
6934
6951
 
6935
6952
  var JSCHART_DRAG_ID=
@@ -11879,6 +11896,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11879
11896
  }
11880
11897
  break;
11881
11898
  case 13: //回车
11899
+ case 35: //END
11900
+ case 36: //HOME
11882
11901
  if (this.OnCustomKeyDown) this.OnCustomKeyDown(keyID, e);
11883
11902
  break;
11884
11903
  default:
@@ -31331,6 +31350,8 @@ function ChartKLine()
31331
31350
  LeftMargin:g_JSChartResource.DaySummaryKLine.LeftMargin,
31332
31351
  }
31333
31352
 
31353
+ this.LastPoint={ }; //最后一个点的信息 {X, Y, KItem:, Date:, Time: }
31354
+
31334
31355
  this.AddToDaySummary=function(kItem)
31335
31356
  {
31336
31357
  if (!this.DaySummary.Enable) return false;
@@ -31834,6 +31855,8 @@ function ChartKLine()
31834
31855
  if (i==this.Data.Data.length-1)
31835
31856
  {
31836
31857
  ptLast={ X:x, Y:yClose, XLeft:left, XRight:right, KItem:data, ChartRight:chartright };
31858
+
31859
+ this.LastPoint={ X:x, Y:yClose, KItem:data };
31837
31860
  }
31838
31861
 
31839
31862
  if (this.PriceGap.Enable )
@@ -31967,6 +31990,11 @@ function ChartKLine()
31967
31990
 
31968
31991
  prePoint={ X:x, Y:yClose};
31969
31992
 
31993
+ if (i==this.Data.Data.length-1) //最后一个点
31994
+ {
31995
+ this.LastPoint={ X:x, Y:yClose, KItem:data };
31996
+ }
31997
+
31970
31998
  if (this.PriceGap.Enable)
31971
31999
  {
31972
32000
  var yLow=this.GetYFromData(data.Low, false);
@@ -33930,8 +33958,29 @@ function ChartKLine()
33930
33958
  this.Canvas.clip();
33931
33959
  }
33932
33960
 
33961
+ this.ClearLastPoint=function()
33962
+ {
33963
+ this.LastPoint={ };
33964
+ if (this.ChartFrame.GlobalOption)
33965
+ {
33966
+ var item=this.ChartFrame.GlobalOption;
33967
+ item.LatestPoint=null;
33968
+ }
33969
+ }
33970
+
33971
+ this.UpdateGlobalLatestPoint=function()
33972
+ {
33973
+ if (this.Identify!="Main-KLine") return;
33974
+ if (!this.ChartFrame.GlobalOption) return;
33975
+
33976
+ var item=this.ChartFrame.GlobalOption;
33977
+ if (IFrameSplitOperator.IsNumber(this.LastPoint.X) && IFrameSplitOperator.IsNumber(this.LastPoint.Y))
33978
+ item.LatestPoint={ X:this.LastPoint.X, Y:this.LastPoint.Y };
33979
+ }
33980
+
33933
33981
  this.Draw=function()
33934
33982
  {
33983
+ this.ClearLastPoint();
33935
33984
  if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
33936
33985
  if (this.IsShowIndexTitleOnly()) return;
33937
33986
  if (this.IsHideScriptIndex()) return;
@@ -33988,6 +34037,7 @@ function ChartKLine()
33988
34037
  this.Canvas.restore();
33989
34038
  this.DrawPredictionLine();
33990
34039
  if (this.PriceGap.Enable) this.DrawPriceGap();
34040
+ this.UpdateGlobalLatestPoint();
33991
34041
  return;
33992
34042
  }
33993
34043
  else if (this.DrawType==2)
@@ -34059,6 +34109,8 @@ function ChartKLine()
34059
34109
 
34060
34110
  this.Canvas.restore();
34061
34111
 
34112
+ this.UpdateGlobalLatestPoint();
34113
+
34062
34114
  this.DrawPredictionLine();
34063
34115
  if (this.PriceGap.Enable) this.DrawPriceGap();
34064
34116
 
@@ -56162,6 +56214,7 @@ function LatestPointFlashPaint()
56162
56214
  this.BGColor=g_JSChartResource.LatestPointFlash.BGColor;
56163
56215
  this.BGRadius=g_JSChartResource.LatestPointFlash.BGRadius;
56164
56216
  this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
56217
+ this.Style=1; //0=默认配置 1=图形保持一致
56165
56218
  this.FlashCanvas;
56166
56219
 
56167
56220
  this.SetOption=function(option)
@@ -56186,6 +56239,23 @@ function LatestPointFlashPaint()
56186
56239
  this.BGRadius=g_JSChartResource.LatestPointFlash.BGRadius;
56187
56240
  }
56188
56241
 
56242
+ this.GetChartColor=function()
56243
+ {
56244
+ var chart=this.HQChart.ChartPaint[0];
56245
+ if (!chart) return;
56246
+
56247
+ if (chart.ClassName=="ChartKLine")
56248
+ {
56249
+ this.PointColor=chart.CloseLineColor;
56250
+ this.BGColor=IChartDrawPicture.ColorToRGBA(chart.CloseLineColor, 0.6);
56251
+ }
56252
+ else if (chart.ClassName=="ChartMinutePriceLine")
56253
+ {
56254
+ this.PointColor=chart.Color;
56255
+ this.BGColor=IChartDrawPicture.ColorToRGBA(chart.Color, 0.6);
56256
+ }
56257
+ }
56258
+
56189
56259
  this.Draw=function()
56190
56260
  {
56191
56261
  if (!this.FlashCanvas) return;
@@ -56204,6 +56274,8 @@ function LatestPointFlashPaint()
56204
56274
  var point=this.HQChart.GlobalOption.LatestPoint;
56205
56275
  if (!IFrameSplitOperator.IsNumber(point.X) || !IFrameSplitOperator.IsNumber(point.Y)) return;
56206
56276
 
56277
+ if (this.Style==1) this.GetChartColor();
56278
+
56207
56279
  this.FlashCanvas.fillStyle=this.BGColor;
56208
56280
  this.FlashCanvas.beginPath();
56209
56281
  this.FlashCanvas.arc(point.X,point.Y,this.BGRadius,0,360,false);
@@ -84199,6 +84271,80 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
84199
84271
  return true;
84200
84272
  }
84201
84273
  }
84274
+ else if (id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_START) //当前屏第1条数据
84275
+ {
84276
+ var kData=this.GetKData();
84277
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false; //数据还没有到达
84278
+ var startIndex=kData.DataOffset;
84279
+ var kItem=kData.Data[startIndex];
84280
+ this.ChartOperator_Temp_SetChartCorssCursor(0, kItem);
84281
+ return true;
84282
+ }
84283
+ else if (id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_END) //当前屏最后1条数据
84284
+ {
84285
+ var kData=this.GetKData();
84286
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false; //数据还没有到达
84287
+ if (!this.Frame || !this.Frame.SubFrame[0] || !this.Frame.SubFrame[0].Frame) return false;
84288
+ var showCount=this.Frame.SubFrame[0].Frame.XPointCount; //一屏显示个数
84289
+ var endIndex=kData.DataOffset+showCount-1;
84290
+ if (endIndex>=kData.Data.length) endIndex=kData.Data.length-1;
84291
+ var kItem=kData.Data[endIndex];
84292
+ var index=endIndex-kData.DataOffset;
84293
+ this.ChartOperator_Temp_SetChartCorssCursor(index, kItem);
84294
+ return true;
84295
+ }
84296
+ else if (id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_START)
84297
+ {
84298
+ var kData=this.GetKData();
84299
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false; //数据还没有到达
84300
+ var kItem=kData.Data[0];
84301
+
84302
+ if (kData.DataOffset!=0)
84303
+ {
84304
+ kData.DataOffset=0
84305
+ this.UpdataDataoffset(); //更新数据偏移
84306
+ this.UpdateFrameMaxMin(); //调整坐标最大 最小值
84307
+ this.ResetFrameXSplit();
84308
+ this.Frame.SetSizeChage(true);
84309
+ this.Draw();
84310
+ this.ChartOperator_Temp_SetChartCorssCursor(0, kItem);
84311
+ }
84312
+ else
84313
+ {
84314
+ this.ChartOperator_Temp_SetChartCorssCursor(0, kItem);
84315
+ }
84316
+
84317
+ return true;
84318
+ }
84319
+ else if (id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_END)
84320
+ {
84321
+ var kData=this.GetKData();
84322
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false; //数据还没有到达
84323
+
84324
+ var kItem=kData.Data[kData.Data.length-1];
84325
+ if (!this.Frame || !this.Frame.SubFrame[0] || !this.Frame.SubFrame[0].Frame) return false;
84326
+ var showCount=this.Frame.SubFrame[0].Frame.XPointCount; //一屏显示个数
84327
+ var dataOffset=kData.Data.length-showCount;
84328
+
84329
+ if (kData.DataOffset<dataOffset)
84330
+ {
84331
+ kData.DataOffset=dataOffset;
84332
+ var index=kData.Data.length-kData.DataOffset-1;
84333
+ this.UpdataDataoffset(); //更新数据偏移
84334
+ this.UpdateFrameMaxMin(); //调整坐标最大 最小值
84335
+ this.ResetFrameXSplit();
84336
+ this.Frame.SetSizeChage(true);
84337
+ this.Draw();
84338
+ this.ChartOperator_Temp_SetChartCorssCursor(index, kItem);
84339
+ }
84340
+ else
84341
+ {
84342
+ var index=kData.Data.length-kData.DataOffset-1;
84343
+ this.ChartOperator_Temp_SetChartCorssCursor(index, kItem);
84344
+ }
84345
+
84346
+ return true;
84347
+ }
84202
84348
  }
84203
84349
 
84204
84350
 
@@ -84559,6 +84705,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
84559
84705
  //Alt+W 区间统计
84560
84706
  //Alt+数字 切换多个窗口
84561
84707
  //Ctrl+I
84708
+ //HOME / END 当前屏 第1条 最后一条
84709
+ //Ctrl+HOME / Ctrl+END 第1条 最后一条
84562
84710
  this.OnCustomKeyDown=function(keyID, e) //自定义键盘事件
84563
84711
  {
84564
84712
  if (keyID==37 && e.ctrlKey) //Ctrl+Left
@@ -84595,6 +84743,26 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
84595
84743
  {
84596
84744
  this.OnEnterKeyDown();
84597
84745
  }
84746
+ else if (keyID==36) //HOME 第1条
84747
+ {
84748
+ var option=null;
84749
+ if (e.ctrlKey)
84750
+ option={ ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_START }; //所有数据的第1条数据
84751
+ else
84752
+ option={ ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_START };
84753
+
84754
+ if (option) this.ChartOperator(option);
84755
+ }
84756
+ else if (keyID==35) //END 最后一条
84757
+ {
84758
+ var option=null;
84759
+ if (e.ctrlKey)
84760
+ option={ ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_END }; //所有数据的最后1条数据
84761
+ else
84762
+ option={ ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_END };
84763
+
84764
+ if (option) this.ChartOperator(option);
84765
+ }
84598
84766
  else
84599
84767
  {
84600
84768
  return false;
@@ -86322,6 +86490,13 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86322
86490
 
86323
86491
  if (!bFind) return;
86324
86492
  }
86493
+
86494
+ if (data.LatestPointFlash) //最新数据闪烁
86495
+ {
86496
+ var item=data.LatestPointFlash;
86497
+ if (IFrameSplitOperator.IsNumber(item.FlashCount))
86498
+ this.SetLatestPointFlash(item.FlashCount)
86499
+ }
86325
86500
 
86326
86501
  var bindData=new ChartData();
86327
86502
  bindData.Data=this.SourceData.Data;
@@ -136583,7 +136758,7 @@ function ChartDealList()
136583
136758
  if ( this.SelectedStyle==1)
136584
136759
  {
136585
136760
  this.Canvas.fillStyle=this.SelectedConfig.BGColor;
136586
- this.Canvas.fillRect(rtRow.Left,rtRow.Top, rtRow.Width, rtRow.Height);
136761
+ this.Canvas.fillRect(rtRow.Left+1,rtRow.Top+1, rtRow.Width-2, rtRow.Height-2);
136587
136762
  }
136588
136763
 
136589
136764
  return true;
@@ -150093,7 +150268,7 @@ function ScrollBarBGChart()
150093
150268
 
150094
150269
 
150095
150270
 
150096
- var HQCHART_VERSION="1.1.14850";
150271
+ var HQCHART_VERSION="1.1.14854";
150097
150272
 
150098
150273
  function PrintHQChartVersion()
150099
150274
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.14850";
8
+ var HQCHART_VERSION="1.1.14854";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -4927,6 +4927,17 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4927
4927
 
4928
4928
  this.AdjustTitleHeight(chart);
4929
4929
 
4930
+ if (option.LatestPointFlash)
4931
+ {
4932
+ var item=option.LatestPointFlash;
4933
+ if (item.Enable)
4934
+ {
4935
+ this.CreateExtraCanvasElement(JSChart.LatestPointFlashKey, { ZIndex:6 });
4936
+ chart.CreateExtendChart("LatestPointFlashPaint", item);
4937
+ chart.StartLatestPointFlash();
4938
+ }
4939
+ }
4940
+
4930
4941
  return chart;
4931
4942
  }
4932
4943
 
@@ -6974,6 +6985,12 @@ var JSCHART_OPERATOR_ID=
6974
6985
  OP_GOTO_BY_DATAINDEX:17, //的移动到某一个数据起始位置
6975
6986
 
6976
6987
  OP_MOVE_CORSSCURSOR:18, //移动十字光标 { Step, Start:{ Date:, Time: } }
6988
+
6989
+ OP_CORSSCURSOR_PAGE_START:19, //当前屏第1条数据
6990
+ OP_CORSSCURSOR_PAGE_END:20, //当前屏最后1条数据
6991
+
6992
+ OP_CORSSCURSOR_DATA_START:21, //所有数据的第1条数据
6993
+ OP_CORSSCURSOR_DATA_END:22, //所有数据的最后1条数据
6977
6994
  }
6978
6995
 
6979
6996
  var JSCHART_DRAG_ID=
@@ -11923,6 +11940,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11923
11940
  }
11924
11941
  break;
11925
11942
  case 13: //回车
11943
+ case 35: //END
11944
+ case 36: //HOME
11926
11945
  if (this.OnCustomKeyDown) this.OnCustomKeyDown(keyID, e);
11927
11946
  break;
11928
11947
  default:
@@ -31375,6 +31394,8 @@ function ChartKLine()
31375
31394
  LeftMargin:g_JSChartResource.DaySummaryKLine.LeftMargin,
31376
31395
  }
31377
31396
 
31397
+ this.LastPoint={ }; //最后一个点的信息 {X, Y, KItem:, Date:, Time: }
31398
+
31378
31399
  this.AddToDaySummary=function(kItem)
31379
31400
  {
31380
31401
  if (!this.DaySummary.Enable) return false;
@@ -31878,6 +31899,8 @@ function ChartKLine()
31878
31899
  if (i==this.Data.Data.length-1)
31879
31900
  {
31880
31901
  ptLast={ X:x, Y:yClose, XLeft:left, XRight:right, KItem:data, ChartRight:chartright };
31902
+
31903
+ this.LastPoint={ X:x, Y:yClose, KItem:data };
31881
31904
  }
31882
31905
 
31883
31906
  if (this.PriceGap.Enable )
@@ -32011,6 +32034,11 @@ function ChartKLine()
32011
32034
 
32012
32035
  prePoint={ X:x, Y:yClose};
32013
32036
 
32037
+ if (i==this.Data.Data.length-1) //最后一个点
32038
+ {
32039
+ this.LastPoint={ X:x, Y:yClose, KItem:data };
32040
+ }
32041
+
32014
32042
  if (this.PriceGap.Enable)
32015
32043
  {
32016
32044
  var yLow=this.GetYFromData(data.Low, false);
@@ -33974,8 +34002,29 @@ function ChartKLine()
33974
34002
  this.Canvas.clip();
33975
34003
  }
33976
34004
 
34005
+ this.ClearLastPoint=function()
34006
+ {
34007
+ this.LastPoint={ };
34008
+ if (this.ChartFrame.GlobalOption)
34009
+ {
34010
+ var item=this.ChartFrame.GlobalOption;
34011
+ item.LatestPoint=null;
34012
+ }
34013
+ }
34014
+
34015
+ this.UpdateGlobalLatestPoint=function()
34016
+ {
34017
+ if (this.Identify!="Main-KLine") return;
34018
+ if (!this.ChartFrame.GlobalOption) return;
34019
+
34020
+ var item=this.ChartFrame.GlobalOption;
34021
+ if (IFrameSplitOperator.IsNumber(this.LastPoint.X) && IFrameSplitOperator.IsNumber(this.LastPoint.Y))
34022
+ item.LatestPoint={ X:this.LastPoint.X, Y:this.LastPoint.Y };
34023
+ }
34024
+
33977
34025
  this.Draw=function()
33978
34026
  {
34027
+ this.ClearLastPoint();
33979
34028
  if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
33980
34029
  if (this.IsShowIndexTitleOnly()) return;
33981
34030
  if (this.IsHideScriptIndex()) return;
@@ -34032,6 +34081,7 @@ function ChartKLine()
34032
34081
  this.Canvas.restore();
34033
34082
  this.DrawPredictionLine();
34034
34083
  if (this.PriceGap.Enable) this.DrawPriceGap();
34084
+ this.UpdateGlobalLatestPoint();
34035
34085
  return;
34036
34086
  }
34037
34087
  else if (this.DrawType==2)
@@ -34103,6 +34153,8 @@ function ChartKLine()
34103
34153
 
34104
34154
  this.Canvas.restore();
34105
34155
 
34156
+ this.UpdateGlobalLatestPoint();
34157
+
34106
34158
  this.DrawPredictionLine();
34107
34159
  if (this.PriceGap.Enable) this.DrawPriceGap();
34108
34160
 
@@ -56206,6 +56258,7 @@ function LatestPointFlashPaint()
56206
56258
  this.BGColor=g_JSChartResource.LatestPointFlash.BGColor;
56207
56259
  this.BGRadius=g_JSChartResource.LatestPointFlash.BGRadius;
56208
56260
  this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
56261
+ this.Style=1; //0=默认配置 1=图形保持一致
56209
56262
  this.FlashCanvas;
56210
56263
 
56211
56264
  this.SetOption=function(option)
@@ -56230,6 +56283,23 @@ function LatestPointFlashPaint()
56230
56283
  this.BGRadius=g_JSChartResource.LatestPointFlash.BGRadius;
56231
56284
  }
56232
56285
 
56286
+ this.GetChartColor=function()
56287
+ {
56288
+ var chart=this.HQChart.ChartPaint[0];
56289
+ if (!chart) return;
56290
+
56291
+ if (chart.ClassName=="ChartKLine")
56292
+ {
56293
+ this.PointColor=chart.CloseLineColor;
56294
+ this.BGColor=IChartDrawPicture.ColorToRGBA(chart.CloseLineColor, 0.6);
56295
+ }
56296
+ else if (chart.ClassName=="ChartMinutePriceLine")
56297
+ {
56298
+ this.PointColor=chart.Color;
56299
+ this.BGColor=IChartDrawPicture.ColorToRGBA(chart.Color, 0.6);
56300
+ }
56301
+ }
56302
+
56233
56303
  this.Draw=function()
56234
56304
  {
56235
56305
  if (!this.FlashCanvas) return;
@@ -56248,6 +56318,8 @@ function LatestPointFlashPaint()
56248
56318
  var point=this.HQChart.GlobalOption.LatestPoint;
56249
56319
  if (!IFrameSplitOperator.IsNumber(point.X) || !IFrameSplitOperator.IsNumber(point.Y)) return;
56250
56320
 
56321
+ if (this.Style==1) this.GetChartColor();
56322
+
56251
56323
  this.FlashCanvas.fillStyle=this.BGColor;
56252
56324
  this.FlashCanvas.beginPath();
56253
56325
  this.FlashCanvas.arc(point.X,point.Y,this.BGRadius,0,360,false);
@@ -84243,6 +84315,80 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
84243
84315
  return true;
84244
84316
  }
84245
84317
  }
84318
+ else if (id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_START) //当前屏第1条数据
84319
+ {
84320
+ var kData=this.GetKData();
84321
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false; //数据还没有到达
84322
+ var startIndex=kData.DataOffset;
84323
+ var kItem=kData.Data[startIndex];
84324
+ this.ChartOperator_Temp_SetChartCorssCursor(0, kItem);
84325
+ return true;
84326
+ }
84327
+ else if (id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_END) //当前屏最后1条数据
84328
+ {
84329
+ var kData=this.GetKData();
84330
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false; //数据还没有到达
84331
+ if (!this.Frame || !this.Frame.SubFrame[0] || !this.Frame.SubFrame[0].Frame) return false;
84332
+ var showCount=this.Frame.SubFrame[0].Frame.XPointCount; //一屏显示个数
84333
+ var endIndex=kData.DataOffset+showCount-1;
84334
+ if (endIndex>=kData.Data.length) endIndex=kData.Data.length-1;
84335
+ var kItem=kData.Data[endIndex];
84336
+ var index=endIndex-kData.DataOffset;
84337
+ this.ChartOperator_Temp_SetChartCorssCursor(index, kItem);
84338
+ return true;
84339
+ }
84340
+ else if (id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_START)
84341
+ {
84342
+ var kData=this.GetKData();
84343
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false; //数据还没有到达
84344
+ var kItem=kData.Data[0];
84345
+
84346
+ if (kData.DataOffset!=0)
84347
+ {
84348
+ kData.DataOffset=0
84349
+ this.UpdataDataoffset(); //更新数据偏移
84350
+ this.UpdateFrameMaxMin(); //调整坐标最大 最小值
84351
+ this.ResetFrameXSplit();
84352
+ this.Frame.SetSizeChage(true);
84353
+ this.Draw();
84354
+ this.ChartOperator_Temp_SetChartCorssCursor(0, kItem);
84355
+ }
84356
+ else
84357
+ {
84358
+ this.ChartOperator_Temp_SetChartCorssCursor(0, kItem);
84359
+ }
84360
+
84361
+ return true;
84362
+ }
84363
+ else if (id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_END)
84364
+ {
84365
+ var kData=this.GetKData();
84366
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false; //数据还没有到达
84367
+
84368
+ var kItem=kData.Data[kData.Data.length-1];
84369
+ if (!this.Frame || !this.Frame.SubFrame[0] || !this.Frame.SubFrame[0].Frame) return false;
84370
+ var showCount=this.Frame.SubFrame[0].Frame.XPointCount; //一屏显示个数
84371
+ var dataOffset=kData.Data.length-showCount;
84372
+
84373
+ if (kData.DataOffset<dataOffset)
84374
+ {
84375
+ kData.DataOffset=dataOffset;
84376
+ var index=kData.Data.length-kData.DataOffset-1;
84377
+ this.UpdataDataoffset(); //更新数据偏移
84378
+ this.UpdateFrameMaxMin(); //调整坐标最大 最小值
84379
+ this.ResetFrameXSplit();
84380
+ this.Frame.SetSizeChage(true);
84381
+ this.Draw();
84382
+ this.ChartOperator_Temp_SetChartCorssCursor(index, kItem);
84383
+ }
84384
+ else
84385
+ {
84386
+ var index=kData.Data.length-kData.DataOffset-1;
84387
+ this.ChartOperator_Temp_SetChartCorssCursor(index, kItem);
84388
+ }
84389
+
84390
+ return true;
84391
+ }
84246
84392
  }
84247
84393
 
84248
84394
 
@@ -84603,6 +84749,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
84603
84749
  //Alt+W 区间统计
84604
84750
  //Alt+数字 切换多个窗口
84605
84751
  //Ctrl+I
84752
+ //HOME / END 当前屏 第1条 最后一条
84753
+ //Ctrl+HOME / Ctrl+END 第1条 最后一条
84606
84754
  this.OnCustomKeyDown=function(keyID, e) //自定义键盘事件
84607
84755
  {
84608
84756
  if (keyID==37 && e.ctrlKey) //Ctrl+Left
@@ -84639,6 +84787,26 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
84639
84787
  {
84640
84788
  this.OnEnterKeyDown();
84641
84789
  }
84790
+ else if (keyID==36) //HOME 第1条
84791
+ {
84792
+ var option=null;
84793
+ if (e.ctrlKey)
84794
+ option={ ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_START }; //所有数据的第1条数据
84795
+ else
84796
+ option={ ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_START };
84797
+
84798
+ if (option) this.ChartOperator(option);
84799
+ }
84800
+ else if (keyID==35) //END 最后一条
84801
+ {
84802
+ var option=null;
84803
+ if (e.ctrlKey)
84804
+ option={ ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_DATA_END }; //所有数据的最后1条数据
84805
+ else
84806
+ option={ ID:JSCHART_OPERATOR_ID.OP_CORSSCURSOR_PAGE_END };
84807
+
84808
+ if (option) this.ChartOperator(option);
84809
+ }
84642
84810
  else
84643
84811
  {
84644
84812
  return false;
@@ -86366,6 +86534,13 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86366
86534
 
86367
86535
  if (!bFind) return;
86368
86536
  }
86537
+
86538
+ if (data.LatestPointFlash) //最新数据闪烁
86539
+ {
86540
+ var item=data.LatestPointFlash;
86541
+ if (IFrameSplitOperator.IsNumber(item.FlashCount))
86542
+ this.SetLatestPointFlash(item.FlashCount)
86543
+ }
86369
86544
 
86370
86545
  var bindData=new ChartData();
86371
86546
  bindData.Data=this.SourceData.Data;
@@ -136627,7 +136802,7 @@ function ChartDealList()
136627
136802
  if ( this.SelectedStyle==1)
136628
136803
  {
136629
136804
  this.Canvas.fillStyle=this.SelectedConfig.BGColor;
136630
- this.Canvas.fillRect(rtRow.Left,rtRow.Top, rtRow.Width, rtRow.Height);
136805
+ this.Canvas.fillRect(rtRow.Left+1,rtRow.Top+1, rtRow.Width-2, rtRow.Height-2);
136631
136806
  }
136632
136807
 
136633
136808
  return true;
@@ -161133,7 +161308,7 @@ function HQChartScriptWorker()
161133
161308
 
161134
161309
 
161135
161310
 
161136
- var HQCHART_VERSION="1.1.14850";
161311
+ var HQCHART_VERSION="1.1.14854";
161137
161312
 
161138
161313
  function PrintHQChartVersion()
161139
161314
  {