hqchart 1.1.13167 → 1.1.13182

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.
@@ -4167,6 +4167,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4167
4167
  chart.ModifyIndexDialog=this.ModifyIndexDialog;
4168
4168
  chart.ChangeIndexDialog=this.ChangeIndexDialog;
4169
4169
  chart.MinuteDialog=this.MinuteDialog;
4170
+
4171
+ var pixelRatio=GetDevicePixelRatio();
4170
4172
 
4171
4173
  //右键菜单
4172
4174
  if (option.IsShowRightMenu==true) chart.RightMenu=new KLineRightMenu(this.DivElement);
@@ -4385,8 +4387,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4385
4387
  chart.Frame.SubFrame[i].Frame.IsShowYText[1]=item.IsShowRightText;
4386
4388
  chart.Frame.SubFrame[i].Frame.YSplitOperator.IsShowRightText=item.IsShowRightText; //显示右边刻度
4387
4389
  }
4388
- if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace;
4389
- if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace;
4390
+ if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace*pixelRatio;
4391
+ if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace*pixelRatio;
4390
4392
 
4391
4393
  if (item.RightTextPosition>0) chart.Frame.SubFrame[i].Frame.YTextPosition[1]=item.RightTextPosition;
4392
4394
  if (item.LeftTextPosition>0) chart.Frame.SubFrame[i].Frame.YTextPosition[0]=item.LeftTextPosition;
@@ -4688,6 +4690,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4688
4690
  chart.ModifyIndexDialog=this.ModifyIndexDialog;
4689
4691
  chart.ChangeIndexDialog=this.ChangeIndexDialog;
4690
4692
 
4693
+ var pixelRatio=GetDevicePixelRatio();
4694
+
4691
4695
  var windowsCount=2;
4692
4696
  if (option.Windows && option.Windows.length>0) windowsCount+=option.Windows.length; //指标窗口从第3个窗口开始
4693
4697
  if (option.EnableScrollUpDown==true) chart.EnableScrollUpDown=option.EnableScrollUpDown;
@@ -4855,8 +4859,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4855
4859
  if (IFrameSplitOperator.IsNumber(item.YTextBaseline)) chart.Frame.SubFrame[i].Frame.YTextBaseline=item.YTextBaseline;
4856
4860
  if (IFrameSplitOperator.IsBool(item.IsShowIndexTitle)) chart.Frame.SubFrame[i].Frame.IsShowIndexTitle=item.IsShowIndexTitle;
4857
4861
 
4858
- if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace;
4859
- if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace;
4862
+ if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace*pixelRatio;
4863
+ if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace*pixelRatio;
4860
4864
 
4861
4865
  //是否显示关闭集合竞价按钮
4862
4866
  if (IFrameSplitOperator.IsNumber(item.CloseBeforeButton)) chart.Frame.SubFrame[i].Frame.IsShowCloseButton=item.CloseBeforeButton;
@@ -5529,6 +5533,13 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5529
5533
  //是否自动更新
5530
5534
  if (option.IsAutoUpdate!=null) chart.IsAutoUpdate=option.IsAutoUpdate;
5531
5535
  if (option.AutoUpdateFrequency>0) chart.AutoUpdateFrequency=option.AutoUpdateFrequency;
5536
+ //内置菜单
5537
+ if (option.EnablePopMenuV2===true)
5538
+ {
5539
+ chart.JSPopMenu=new JSPopMenu();
5540
+ chart.JSPopMenu.Inital();
5541
+ chart.EnablePopMenuV2=true;
5542
+ }
5532
5543
  //注册事件
5533
5544
  if (option.EventCallback)
5534
5545
  {
@@ -5555,19 +5566,6 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5555
5566
  this.DivElement.JSChart=this; //div中保存一份
5556
5567
  this.JSChartContainer.Draw();
5557
5568
  }
5558
-
5559
- if (IFrameSplitOperator.IsBool(option.CheckLatestVerion) && option.CheckLatestVerion==false)
5560
- {
5561
-
5562
- }
5563
- else if (JSChart.LastVersion==null)
5564
- {
5565
- if (chart && typeof(chart.GetLatestVersion)=='function')
5566
- {
5567
- //由于域名都要备案,获取最新版本接口停止使用
5568
- //chart.GetLatestVersion();
5569
- }
5570
- }
5571
5569
  }
5572
5570
 
5573
5571
  //创建工具条
@@ -6011,6 +6009,15 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
6011
6009
  return this.JSChartContainer.ChangePriceGap(option);
6012
6010
  }
6013
6011
  }
6012
+
6013
+ this.PopupMenuByTab=function(menuData, rtTab)
6014
+ {
6015
+ if(this.JSChartContainer && typeof(this.JSChartContainer.PopupMenuByTab)=='function')
6016
+ {
6017
+ JSConsole.Chart.Log('[JSChart:ChangePriceGap] ');
6018
+ return this.JSChartContainer.PopupMenuByTab(menuData, rtTab);
6019
+ }
6020
+ }
6014
6021
  }
6015
6022
 
6016
6023
  JSChart.LastVersion=null; //最新的版本号
@@ -6216,6 +6223,12 @@ JSChart.ToFixedRect=function(value)
6216
6223
  return ToFixedRect(value);
6217
6224
  }
6218
6225
 
6226
+ JSChart.GetScrollPosition=function()
6227
+ {
6228
+ return GetScrollPosition();
6229
+ }
6230
+
6231
+
6219
6232
 
6220
6233
 
6221
6234
  var JSCHART_EVENT_ID=
@@ -6501,6 +6514,36 @@ var JSCHART_WORKER_MESSAGE_ID=
6501
6514
  ERROR_EXECUTE_SCRIPT:3,
6502
6515
  }
6503
6516
 
6517
+ var JSCHART_MENU_ID=
6518
+ {
6519
+ CMD_CHANGE_PERIOD_ID:1, //切换周期
6520
+ CMD_CHANGE_WINDOW_COUNT_ID:2, //窗口个数
6521
+ CMD_CHANGE_RIGHT_ID:3, //复权
6522
+ CMD_CHANGE_INDEX_ID:4, //切换指标
6523
+ CMD_CHANGE_COLOR_INDEX_ID:5, //五彩K线指标
6524
+ CMD_CHANGE_TRADE_INDEX_ID:6, //专家系统(交易指标)
6525
+ CMD_DELETE_COLOR_INDEX_ID:7, //删除五彩K线指标
6526
+ CMD_DELETE_TRADE_INDEX_ID:8, //删除专家系统(交易指标)
6527
+ CMD_CHANGE_KLINE_TYPE_ID:9, //切换K线类型
6528
+ CMD_CHANGE_PRICE_GAP_ID:10, //缺口提示
6529
+ CMD_OVERLAY_SYMBOL_ID:11, //叠加品种
6530
+ CMD_DELETE_ALL_OVERLAY_SYMBOL_ID:12, //删除所有叠加品种
6531
+ CMD_CHANGE_COORDINATETYPE_ID:13, //切换坐标类型
6532
+ CMD_CHANGE_KLINE_INFO_ID:14, //切换信息地雷
6533
+ CMD_DELETE_ALL_KLINE_INFO_ID:15, //清空信息地雷
6534
+ CMD_CHANGE_DRAG_MODE_ID:16, //切换拖动模式
6535
+ CMD_CHANGE_BG_SPLIT_ID:17, //背景分割
6536
+
6537
+ CMD_SHOW_DRAWTOOL_ID:18, //画图工具
6538
+ CMD_HIDE_DRAWTOOL_ID:19,
6539
+
6540
+ CMD_SHOW_STOCKCHIP_ID:20, //筹码分布
6541
+ CMD_HIDE_STOCKCHIP_ID:21,
6542
+
6543
+ CMD_ENABLE_SELECT_RECT_ID:22, //启动区间选择
6544
+ CMD_CHANGE_DAY_COUNT_ID:23, //切换天数
6545
+ }
6546
+
6504
6547
 
6505
6548
  function PhoneDBClick()
6506
6549
  {
@@ -6586,6 +6629,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6586
6629
  this.LoadDataSplashTitle="数据加载中"; //下载数据提示信息
6587
6630
  this.DefaultCursor="default"; //crosshair , default 默认手型
6588
6631
 
6632
+ this.EnablePopMenuV2=false;
6633
+ this.JSPopMenu; //内置菜单
6634
+ //this.JSPopMenu=new JSPopMenu(); //内置菜单
6635
+ //this.JSPopMenu.Inital();
6636
+
6589
6637
  //绘图缓存
6590
6638
  this.CacheCanvas=null;
6591
6639
  this.CacheElement=null;
@@ -6781,61 +6829,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6781
6829
  {
6782
6830
  this.IsDestroy=true;
6783
6831
  this.StopAutoUpdate();
6784
-
6785
- if (this.GetLatestVersionTimer!=null)
6786
- {
6787
- clearTimeout(this.GetLatestVersionTimer);
6788
- this.GetLatestVersionTimer=null;
6789
- }
6790
6832
  }
6791
6833
 
6792
6834
  this.ChartDestory=this.ChartDestroy; //老版本写错了,需要兼容下
6793
6835
 
6794
-
6795
- this.GetLatestVersionTimer=null; //获取最新版本
6796
- this.GetLatestVersion=function()
6797
- {
6798
- if (this.GetLatestVersionTimer!=null)
6799
- {
6800
- clearTimeout(this.GetLatestVersionTimer);
6801
- this.GetLatestVersionTimer=null;
6802
- }
6803
-
6804
- var roundeTime=Math.floor(Math.random()*50);
6805
- var waittimer=1000*60*3+(roundeTime*1000);
6806
- var value="aHR0cHM6Ly9ocWNoYXJ0LnplYWxpbmsuY29tL2FwaS9HZXRWZXJzaW9u";
6807
- JSConsole.Chart.Log("[JSChartContainer::GetLatestVersion] wait for get hqchart latest version. ",waittimer);
6808
- this.GetLatestVersionTimer = setTimeout(()=>
6809
- {
6810
- var width=0, height=0;
6811
- if (this.Frame && this.Frame.ChartBorder)
6812
- {
6813
- width=this.Frame.ChartBorder.GetChartWidth();
6814
- height=this.Frame.ChartBorder.GetChartHeight();
6815
- }
6816
-
6817
- var url=`${atob(value)}?width=${width}&height=${height}&type=h5`;
6818
-
6819
- if (JSChart.LastVersion!=null) return; //只请求一次
6820
-
6821
- JSNetwork.HttpRequest({
6822
- url: url,
6823
- type:"get",
6824
- dataType: "json",
6825
- async:true,
6826
- success:function(data)
6827
- {
6828
- JSConsole.Chart.Log("[JSChartContainer::GetLatestVersion] hqchart latest version. ",data);
6829
- JSChart.LastVersion=data;
6830
- },
6831
- error:function(request, textStatus, errorThrown)
6832
- {
6833
- JSConsole.Chart.Log("[JSChartContainer::GetLatestVersion] Get HQChart latest version failed.", request);
6834
- }
6835
- });
6836
- }, waittimer);
6837
- }
6838
-
6839
6836
  //设置焦点
6840
6837
  this.SetFocus=function()
6841
6838
  {
@@ -9127,10 +9124,13 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9127
9124
  var item=this.ChartDrawPicture[i];
9128
9125
  if (item.IsDrawFirst) continue;
9129
9126
  if (item.IsDrawMain && item.IsDrawMain()) continue;
9127
+ if (this.SelectChartDrawPicture && this.SelectChartDrawPicture.Guid==item.Guid) continue; //当前选中在最后画
9130
9128
 
9131
9129
  item.Draw();
9132
9130
  }
9133
9131
 
9132
+ if (this.SelectChartDrawPicture) this.SelectChartDrawPicture.Draw();
9133
+
9134
9134
  if (this.CurrentChartDrawPicture && this.CurrentChartDrawPicture.Status!=10)
9135
9135
  {
9136
9136
  this.CurrentChartDrawPicture.Draw();
@@ -9570,10 +9570,16 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9570
9570
  var item=this.ChartDrawPicture[i];
9571
9571
  if (item.IsDrawFirst) continue;
9572
9572
  if (item.IsDrawMain && item.IsDrawMain()) continue;
9573
+ if (this.SelectChartDrawPicture &&item.Guid==this.SelectChartDrawPicture.Guid) continue; //选中画图最后画 确保显示在最外面
9573
9574
 
9574
9575
  item.Draw(moveonPoint, this.LastMouseStatus);
9575
9576
  }
9576
9577
 
9578
+ if (this.SelectChartDrawPicture)
9579
+ {
9580
+ this.SelectChartDrawPicture.Draw(moveonPoint, this.LastMouseStatus);
9581
+ }
9582
+
9577
9583
  if (this.CurrentChartDrawPicture && this.CurrentChartDrawPicture.Status!=10)
9578
9584
  {
9579
9585
  this.CurrentChartDrawPicture.Draw();
@@ -12885,6 +12891,213 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
12885
12891
  }
12886
12892
  }
12887
12893
  }
12894
+
12895
+ this.PopupMenuByTab=function(menuData, rtTab)
12896
+ {
12897
+ if (!this.JSPopMenu) return;
12898
+
12899
+ var pixelRatio=GetDevicePixelRatio();
12900
+ var rtCell={ Left:rtTab.Left/pixelRatio, Right:rtTab.Right/pixelRatio, Bottom:rtTab.Bottom/pixelRatio, Top:rtTab.Top/pixelRatio };
12901
+ rtCell.Width=rtCell.Right-rtCell.Left;
12902
+ rtCell.Height=rtCell.Bottom-rtCell.Top;
12903
+
12904
+ var rtClient=this.UIElement.getBoundingClientRect();
12905
+ var rtScroll=GetScrollPosition();
12906
+
12907
+ var offsetLeft=rtClient.left+rtScroll.Left;
12908
+ var offsetTop=rtClient.top+rtScroll.Top;
12909
+ rtCell.Left+=offsetLeft;
12910
+ rtCell.Right+=offsetLeft;
12911
+ rtCell.Top+=offsetTop;
12912
+ rtCell.Bottom+=offsetTop;
12913
+
12914
+ this.JSPopMenu.CreatePopMenu(menuData);
12915
+ this.JSPopMenu.PopupMenuByTab(rtCell);
12916
+ }
12917
+
12918
+ this.PopuMenuByRClick=function(menuData, x, y)
12919
+ {
12920
+ var rtClient=this.UIElement.getBoundingClientRect();
12921
+ var rtScroll=GetScrollPosition();
12922
+
12923
+ x+=rtClient.left+rtScroll.Left;
12924
+ y+=rtClient.top+rtScroll.Top;
12925
+
12926
+ this.JSPopMenu.CreatePopMenu(menuData);
12927
+ this.JSPopMenu.PopupMenuByRight(x,y);
12928
+ }
12929
+
12930
+ //点击右键菜单
12931
+ this.OnClickRightMenu=function(data)
12932
+ {
12933
+ JSConsole.Chart.Log('[JSChartContainer::OnClickRightMenu] ',data);
12934
+ if (!data || !data.Data) return;
12935
+
12936
+ var cmdID=data.Data.ID; //命令ID
12937
+ var aryArgs=data.Data.Args; //参数
12938
+ var param=null, srcParam=null; //原始值
12939
+ if (IFrameSplitOperator.IsNonEmptyArray(aryArgs))
12940
+ {
12941
+ srcParam=aryArgs[0];
12942
+ if (IFrameSplitOperator.IsNumber(aryArgs[0])) param=aryArgs[0];
12943
+ }
12944
+
12945
+ switch(cmdID)
12946
+ {
12947
+ case JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID:
12948
+ if (this.ChangePeriod && param!=null)
12949
+ this.ChangePeriod(param);
12950
+ break;
12951
+ case JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID:
12952
+ if (this.ChangeIndexWindowCount && param!=null)
12953
+ this.ChangeIndexWindowCount(param);
12954
+ break;
12955
+ case JSCHART_MENU_ID.CMD_CHANGE_RIGHT_ID:
12956
+ if (this.ChangeRight && param!=null)
12957
+ this.ChangeRight(param);
12958
+ break;
12959
+ case JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID:
12960
+ if (this.ChangeIndex && param!=null && aryArgs[1])
12961
+ this.ChangeIndex(param,aryArgs[1]);
12962
+ break;
12963
+
12964
+ case JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID:
12965
+ case JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID:
12966
+ if (this.ChangeInstructionIndex && aryArgs[0])
12967
+ this.ChangeInstructionIndex(aryArgs[0]);
12968
+ break;
12969
+ case JSCHART_MENU_ID.CMD_DELETE_COLOR_INDEX_ID: //删除五彩K线指标
12970
+ case JSCHART_MENU_ID.CMD_DELETE_TRADE_INDEX_ID: //删除专家系统(交易指标)
12971
+ if (this.CancelInstructionIndex) this.CancelInstructionIndex();
12972
+ break;
12973
+ case JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID: //切换K线类型
12974
+ if (this.ChangeKLineDrawType && param!=null)
12975
+ this.ChangeKLineDrawType(param,aryArgs[1],aryArgs[2]);
12976
+ break;
12977
+ case JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID: //缺口提示
12978
+ if (this.ChangePriceGap && IFrameSplitOperator.IsBool(aryArgs[0]))
12979
+ {
12980
+ if (aryArgs[0]==false)
12981
+ {
12982
+ this.ChangePriceGap({ Enable:aryArgs[0] });
12983
+ }
12984
+ else
12985
+ {
12986
+ if (IFrameSplitOperator.IsNumber(aryArgs[1]))
12987
+ this.ChangePriceGap({ Enable:aryArgs[0], Count:aryArgs[1] });
12988
+ }
12989
+ }
12990
+ break;
12991
+ case JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID:
12992
+ if (aryArgs[1]===true)
12993
+ {
12994
+ if (this.OverlaySymbol && aryArgs[0]) this.OverlaySymbol(aryArgs[0]);
12995
+ }
12996
+ else if (aryArgs[1]===false)
12997
+ {
12998
+ if (this.DeleteOverlaySymbol && aryArgs[0]) this.DeleteOverlaySymbol(aryArgs[0]);
12999
+ }
13000
+ break;
13001
+ case JSCHART_MENU_ID.CMD_DELETE_ALL_OVERLAY_SYMBOL_ID:
13002
+ if (this.ClearOverlaySymbol) this.ClearOverlaySymbol();
13003
+ break;
13004
+ case JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID:
13005
+ if (this.ChangeCoordinateType && aryArgs[0]) this.ChangeCoordinateType(aryArgs[0]);
13006
+ break;
13007
+ case JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID:
13008
+ if (aryArgs[0] && IFrameSplitOperator.IsBool(aryArgs[1]))
13009
+ {
13010
+ if (aryArgs[1]==true && this.AddKLineInfo) this.AddKLineInfo(aryArgs[0],true);
13011
+ else if (aryArgs[1]==false && this.DeleteKLineInfo) this.DeleteKLineInfo(aryArgs[0]);
13012
+ }
13013
+ break;
13014
+ case JSCHART_MENU_ID.CMD_DELETE_ALL_KLINE_INFO_ID:
13015
+ if (this.ClearKLineInfo) this.ClearKLineInfo();
13016
+ break;
13017
+ case JSCHART_MENU_ID.CMD_CHANGE_DRAG_MODE_ID:
13018
+ if (param!=null) this.DragMode=param;
13019
+ break;
13020
+ case JSCHART_MENU_ID.CMD_CHANGE_BG_SPLIT_ID:
13021
+ if (IFrameSplitOperator.IsBool(srcParam))
13022
+ {
13023
+ if (srcParam)
13024
+ {
13025
+ this.CreateExtendChart("SessionBreaksPaint", { });
13026
+ this.Draw();
13027
+ }
13028
+ else
13029
+ {
13030
+ var finder=this.GetExtendChartByClassName("SessionBreaksPaint");
13031
+ if (finder)
13032
+ {
13033
+ this.DeleteExtendChartByID(finder.Chart.ID);
13034
+ this.Draw();
13035
+ }
13036
+ }
13037
+ }
13038
+ break;
13039
+ case JSCHART_MENU_ID.CMD_SHOW_DRAWTOOL_ID:
13040
+ var option={Name:'画图工具', Top:this.Frame.ChartBorder.Top };
13041
+ var extendChart=this.CreateExtendChart(option.Name, option); //创建扩展图形
13042
+ this.SetSizeChange(true);
13043
+ this.Draw();
13044
+ break;
13045
+ case JSCHART_MENU_ID.CMD_HIDE_DRAWTOOL_ID:
13046
+ var drawTools=this.GetExtendChartByClassName('DrawToolsButton');
13047
+ if (drawTools)
13048
+ {
13049
+ var toolsWidth=drawTools.Chart.Width;
13050
+ var toolsIndex=parseInt(drawTools.Index);
13051
+ for(var i=toolsIndex+1; i<this.ExtendChartPaint.length; ++i) //在画图工具后面创建的需要减去工具的宽度
13052
+ {
13053
+ var item=this.ExtendChartPaint[i];
13054
+ if (item.ClassName=='StockChip')
13055
+ {
13056
+ item.Left-=toolsWidth;
13057
+ }
13058
+ }
13059
+ this.DeleteExtendChart(drawTools);
13060
+ this.Frame.ChartBorder.Right-=toolsWidth;
13061
+ this.SetSizeChange(true);
13062
+ this.Draw();
13063
+ }
13064
+ break;
13065
+ case JSCHART_MENU_ID.CMD_SHOW_STOCKCHIP_ID:
13066
+ var option={Name:'筹码分布', ShowType:1, Width:230 };
13067
+ var extendChart=this.CreateExtendChart(option.Name, option); //创建扩展图形
13068
+ this.SetSizeChange(true);
13069
+ this.Draw();
13070
+ break;
13071
+ case JSCHART_MENU_ID.CMD_HIDE_STOCKCHIP_ID:
13072
+ var StockChip=chart.GetExtendChartByClassName('StockChip');
13073
+ if (StockChip)
13074
+ {
13075
+ var chipWidth=StockChip.Chart.Width;
13076
+ var chipIndex=parseInt(StockChip.Index);
13077
+ for(var i=chipIndex+1; i<this.ExtendChartPaint.length; ++i) //在筹码后面创建的需要筹码的宽度
13078
+ {
13079
+ var item=this.ExtendChartPaint[i];
13080
+ if (item.ClassName=='DrawToolsButton')
13081
+ {
13082
+ item.Left-=chipWidth;
13083
+ }
13084
+ }
13085
+ this.DeleteExtendChart(StockChip);
13086
+ this.Frame.ChartBorder.Right-=chipWidth;
13087
+ this.SetSizeChange(true);
13088
+ this.Draw();
13089
+ }
13090
+ break;
13091
+ case JSCHART_MENU_ID.CMD_ENABLE_SELECT_RECT_ID:
13092
+ if (IFrameSplitOperator.IsBool(srcParam))
13093
+ this.EnableSelectRect=srcParam;
13094
+ break;
13095
+ case JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID:
13096
+ if (this.ChangeDayCount && param!=null)
13097
+ this.ChangeDayCount(param);
13098
+ break;
13099
+ }
13100
+ }
12888
13101
  }
12889
13102
 
12890
13103
  function GetDevicePixelRatio()
@@ -12982,11 +13195,12 @@ function GetScrollPosition()
12982
13195
  var scrollPos={};
12983
13196
  var scrollTop=0;
12984
13197
  var scrollLeft=0;
12985
- if(document.documentElement && document.documentElement.scrollTop)
13198
+ if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft))
12986
13199
  {
12987
13200
  scrollTop=document.documentElement.scrollTop;
12988
13201
  scrollLeft=document.documentElement.scrollLeft;
12989
- }else if(document.body)
13202
+ }
13203
+ else if(document.body)
12990
13204
  {
12991
13205
  scrollTop=document.body.scrollTop;
12992
13206
  scrollLeft=document.body.scrollLeft;
@@ -47950,7 +48164,8 @@ function FrameButtomToolbarPaint()
47950
48164
  this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);
47951
48165
  }
47952
48166
 
47953
- var font=this.TitleFont(rtBG.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom);
48167
+ var font=this.GetTitleFont(rtBG.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom);
48168
+ var svgFont=this.GetSVGFont(rtBG.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom);
47954
48169
  this.Canvas.textBaseline='middle';
47955
48170
  this.Canvas.textAlign='center';
47956
48171
  this.Canvas.font=font;
@@ -47958,9 +48173,23 @@ function FrameButtomToolbarPaint()
47958
48173
  for(var i=0;i<this.AryButton.length;++i)
47959
48174
  {
47960
48175
  var item=this.AryButton[i];
47961
- if (!item.Title) return;
47962
- var textWidth=this.Canvas.measureText(item.Title).width+2;
47963
- var buttonWidth=textWidth+this.ButtonConfig.Mergin.Left+this.ButtonConfig.Mergin.Right;
48176
+ if (!item.Title && !(item.SVGButton && item.SVGButton.Symbol)) return;
48177
+
48178
+ var textWidth=0;
48179
+ if (item.Title)
48180
+ {
48181
+ textWidth=this.Canvas.measureText(item.Title).width+2;
48182
+ }
48183
+
48184
+ var svgButtonWidth=0;
48185
+ if (item.SVGButton && item.SVGButton.Symbol)
48186
+ {
48187
+ svgButtonWidth=this.ButtonConfig.SVG.Size;
48188
+ if (textWidth>0) svgButtonWidth+=this.ButtonConfig.SVG.MerginLeft;
48189
+
48190
+ }
48191
+
48192
+ var buttonWidth=textWidth+svgButtonWidth+this.ButtonConfig.Mergin.Left+this.ButtonConfig.Mergin.Right;
47964
48193
  var rtButton={ Left:xBotton, Top:rtBG.Top, Bottom:rtBG.Bottom, Height:rtBG.Height, Width:buttonWidth };
47965
48194
  rtButton.Right=rtButton.Left+rtButton.Width;
47966
48195
 
@@ -47997,12 +48226,50 @@ function FrameButtomToolbarPaint()
47997
48226
  this.Canvas.stroke();
47998
48227
  }
47999
48228
 
48000
- this.Canvas.fillStyle=titleColor;
48001
- var xText=rtButton.Left+rtButton.Width/2; //居中
48002
- var yText=rtButton.Top+this.ButtonConfig.Mergin.Top+(rtButton.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom)/2;
48003
- this.Canvas.fillText(item.Title,xText,yText);
48229
+ if (item.Title)
48230
+ {
48231
+ this.Canvas.fillStyle=titleColor;
48232
+ var xText=rtButton.Left+(rtButton.Width-svgButtonWidth)/2; //居中
48233
+ var yText=rtButton.Top+this.ButtonConfig.Mergin.Top+(rtButton.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom)/2;
48234
+ this.Canvas.fillText(item.Title,xText,yText);
48235
+ }
48236
+
48237
+
48238
+ var rtSVG=null;
48239
+ if (item.SVGButton && item.SVGButton.Symbol)
48240
+ {
48241
+ this.Canvas.font=svgFont;
48242
+ this.Canvas.fillStyle=titleColor;
48243
+ var xText=rtButton.Right-this.ButtonConfig.SVG.Size/2-this.ButtonConfig.Mergin.Right;
48244
+ this.Canvas.fillText(item.SVGButton.Symbol,xText,yText);
48245
+ this.Canvas.font=font;
48246
+
48247
+ rtSVG={Left:rtButton.Right-this.ButtonConfig.Mergin.Right-this.ButtonConfig.SVG.Size, Top:rtButton.Top, Width:this.ButtonConfig.SVG.Size, Height:this.ButtonConfig.SVG.Size};
48248
+ rtSVG.Right=rtSVG.Left+rtSVG.Width;
48249
+ rtSVG.Bottom=rtSVG.Top+rtSVG.Height;
48250
+ }
48251
+
48252
+ //{ Rect:rtButton, ID:item.ID, Data:item, RectSVG:rtSVG }
48253
+ if (textWidth>0 && svgButtonWidth>0)
48254
+ {
48255
+ var rtText={ Left:rtButton.Left, Top:rtButton.Top, Bottom:rtButton.Bottom };
48256
+ rtText.Right=rtText.Left+textWidth+this.ButtonConfig.Mergin.Left+this.ButtonConfig.SVG.MerginLeft/2;
48257
+ var cacheItem={ Rect:rtText, ID:item.ID, Data:item, RectCell:rtButton, ButtonType:0 };
48258
+ this.AryRectButton.push(cacheItem);
48259
+
48260
+ var rtSVG={Left:rtText.Right, Right:rtButton.Right, Top:rtButton.Top, Bottom:rtButton.Bottom };
48261
+ var cacheItem={ Rect:rtSVG, ID:item.ID, Data:item, RectCell:rtButton, ButtonType:1 };
48262
+ this.AryRectButton.push(cacheItem);
48263
+ }
48264
+ else
48265
+ {
48266
+ var cacheItem={ Rect:rtButton, ID:item.ID, Data:item, RectCell:rtButton }; //RectCell 全部的大小
48267
+ if (textWidth>0) cacheItem.ButtonType=0;
48268
+ else if (svgButtonWidth>0) cacheItem.ButtonType=1;
48269
+ this.AryRectButton.push(cacheItem);
48270
+ }
48271
+
48004
48272
 
48005
- this.AryRectButton.push({ Rect:rtButton, ID:item.ID, Data:item });
48006
48273
 
48007
48274
  xBotton+=buttonWidth+1;
48008
48275
  }
@@ -48031,13 +48298,22 @@ function FrameButtomToolbarPaint()
48031
48298
  return null;
48032
48299
  }
48033
48300
 
48034
- this.TitleFont=function(height)
48301
+ this.GetTitleFont=function(height)
48035
48302
  {
48036
48303
  var config=this.ButtonConfig.Font;
48037
- var fontSize=height;
48304
+ var fontSize=height*GetDevicePixelRatio();
48038
48305
  if (IFrameSplitOperator.IsPlusNumber(config.Size)) fontSize=config.Size;
48039
48306
 
48040
- var font=`${fontSize*GetDevicePixelRatio()}px ${config.Family}`;
48307
+ var font=`${fontSize}px ${config.Family}`;
48308
+ return font;
48309
+ }
48310
+
48311
+ this.GetSVGFont=function(height)
48312
+ {
48313
+ var config=this.ButtonConfig.SVG;
48314
+ var fontSize=height*GetDevicePixelRatio();
48315
+ if (IFrameSplitOperator.IsPlusNumber(config.Size)) fontSize=config.Size;
48316
+ var font=`${fontSize}px ${config.Family}`;
48041
48317
  return font;
48042
48318
  }
48043
48319
 
@@ -48050,7 +48326,7 @@ function FrameButtomToolbarPaint()
48050
48326
  if (x>rect.Left && x<rect.Right && y>rect.Top && y<rect.Bottom)
48051
48327
  {
48052
48328
  var frame=this.GetFrame();
48053
- var result={ ID:item.Data.ID, Rect:rect, FrameID:this.FrameID, Frame:frame, Data:item.Data };
48329
+ var result={ ID:item.Data.ID, Rect:rect, FrameID:this.FrameID, Frame:frame, Data:item.Data, ButtonType:item.ButtonType, RectCell:item.RectCell, };
48054
48330
  return result;
48055
48331
  }
48056
48332
  }
@@ -57391,7 +57667,7 @@ function IChartDrawPicture()
57391
57667
  if (option.LineWidth>0) this.LineWidth=option.LineWidth;
57392
57668
  if (option.AreaColor) this.AreaColor=option.AreaColor;
57393
57669
  if (option.PointColor) this.PointColor=option.PointColor;
57394
- if (option.MoveOnPointColor) this.SelectPointColor=option.PointColor;
57670
+ if (option.MoveOnPointColor) this.MoveOnPointColor=option.MoveOnPointColor;
57395
57671
  if (option.PointRadius) this.PointRadius=option.PointRadius;
57396
57672
  if (IFrameSplitOperator.IsNumber(option.SquareSize)) this.SquareSize=option.SquareSize;
57397
57673
  if (IFrameSplitOperator.IsBool(option.IsShowPoint)) this.IsShowPoint=option.IsShowPoint;
@@ -57590,8 +57866,8 @@ function IChartDrawPicture()
57590
57866
  for(var i=0; i<this.Point.length; ++i)
57591
57867
  {
57592
57868
  var item=this.Point[i];
57593
- var xValue=parseInt(this.Frame.GetXData(item.Y));
57594
- var yValue=this.Frame.GetYData(item.X);
57869
+ var xValue=parseInt(this.Frame.GetXData(item.Y,false));
57870
+ var yValue=this.Frame.GetYData(item.X,false);
57595
57871
 
57596
57872
  var valueItem={ XValue:xValue, YValue:yValue };
57597
57873
  var minuteItem=data.Data[xValue];
@@ -57605,8 +57881,8 @@ function IChartDrawPicture()
57605
57881
  for(var i=0; i<this.Point.length; ++i)
57606
57882
  {
57607
57883
  var item=this.Point[i];
57608
- var xValue=parseInt(this.Frame.GetXData(item.X));
57609
- var yValue=this.Frame.GetYData(item.Y);
57884
+ var xValue=parseInt(this.Frame.GetXData(item.X,false));
57885
+ var yValue=this.Frame.GetYData(item.Y,false);
57610
57886
 
57611
57887
  if (xValue>=data.Data.length) //超过当前数据,直接读固定时间
57612
57888
  {
@@ -57681,7 +57957,7 @@ function IChartDrawPicture()
57681
57957
  }
57682
57958
 
57683
57959
  data.FindDataIndexByDateTime(aryDateTime);
57684
- for(var i in aryDateTime)
57960
+ for(var i=0; i<aryDateTime.length; ++i)
57685
57961
  {
57686
57962
  var findItem=aryDateTime[i];
57687
57963
  var valueItem=this.Value[i];
@@ -57689,6 +57965,17 @@ function IChartDrawPicture()
57689
57965
  }
57690
57966
  }
57691
57967
 
57968
+ //重置X索引数据
57969
+ this.ResetXValue=function()
57970
+ {
57971
+ for(var i=0; i<this.Value.length; ++i)
57972
+ {
57973
+ var item=this.Value[i];
57974
+ item.XValue=null;
57975
+ }
57976
+ return true;
57977
+ }
57978
+
57692
57979
  //xStep,yStep 移动的偏移量
57693
57980
  this.Move=function(xStep,yStep)
57694
57981
  {
@@ -57814,6 +58101,8 @@ function IChartDrawPicture()
57814
58101
  for(var i=0; i<this.Value.length; ++i)
57815
58102
  {
57816
58103
  var item=this.Value[i];
58104
+ if (!IFrameSplitOperator.IsNumber(item.XValue)) return null; //无效索引 不显示
58105
+
57817
58106
  var dataIndex=item.XValue-data.DataOffset;
57818
58107
  if (dataIndex<0 || dataIndex>=showCount) ++invaildX;
57819
58108
 
@@ -58884,7 +59173,7 @@ function ChartDrawPictureLine()
58884
59173
  if (this.IsFrameMinSize()) return;
58885
59174
  if (!this.IsShow) return;
58886
59175
 
58887
- var drawPoint=this.CalculateDrawPoint( {IsCheckX:true, IsCheckY:true} );
59176
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:true, IsCheckY:false} );
58888
59177
  if (!drawPoint) return;
58889
59178
  if (drawPoint.length!=2) return;
58890
59179
 
@@ -68717,12 +69006,14 @@ function JSChartResource()
68717
69006
  BorderColor:"rgb(204,204,204)",
68718
69007
  Button:
68719
69008
  {
68720
- Font:{ Family:"微软雅黑" },
69009
+ Font:{ Family:"微软雅黑", Size:12*GetDevicePixelRatio() },
68721
69010
  TitleColor: { Selected:"rgb(255,255,255)", Default:"rgb(125,125,125)", MoveOn:"rgb(234,85,4)" },
68722
69011
  BGColor: { Selected:"rgb(234,85,4)", Default:"rgb(235,235,235)", MoveOn:"rgb(242,242,242)" },
68723
69012
  BorderColor:"rgb(204,204,204)",
68724
69013
 
68725
- Mergin: { Left:5*GetDevicePixelRatio(), Right:5*GetDevicePixelRatio(), Top:4*GetDevicePixelRatio(), Bottom:2*GetDevicePixelRatio() }
69014
+ Mergin: { Left:5*GetDevicePixelRatio(), Right:5*GetDevicePixelRatio(), Top:4*GetDevicePixelRatio(), Bottom:2*GetDevicePixelRatio() },
69015
+
69016
+ SVG:{ Family:"iconfont", Size:12*GetDevicePixelRatio(), MerginLeft:4*GetDevicePixelRatio() }
68726
69017
  }
68727
69018
  }
68728
69019
 
@@ -69741,6 +70032,15 @@ function JSChartResource()
69741
70032
  if (IFrameSplitOperator.IsNumber(item.Top)) destItem.Top=item.Top;
69742
70033
  if (IFrameSplitOperator.IsNumber(item.Bottom)) destItem.Bottom=item.Bottom;
69743
70034
  }
70035
+
70036
+ if (button.SVG)
70037
+ {
70038
+ var item=button.SVG;
70039
+ var destItem=this.FrameButtomToolbar.Button.SVG;
70040
+ if (IFrameSplitOperator.IsNumber(item.Size)) destItem.Size=item.Size;
70041
+ if (IFrameSplitOperator.IsNumber(item.MerginLeft)) destItem.MerginLeft=item.MerginLeft;
70042
+ if (item.Family) destItem.Family=item.Family;
70043
+ }
69744
70044
  }
69745
70045
 
69746
70046
  }
@@ -76052,12 +76352,16 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
76052
76352
  }
76053
76353
  }
76054
76354
 
76055
-
76056
76355
  //注册鼠标右键事件
76057
76356
  this.OnRightMenu=function(x,y,e)
76058
76357
  {
76059
76358
  var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
76060
- if (this.RightMenu)
76359
+ if (this.EnablePopMenuV2)
76360
+ {
76361
+ var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
76362
+ this.PopuRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
76363
+ }
76364
+ else if (this.RightMenu)
76061
76365
  {
76062
76366
  var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
76063
76367
  e.data={ Chart:this, FrameID:frameId };
@@ -76073,11 +76377,286 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
76073
76377
  }
76074
76378
  }
76075
76379
 
76380
+ //右键菜单数据
76381
+ this.GetRightMenuData=function(frameID)
76382
+ {
76383
+ var windowCount=this.Frame.SubFrame.length; //窗口个数
76384
+ var klineChart=this.ChartPaint[0];
76385
+ var priceGap=klineChart.PriceGap; //缺口配置信息
76386
+ var coordinateType=null, yCoordinateType=null; //坐标类型
76387
+ var mainFrame=null;
76388
+ if (this.Frame.SubFrame[0] && this.Frame.SubFrame[0].Frame) mainFrame=this.Frame.SubFrame[0].Frame;
76389
+ if (mainFrame)
76390
+ {
76391
+ coordinateType=mainFrame.CoordinateType;
76392
+ if (mainFrame.YSplitOperator) yCoordinateType=mainFrame.YSplitOperator.CoordinateType;
76393
+ }
76394
+
76395
+ var aryKLineInfo=[]; //信息地雷
76396
+ for(var i=0;i<this.ChartInfo.length;++i)
76397
+ {
76398
+ var item=this.ChartInfo[i];
76399
+ if (item && item.ClassName) aryKLineInfo.push(item.ClassName);
76400
+ }
76401
+
76402
+ var aryOverlaySymbol=[]; //叠加的股票列表
76403
+ for(var i=0; i<this.OverlayChartPaint.length; ++i)
76404
+ {
76405
+ var item=this.OverlayChartPaint[i];
76406
+ if (item && item.Symbol) aryOverlaySymbol.push(item.Symbol)
76407
+ }
76408
+
76409
+ var bBGSpit=false, bShowDrawTool=false, bShowStockChip=false;
76410
+ if (this.GetExtendChartByClassName("SessionBreaksPaint")) bBGSpit=true;
76411
+ if (this.GetExtendChartByClassName('DrawToolsButton')) bShowDrawTool=true; //画图工具
76412
+ if (this.GetExtendChartByClassName('StockChip')) bShowStockChip=true; //筹码
76413
+
76414
+ var aryMenu=
76415
+ [
76416
+ {
76417
+ Name:"分析周期",
76418
+ SubMenu:
76419
+ [
76420
+ { Name:"日线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[0] }, Checked:this.Period==0 },
76421
+ { Name:"周线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[1] }, Checked:this.Period==1 },
76422
+ { Name:"双周线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[21]}, Checked:this.Period==21 },
76423
+ { Name:"月线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[2]}, Checked:this.Period==2 },
76424
+ { Name:"季线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[9]}, Checked:this.Period==9 },
76425
+ { Name:"半年", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[22]}, Checked:this.Period==22 },
76426
+ { Name:"年线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[3]}, Checked:this.Period==3 },
76427
+ { Name:"1分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[4]}, Checked:this.Period==4 },
76428
+ { Name:"5分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[5]}, Checked:this.Period==5 },
76429
+ { Name:"15分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[6]}, Checked:this.Period==6 },
76430
+ { Name:"30分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[7]}, Checked:this.Period==7 },
76431
+ { Name:"60分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[8]}, Checked:this.Period==8 },
76432
+ { Name:"2小时", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[11]}, Checked:this.Period==11 },
76433
+ { Name:"4小时", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[12]}, Checked:this.Period==12 },
76434
+ { Name:"分笔", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[10]}, Checked:this.Period==10 },
76435
+ { Name:"自定义周期:3分钟", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[20003]}, Checked:this.Period==20003 },
76436
+ { Name:"自定义周期:35分钟", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[20035]}, Checked:this.Period==20035 },
76437
+ { Name:"自定义周期:8日", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[40008]}, Checked:this.Period==40008 },
76438
+ ]
76439
+ },
76440
+ {
76441
+ Name:"指标切换",
76442
+ SubMenu:
76443
+ [
76444
+ { Name:"均线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "均线"]}},
76445
+ { Name:"BOLL", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "BOLL"]}},
76446
+ { Name:"MACD", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "MACD"]}},
76447
+ { Name:"KDJ", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "KDJ"]}},
76448
+ { Name:"VOL", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "VOL"]}},
76449
+ { Name:"RSI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "RSI"]}},
76450
+ { Name:"BRAR", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "BRAR"]}},
76451
+ { Name:"WR", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "WR"]}},
76452
+ ]
76453
+ },
76454
+ {
76455
+ Name:"五彩K线",
76456
+ SubMenu:
76457
+ [
76458
+ { Name:"十字星", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-十字星"]}},
76459
+ { Name:"早晨之星", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-早晨之星"]}},
76460
+ { Name:"垂死十字", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-垂死十字"]}},
76461
+ { Name:"三只乌鸦", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-三只乌鸦"]}},
76462
+ { Name:"光脚阴线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-光脚阴线"]}},
76463
+ { Name:"黄昏之星", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-黄昏之星"]}},
76464
+ ]
76465
+
76466
+ },
76467
+ {
76468
+ Name:"专家系统",
76469
+ SubMenu:
76470
+ [
76471
+ { Name:"BIAS", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-BIAS"]}},
76472
+ { Name:"CCI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-CCI"]}},
76473
+ { Name:"DMI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-DMI"]}},
76474
+ { Name:"KD", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-KD"]}},
76475
+ { Name:"BOLL", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-BOLL"]}},
76476
+ { Name:"KDJ", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-KDJ"]}},
76477
+ ]
76478
+ },
76479
+ {
76480
+ Name:"信息地雷",
76481
+ SubMenu:
76482
+ [
76483
+ { Name:"公告", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["公告", !aryKLineInfo.includes("AnnouncementInfo")]}, Checked:aryKLineInfo.includes("AnnouncementInfo") },
76484
+ { Name:"业绩预告", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["业绩预告", !aryKLineInfo.includes("PforecastInfo")]}, Checked:aryKLineInfo.includes("PforecastInfo") },
76485
+ { Name:"调研", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["调研", !aryKLineInfo.includes("ResearchInfo") ]}, Checked:aryKLineInfo.includes("ResearchInfo") },
76486
+ { Name:"大宗交易", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["大宗交易", !aryKLineInfo.includes("BlockTrading")]}, Checked:aryKLineInfo.includes("BlockTrading") },
76487
+ { Name:"龙虎榜", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["龙虎榜", !aryKLineInfo.includes("TradeDetail")]}, Checked:aryKLineInfo.includes("TradeDetail") },
76488
+ { Name:"互动易", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["互动易", !aryKLineInfo.includes("InvestorInfo")]}, Checked:aryKLineInfo.includes("InvestorInfo") },
76489
+ ]
76490
+ },
76491
+ {
76492
+ Name:"缺口提示",
76493
+ SubMenu:
76494
+ [
76495
+ { Name:"显示1个缺口", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID, Args:[true, 1]}, Checked:(priceGap.Enable==true && priceGap.Count==1) },
76496
+ { Name:"显示2个缺口", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID, Args:[true, 2]}, Checked:(priceGap.Enable==true && priceGap.Count==2) },
76497
+ { Name:"显示3个缺口", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID, Args:[true, 3]}, Checked:(priceGap.Enable==true && priceGap.Count==3) },
76498
+ { Name:"隐藏缺口", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID, Args:[false]}, Checked:priceGap.Enable==false },
76499
+ ]
76500
+ },
76501
+ {
76502
+ Name:"叠加品种",
76503
+ SubMenu:
76504
+ [
76505
+ { Name:"上证指数", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["000001.sh", !aryOverlaySymbol.includes("000001.sh")]}, Checked:aryOverlaySymbol.includes("000001.sh") },
76506
+ { Name:"深证成指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399001.sz", !aryOverlaySymbol.includes("399001.sz")]}, Checked:aryOverlaySymbol.includes("399001.sz") },
76507
+ { Name:"中小板指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399005.sz", !aryOverlaySymbol.includes("399005.sz")]}, Checked:aryOverlaySymbol.includes("399005.sz") },
76508
+ { Name:"创业板指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399006.sz", !aryOverlaySymbol.includes("399006.sz")]}, Checked:aryOverlaySymbol.includes("399006.sz") },
76509
+ { Name:"沪深300", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["000300.sh", !aryOverlaySymbol.includes("000300.sh")]}, Checked:aryOverlaySymbol.includes("000300.sh")},
76510
+ ]
76511
+ },
76512
+ {
76513
+ Name:"主图线型",
76514
+ SubMenu:
76515
+ [
76516
+ { Name:"K线(空心阳线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[3]} },
76517
+ { Name:"K线(实心阳线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[0]} },
76518
+ { Name:"美国线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[2, true, { IsThinAKBar:false }]} },
76519
+ { Name:"美国线(细)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[2, true, { IsThinAKBar:true }]} },
76520
+ { Name:"收盘线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[1]} },
76521
+ { Name:"收盘面积", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[4]} },
76522
+ { Name:"K线(空心阳线阴线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[6]} },
76523
+ { Name:"Heikin Ashi", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[11]} },
76524
+ { Name:"Line Break", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[12]} },
76525
+ { Name:"High-low", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[13]} },
76526
+ { Name:"HLC Area", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[15]} },
76527
+ ]
76528
+ },
76529
+ {
76530
+ Name:"坐标类型",
76531
+ SubMenu:
76532
+ [
76533
+ { Name:"反转坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ IsReverse:coordinateType==0 }]}, Checked:coordinateType==1 },
76534
+ { Name:JSPopMenu.SEPARATOR_LINE_NAME },
76535
+
76536
+ { Name:"普通坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:0 }]}, Checked:yCoordinateType==0 },
76537
+ { Name:"百分比坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:1 }]}, Checked:yCoordinateType==1 },
76538
+ { Name:"对数坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:2 }]}, Checked:yCoordinateType==2 },
76539
+ { Name:"等比坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:3 }]}, Checked:yCoordinateType==3 },
76540
+ { Name:"等分坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:4 }]}, Checked:yCoordinateType==4 },
76541
+ { Name:"黄金分割", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:5 }]}, Checked:yCoordinateType==5},
76542
+
76543
+ ]
76544
+ },
76545
+ {
76546
+ Name:"指标窗口个数",
76547
+ SubMenu:
76548
+ [
76549
+ { Name:"1个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[2]}, Checked:2==windowCount },
76550
+ { Name:"2个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[3]}, Checked:3==windowCount },
76551
+ { Name:"3个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[4]}, Checked:4==windowCount },
76552
+ { Name:"4个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[5]}, Checked:5==windowCount },
76553
+ { Name:"5个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[6]}, Checked:6==windowCount },
76554
+ ]
76555
+ },
76556
+ {
76557
+ Name:"其他设置",
76558
+ SubMenu:
76559
+ [
76560
+
76561
+ { Name:"禁止拖拽", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_DRAG_MODE_ID, Args:[0]}, Checked:0==this.DragMode },
76562
+ { Name:"启动拖拽", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_DRAG_MODE_ID, Args:[1]}, Checked:1==this.DragMode },
76563
+ { Name:"区间选择", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_DRAG_MODE_ID, Args:[2]}, Checked:2==this.DragMode },
76564
+ { Name:JSPopMenu.SEPARATOR_LINE_NAME },
76565
+
76566
+ { Name:"背景分割", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_BG_SPLIT_ID, Args:[!bBGSpit]}, Checked:bBGSpit},
76567
+
76568
+ { Name:"画图工具", Data:{ ID:bShowDrawTool?JSCHART_MENU_ID.CMD_HIDE_DRAWTOOL_ID:JSCHART_MENU_ID.CMD_SHOW_DRAWTOOL_ID, Args:[]}, Checked:bShowDrawTool},
76569
+
76570
+ { Name:"移动筹码图", Data:{ ID:bShowStockChip?JSCHART_MENU_ID.CMD_HIDE_STOCKCHIP_ID:JSCHART_MENU_ID.CMD_SHOW_STOCKCHIP_ID, Args:[]}, Checked:bShowStockChip},
76571
+ ]
76572
+ }
76573
+ ];
76574
+
76575
+ //复权
76576
+ if(!MARKET_SUFFIX_NAME.IsSHSZIndex(this.Symbol) && !MARKET_SUFFIX_NAME.IsBIT(this.Symbol))
76577
+ {
76578
+ var rightMenu=
76579
+ {
76580
+ Name:"复权处理",
76581
+ SubMenu:
76582
+ [
76583
+ { Name:"不复权", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_RIGHT_ID, Args:[0]}, Checked:0==this.Right },
76584
+ { Name:"前复权", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_RIGHT_ID, Args:[1]}, Checked:1==this.Right },
76585
+ { Name:"后复权", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_RIGHT_ID, Args:[2]}, Checked:2==this.Right }
76586
+ ]
76587
+ };
76588
+
76589
+ aryMenu.splice(1,0,rightMenu);
76590
+ }
76591
+
76592
+ //删除菜单
76593
+ for(var i=0;i<aryMenu.length;++i)
76594
+ {
76595
+ var item=aryMenu[i];
76596
+ if (item.Name=="五彩K线")
76597
+ {
76598
+ if (this.ColorIndex)
76599
+ {
76600
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
76601
+ item.SubMenu.push({ Name:"删除五彩K线", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_COLOR_INDEX_ID} });
76602
+ }
76603
+ }
76604
+ else if (item.Name=="专家系统")
76605
+ {
76606
+ if (this.TradeIndex)
76607
+ {
76608
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
76609
+ item.SubMenu.push({ Name:"删除专家系统", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_TRADE_INDEX_ID} });
76610
+ }
76611
+ }
76612
+ else if (item.Name=="叠加品种")
76613
+ {
76614
+ for(var j=0;j<item.SubMenu.length;++j)
76615
+ {
76616
+ if (item.SubMenu[j].Checked)
76617
+ {
76618
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
76619
+ item.SubMenu.push({ Name:"取消叠加", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_ALL_OVERLAY_SYMBOL_ID} });
76620
+ break;
76621
+ }
76622
+ }
76623
+ }
76624
+ else if (item.Name=="信息地雷")
76625
+ {
76626
+ for(var j=0;j<item.SubMenu.length;++j)
76627
+ {
76628
+ if (item.SubMenu[j].Checked)
76629
+ {
76630
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
76631
+ item.SubMenu.push({ Name:"删除所有", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_ALL_KLINE_INFO_ID} });
76632
+ break;
76633
+ }
76634
+ }
76635
+ }
76636
+ }
76637
+
76638
+ return aryMenu;
76639
+ }
76640
+
76641
+ this.PopuRightMenuV2=function(data,e)
76642
+ {
76643
+ if (!this.JSPopMenu) return;
76644
+ var x=data.X, y=data.Y;
76645
+ var frameID=data.FrameID;
76646
+ var menuData={ Menu:this.GetRightMenuData(frameID), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
76647
+ menuData.ClickCallback=(data)=>{ this.OnClickRightMenu(data); }
76648
+
76649
+ this.PopuMenuByRClick(menuData, x, y);
76650
+ }
76651
+
76076
76652
  //重新加载画图工具(切换股票|周期)
76077
76653
  this.ReloadChartDrawPicture=function()
76078
76654
  {
76079
76655
  this.ChartDrawPicture=[];
76080
- this.ChartDrawStorageCache;
76656
+ if (this.SelectChartDrawPicture) this.SelectChartDrawPicture.IsSelected=false;
76657
+ this.SelectChartDrawPicture=null;
76658
+ this.CurrentChartDrawPicture=null;
76659
+
76081
76660
  if (this.ChartDrawStorage)
76082
76661
  {
76083
76662
  this.ChartDrawStorageCache=this.ChartDrawStorage.GetDrawData( {Symbol:this.Symbol, Period:this.Period} );
@@ -77468,7 +78047,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
77468
78047
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_EXTENDCHART_BUTTON);
77469
78048
  if (event && event.Callback)
77470
78049
  {
77471
- var data={ Info:button, PreventDefault:false }; //PreventDefault 是否阻止内置的点击处理
78050
+ var data={ Info:button, PreventDefault:false, e:e }; //PreventDefault 是否阻止内置的点击处理
77472
78051
  event.Callback(event,data,this);
77473
78052
  if (data.PreventDefault) return;
77474
78053
  }
@@ -79435,7 +80014,13 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
79435
80014
  //注册鼠标右键事件
79436
80015
  this.OnRightMenu=function(x,y,e)
79437
80016
  {
79438
- if (this.RightMenu)
80017
+ var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
80018
+ if (this.EnablePopMenuV2)
80019
+ {
80020
+ var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
80021
+ this.PopuRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
80022
+ }
80023
+ else if (this.RightMenu)
79439
80024
  {
79440
80025
  var frameId=this.Frame.PtInFrame(x,y);
79441
80026
  e.data={ Chart:this, FrameID:frameId };
@@ -79451,6 +80036,107 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
79451
80036
  }
79452
80037
  }
79453
80038
 
80039
+ //右键菜单数据
80040
+ this.GetRightMenuData=function(frameID)
80041
+ {
80042
+ var windowCount=this.Frame.SubFrame.length; //窗口个数
80043
+
80044
+ var aryOverlaySymbol=[]; //叠加的股票列表
80045
+ for(var i=0; i<this.OverlayChartPaint.length; ++i)
80046
+ {
80047
+ var item=this.OverlayChartPaint[i];
80048
+ if (item && item.Symbol) aryOverlaySymbol.push(item.Symbol)
80049
+ }
80050
+
80051
+ var aryMenu=
80052
+ [
80053
+ {
80054
+ Name:"叠加品种",
80055
+ SubMenu:
80056
+ [
80057
+ { Name:"上证指数", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["000001.sh", !aryOverlaySymbol.includes("000001.sh")]}, Checked:aryOverlaySymbol.includes("000001.sh") },
80058
+ { Name:"深证成指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399001.sz", !aryOverlaySymbol.includes("399001.sz")]}, Checked:aryOverlaySymbol.includes("399001.sz") },
80059
+ { Name:"中小板指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399005.sz", !aryOverlaySymbol.includes("399005.sz")]}, Checked:aryOverlaySymbol.includes("399005.sz") },
80060
+ { Name:"创业板指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399006.sz", !aryOverlaySymbol.includes("399006.sz")]}, Checked:aryOverlaySymbol.includes("399006.sz") },
80061
+ { Name:"沪深300", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["000300.sh", !aryOverlaySymbol.includes("000300.sh")]}, Checked:aryOverlaySymbol.includes("000300.sh")},
80062
+ ]
80063
+ },
80064
+ {
80065
+ Name:"多日分时图",
80066
+ SubMenu:
80067
+ [
80068
+ { Name:"当日分时图", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[1]}, Checked:this.DayCount==1 },
80069
+ { Name:"最近2日", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[2]}, Checked:this.DayCount==2 },
80070
+ { Name:"最近3日", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[3]}, Checked:this.DayCount==3 },
80071
+ { Name:"最近4日", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[4]}, Checked:this.DayCount==4 },
80072
+ { Name:"最近5日", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[5]}, Checked:this.DayCount==5 },
80073
+ ]
80074
+ },
80075
+ {
80076
+ Name:"指标窗口个数",
80077
+ SubMenu:
80078
+ [
80079
+ { Name:"1个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[2]}, Checked:3==windowCount },
80080
+ { Name:"2个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[3]}, Checked:4==windowCount },
80081
+ { Name:"3个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[4]}, Checked:5==windowCount },
80082
+ { Name:"4个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[5]}, Checked:6==windowCount },
80083
+ { Name:"5个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[6]}, Checked:7==windowCount },
80084
+ ]
80085
+ },
80086
+ {
80087
+ Name:"指标切换",
80088
+ SubMenu:
80089
+ [
80090
+ { Name:"MACD", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "MACD"]}},
80091
+ { Name:"DMI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "DMI"]}},
80092
+ { Name:"DMA", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "DMA"]}},
80093
+ { Name:"BRAR", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "BRAR"]}},
80094
+ { Name:"KDJ", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "KDJ"]}},
80095
+ { Name:"RSI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "RSI"]}},
80096
+ { Name:"WR", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "WR"]}},
80097
+ { Name:"CCI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "CCI"]}},
80098
+ { Name:"TRIX", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "TRIX"]}},
80099
+ ]
80100
+ },
80101
+ {
80102
+ Name:"区间选择",Data:{ ID: JSCHART_MENU_ID.CMD_ENABLE_SELECT_RECT_ID, Args:[!this.EnableSelectRect]}, Checked:this.EnableSelectRect
80103
+ }
80104
+
80105
+ ];
80106
+
80107
+
80108
+ //删除菜单
80109
+ for(var i=0;i<aryMenu.length;++i)
80110
+ {
80111
+ var item=aryMenu[i];
80112
+ if (item.Name=="叠加品种")
80113
+ {
80114
+ for(var j=0;j<item.SubMenu.length;++j)
80115
+ {
80116
+ if (item.SubMenu[j].Checked)
80117
+ {
80118
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
80119
+ item.SubMenu.push({ Name:"取消叠加", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_ALL_OVERLAY_SYMBOL_ID} });
80120
+ break;
80121
+ }
80122
+ }
80123
+ }
80124
+ }
80125
+
80126
+ return aryMenu;
80127
+ }
80128
+
80129
+ this.PopuRightMenuV2=function(data,e)
80130
+ {
80131
+ if (!this.JSPopMenu) return;
80132
+ var x=data.X, y=data.Y;
80133
+ var frameID=data.FrameID;
80134
+ var menuData={ Menu:this.GetRightMenuData(frameID), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
80135
+ menuData.ClickCallback=(data)=>{ this.OnClickRightMenu(data); }
80136
+
80137
+ this.PopuMenuByRClick(menuData, x, y);
80138
+ }
80139
+
79454
80140
  this.OnWheel=function(e)
79455
80141
  {
79456
80142
  JSConsole.Chart.Log('[MinuteChartContainer::OnWheel]',e);
@@ -80555,15 +81241,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
80555
81241
  this.ResetDayOffset();
80556
81242
  }
80557
81243
 
80558
- if (this.DayCount>1)
80559
- {
80560
- this.ChartDrawPicture=[];
80561
- }
80562
- else
80563
- {
80564
- this.ReloadChartDrawPicture();
80565
- }
80566
-
81244
+ this.ReloadChartDrawPicture();
80567
81245
  this.ResetDataStatus();
80568
81246
  this.ClearIndexPaint(); //清空指标
80569
81247
  this.Frame.ClearYCoordinateMaxMin();
@@ -81085,6 +81763,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
81085
81763
  this.TitlePaint[0].IsShowDate=true;
81086
81764
  this.UpdateDataOffset();
81087
81765
  this.UpdateFrameMaxMin(); //调整坐标最大 最小值
81766
+ this.CreateChartDrawPictureByStorage(); //创建画图工具
81088
81767
 
81089
81768
  //执行脚本
81090
81769
  if (this.Frame.SubFrame.length>2)
@@ -81383,7 +82062,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
81383
82062
  this.UpdateLatestMinuteDataV2(minuteData);
81384
82063
  this.UpdateHistoryMinuteUI(updateTime);
81385
82064
  this.RecvMinuteDataEvent({FunctionName:"RecvUpdateMinuteData"} );
81386
- this.RequestOverlayMinuteData(); //请求叠加数据 (主数据下载完再下载)
82065
+ this.RequestOverlayMinuteData(); //请求叠加数据 (主数据下载完再下载)
81387
82066
  this.BindAllOverlayIndexData(this.SourceData);
81388
82067
  this.AutoUpdateEvent(true, "MinuteChartContainer::RecvUpdateMinuteData");
81389
82068
  this.AutoUpdate();
@@ -82803,7 +83482,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
82803
83482
  this.ReloadChartDrawPicture=function()
82804
83483
  {
82805
83484
  this.ChartDrawPicture=[];
82806
- this.ChartDrawStorageCache;
83485
+ if (this.SelectChartDrawPicture) this.SelectChartDrawPicture.IsSelected=false;
83486
+ this.SelectChartDrawPicture=null;
83487
+ this.CurrentChartDrawPicture=null;
83488
+ this.MoveOnChartDrawPicture=null;
83489
+
82807
83490
  if (this.ChartDrawStorage)
82808
83491
  {
82809
83492
  this.ChartDrawStorageCache=this.ChartDrawStorage.GetDrawData( { Symbol:this.Symbol, Period:888888888 } );
@@ -82814,7 +83497,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
82814
83497
  {
82815
83498
  if (!this.ChartDrawStorageCache || this.ChartDrawStorageCache.length<=0) return;
82816
83499
 
82817
- for(var i in this.ChartDrawStorageCache)
83500
+ var self=this;
83501
+ for(var i=0; i<this.ChartDrawStorageCache.length; ++i)
82818
83502
  {
82819
83503
  var item=this.ChartDrawStorageCache[i];
82820
83504
  if (item.FrameID<0 || !this.Frame.SubFrame || this.Frame.SubFrame.length<item.FrameID) continue;
@@ -82825,8 +83509,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
82825
83509
  drawPicture.Canvas=this.Canvas;
82826
83510
  drawPicture.Status=10;
82827
83511
  drawPicture.Frame=this.Frame.SubFrame[item.FrameID].Frame; //绑定框架坐标
83512
+ if (drawPicture.ImportStorageData) drawPicture.ImportStorageData(item);
83513
+ drawPicture.ResetXValue();
82828
83514
  drawPicture.UpdateXValue();
82829
83515
  drawPicture.ValueToPoint();
83516
+ drawPicture.GetActiveDrawPicture=()=>{ return this.GetActiveDrawPicture(); }
82830
83517
 
82831
83518
  if (drawPicture.ClassName==='ChartDrawPictureText') drawPicture.IsInitialized=true;
82832
83519
 
@@ -115576,7 +116263,7 @@ function ScriptIndex(name,script,args,option)
115576
116263
  if (varItem.Background) chartText.TextBG=varItem.Background;
115577
116264
 
115578
116265
  //hqChart.TitlePaint[titleIndex].Data[id]=new DynamicTitleData(bar.Data,varItem.Name,bar.Color);
115579
-
116266
+ this.SetChartIndexName(chartText);
115580
116267
  hqChart.ChartPaint.push(chartText);
115581
116268
  }
115582
116269
 
@@ -116240,6 +116927,7 @@ function ScriptIndex(name,script,args,option)
116240
116927
 
116241
116928
  //hqChart.TitlePaint[titleIndex].Data[id]=new DynamicTitleData(bar.Data,varItem.Name,bar.Color);
116242
116929
 
116930
+ this.SetChartIndexName(chartText);
116243
116931
  hqChart.ChartPaint.push(chartText);
116244
116932
  }
116245
116933
 
@@ -117629,6 +118317,7 @@ function OverlayScriptIndex(name,script,args,option)
117629
118317
  var titlePaint=hqChart.TitlePaint[titleIndex];
117630
118318
  titlePaint.OverlayIndex.get(overlayIndex.Identify).Data[id]=new DynamicTitleData(chart.Data,varItem.Name,chart.Color);
117631
118319
 
118320
+ this.SetChartIndexName(chart);
117632
118321
  frame.ChartPaint.push(chart);
117633
118322
  }
117634
118323
 
@@ -117847,7 +118536,7 @@ function OverlayScriptIndex(name,script,args,option)
117847
118536
  chart.Text=varItem.Draw.DrawData.Text;
117848
118537
 
117849
118538
  //hqChart.TitlePaint[titleIndex].Data[id]=new DynamicTitleData(bar.Data,varItem.Name,bar.Color);
117850
-
118539
+ this.SetChartIndexName(chart);
117851
118540
  frame.ChartPaint.push(chart);
117852
118541
  }
117853
118542
 
@@ -132495,7 +133184,7 @@ function ScrollBarBGChart()
132495
133184
 
132496
133185
 
132497
133186
 
132498
- var HQCHART_VERSION="1.1.13166";
133187
+ var HQCHART_VERSION="1.1.13181";
132499
133188
 
132500
133189
  function PrintHQChartVersion()
132501
133190
  {