hqchart 1.1.13171 → 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.
@@ -275,6 +275,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
275
275
  chart.ModifyIndexDialog=this.ModifyIndexDialog;
276
276
  chart.ChangeIndexDialog=this.ChangeIndexDialog;
277
277
  chart.MinuteDialog=this.MinuteDialog;
278
+
279
+ var pixelRatio=GetDevicePixelRatio();
278
280
 
279
281
  //右键菜单
280
282
  if (option.IsShowRightMenu==true) chart.RightMenu=new KLineRightMenu(this.DivElement);
@@ -493,8 +495,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
493
495
  chart.Frame.SubFrame[i].Frame.IsShowYText[1]=item.IsShowRightText;
494
496
  chart.Frame.SubFrame[i].Frame.YSplitOperator.IsShowRightText=item.IsShowRightText; //显示右边刻度
495
497
  }
496
- if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace;
497
- if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace;
498
+ if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace*pixelRatio;
499
+ if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace*pixelRatio;
498
500
 
499
501
  if (item.RightTextPosition>0) chart.Frame.SubFrame[i].Frame.YTextPosition[1]=item.RightTextPosition;
500
502
  if (item.LeftTextPosition>0) chart.Frame.SubFrame[i].Frame.YTextPosition[0]=item.LeftTextPosition;
@@ -796,6 +798,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
796
798
  chart.ModifyIndexDialog=this.ModifyIndexDialog;
797
799
  chart.ChangeIndexDialog=this.ChangeIndexDialog;
798
800
 
801
+ var pixelRatio=GetDevicePixelRatio();
802
+
799
803
  var windowsCount=2;
800
804
  if (option.Windows && option.Windows.length>0) windowsCount+=option.Windows.length; //指标窗口从第3个窗口开始
801
805
  if (option.EnableScrollUpDown==true) chart.EnableScrollUpDown=option.EnableScrollUpDown;
@@ -963,8 +967,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
963
967
  if (IFrameSplitOperator.IsNumber(item.YTextBaseline)) chart.Frame.SubFrame[i].Frame.YTextBaseline=item.YTextBaseline;
964
968
  if (IFrameSplitOperator.IsBool(item.IsShowIndexTitle)) chart.Frame.SubFrame[i].Frame.IsShowIndexTitle=item.IsShowIndexTitle;
965
969
 
966
- if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace;
967
- if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace;
970
+ if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace*pixelRatio;
971
+ if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace*pixelRatio;
968
972
 
969
973
  //是否显示关闭集合竞价按钮
970
974
  if (IFrameSplitOperator.IsNumber(item.CloseBeforeButton)) chart.Frame.SubFrame[i].Frame.IsShowCloseButton=item.CloseBeforeButton;
@@ -1637,6 +1641,13 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
1637
1641
  //是否自动更新
1638
1642
  if (option.IsAutoUpdate!=null) chart.IsAutoUpdate=option.IsAutoUpdate;
1639
1643
  if (option.AutoUpdateFrequency>0) chart.AutoUpdateFrequency=option.AutoUpdateFrequency;
1644
+ //内置菜单
1645
+ if (option.EnablePopMenuV2===true)
1646
+ {
1647
+ chart.JSPopMenu=new JSPopMenu();
1648
+ chart.JSPopMenu.Inital();
1649
+ chart.EnablePopMenuV2=true;
1650
+ }
1640
1651
  //注册事件
1641
1652
  if (option.EventCallback)
1642
1653
  {
@@ -1663,19 +1674,6 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
1663
1674
  this.DivElement.JSChart=this; //div中保存一份
1664
1675
  this.JSChartContainer.Draw();
1665
1676
  }
1666
-
1667
- if (IFrameSplitOperator.IsBool(option.CheckLatestVerion) && option.CheckLatestVerion==false)
1668
- {
1669
-
1670
- }
1671
- else if (JSChart.LastVersion==null)
1672
- {
1673
- if (chart && typeof(chart.GetLatestVersion)=='function')
1674
- {
1675
- //由于域名都要备案,获取最新版本接口停止使用
1676
- //chart.GetLatestVersion();
1677
- }
1678
- }
1679
1677
  }
1680
1678
 
1681
1679
  //创建工具条
@@ -2119,6 +2117,15 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
2119
2117
  return this.JSChartContainer.ChangePriceGap(option);
2120
2118
  }
2121
2119
  }
2120
+
2121
+ this.PopupMenuByTab=function(menuData, rtTab)
2122
+ {
2123
+ if(this.JSChartContainer && typeof(this.JSChartContainer.PopupMenuByTab)=='function')
2124
+ {
2125
+ JSConsole.Chart.Log('[JSChart:ChangePriceGap] ');
2126
+ return this.JSChartContainer.PopupMenuByTab(menuData, rtTab);
2127
+ }
2128
+ }
2122
2129
  }
2123
2130
 
2124
2131
  JSChart.LastVersion=null; //最新的版本号
@@ -2324,6 +2331,12 @@ JSChart.ToFixedRect=function(value)
2324
2331
  return ToFixedRect(value);
2325
2332
  }
2326
2333
 
2334
+ JSChart.GetScrollPosition=function()
2335
+ {
2336
+ return GetScrollPosition();
2337
+ }
2338
+
2339
+
2327
2340
 
2328
2341
 
2329
2342
  var JSCHART_EVENT_ID=
@@ -2609,6 +2622,36 @@ var JSCHART_WORKER_MESSAGE_ID=
2609
2622
  ERROR_EXECUTE_SCRIPT:3,
2610
2623
  }
2611
2624
 
2625
+ var JSCHART_MENU_ID=
2626
+ {
2627
+ CMD_CHANGE_PERIOD_ID:1, //切换周期
2628
+ CMD_CHANGE_WINDOW_COUNT_ID:2, //窗口个数
2629
+ CMD_CHANGE_RIGHT_ID:3, //复权
2630
+ CMD_CHANGE_INDEX_ID:4, //切换指标
2631
+ CMD_CHANGE_COLOR_INDEX_ID:5, //五彩K线指标
2632
+ CMD_CHANGE_TRADE_INDEX_ID:6, //专家系统(交易指标)
2633
+ CMD_DELETE_COLOR_INDEX_ID:7, //删除五彩K线指标
2634
+ CMD_DELETE_TRADE_INDEX_ID:8, //删除专家系统(交易指标)
2635
+ CMD_CHANGE_KLINE_TYPE_ID:9, //切换K线类型
2636
+ CMD_CHANGE_PRICE_GAP_ID:10, //缺口提示
2637
+ CMD_OVERLAY_SYMBOL_ID:11, //叠加品种
2638
+ CMD_DELETE_ALL_OVERLAY_SYMBOL_ID:12, //删除所有叠加品种
2639
+ CMD_CHANGE_COORDINATETYPE_ID:13, //切换坐标类型
2640
+ CMD_CHANGE_KLINE_INFO_ID:14, //切换信息地雷
2641
+ CMD_DELETE_ALL_KLINE_INFO_ID:15, //清空信息地雷
2642
+ CMD_CHANGE_DRAG_MODE_ID:16, //切换拖动模式
2643
+ CMD_CHANGE_BG_SPLIT_ID:17, //背景分割
2644
+
2645
+ CMD_SHOW_DRAWTOOL_ID:18, //画图工具
2646
+ CMD_HIDE_DRAWTOOL_ID:19,
2647
+
2648
+ CMD_SHOW_STOCKCHIP_ID:20, //筹码分布
2649
+ CMD_HIDE_STOCKCHIP_ID:21,
2650
+
2651
+ CMD_ENABLE_SELECT_RECT_ID:22, //启动区间选择
2652
+ CMD_CHANGE_DAY_COUNT_ID:23, //切换天数
2653
+ }
2654
+
2612
2655
 
2613
2656
  function PhoneDBClick()
2614
2657
  {
@@ -2694,6 +2737,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
2694
2737
  this.LoadDataSplashTitle="数据加载中"; //下载数据提示信息
2695
2738
  this.DefaultCursor="default"; //crosshair , default 默认手型
2696
2739
 
2740
+ this.EnablePopMenuV2=false;
2741
+ this.JSPopMenu; //内置菜单
2742
+ //this.JSPopMenu=new JSPopMenu(); //内置菜单
2743
+ //this.JSPopMenu.Inital();
2744
+
2697
2745
  //绘图缓存
2698
2746
  this.CacheCanvas=null;
2699
2747
  this.CacheElement=null;
@@ -2889,61 +2937,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
2889
2937
  {
2890
2938
  this.IsDestroy=true;
2891
2939
  this.StopAutoUpdate();
2892
-
2893
- if (this.GetLatestVersionTimer!=null)
2894
- {
2895
- clearTimeout(this.GetLatestVersionTimer);
2896
- this.GetLatestVersionTimer=null;
2897
- }
2898
2940
  }
2899
2941
 
2900
2942
  this.ChartDestory=this.ChartDestroy; //老版本写错了,需要兼容下
2901
2943
 
2902
-
2903
- this.GetLatestVersionTimer=null; //获取最新版本
2904
- this.GetLatestVersion=function()
2905
- {
2906
- if (this.GetLatestVersionTimer!=null)
2907
- {
2908
- clearTimeout(this.GetLatestVersionTimer);
2909
- this.GetLatestVersionTimer=null;
2910
- }
2911
-
2912
- var roundeTime=Math.floor(Math.random()*50);
2913
- var waittimer=1000*60*3+(roundeTime*1000);
2914
- var value="aHR0cHM6Ly9ocWNoYXJ0LnplYWxpbmsuY29tL2FwaS9HZXRWZXJzaW9u";
2915
- JSConsole.Chart.Log("[JSChartContainer::GetLatestVersion] wait for get hqchart latest version. ",waittimer);
2916
- this.GetLatestVersionTimer = setTimeout(()=>
2917
- {
2918
- var width=0, height=0;
2919
- if (this.Frame && this.Frame.ChartBorder)
2920
- {
2921
- width=this.Frame.ChartBorder.GetChartWidth();
2922
- height=this.Frame.ChartBorder.GetChartHeight();
2923
- }
2924
-
2925
- var url=`${atob(value)}?width=${width}&height=${height}&type=h5`;
2926
-
2927
- if (JSChart.LastVersion!=null) return; //只请求一次
2928
-
2929
- JSNetwork.HttpRequest({
2930
- url: url,
2931
- type:"get",
2932
- dataType: "json",
2933
- async:true,
2934
- success:function(data)
2935
- {
2936
- JSConsole.Chart.Log("[JSChartContainer::GetLatestVersion] hqchart latest version. ",data);
2937
- JSChart.LastVersion=data;
2938
- },
2939
- error:function(request, textStatus, errorThrown)
2940
- {
2941
- JSConsole.Chart.Log("[JSChartContainer::GetLatestVersion] Get HQChart latest version failed.", request);
2942
- }
2943
- });
2944
- }, waittimer);
2945
- }
2946
-
2947
2944
  //设置焦点
2948
2945
  this.SetFocus=function()
2949
2946
  {
@@ -9002,6 +8999,213 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9002
8999
  }
9003
9000
  }
9004
9001
  }
9002
+
9003
+ this.PopupMenuByTab=function(menuData, rtTab)
9004
+ {
9005
+ if (!this.JSPopMenu) return;
9006
+
9007
+ var pixelRatio=GetDevicePixelRatio();
9008
+ var rtCell={ Left:rtTab.Left/pixelRatio, Right:rtTab.Right/pixelRatio, Bottom:rtTab.Bottom/pixelRatio, Top:rtTab.Top/pixelRatio };
9009
+ rtCell.Width=rtCell.Right-rtCell.Left;
9010
+ rtCell.Height=rtCell.Bottom-rtCell.Top;
9011
+
9012
+ var rtClient=this.UIElement.getBoundingClientRect();
9013
+ var rtScroll=GetScrollPosition();
9014
+
9015
+ var offsetLeft=rtClient.left+rtScroll.Left;
9016
+ var offsetTop=rtClient.top+rtScroll.Top;
9017
+ rtCell.Left+=offsetLeft;
9018
+ rtCell.Right+=offsetLeft;
9019
+ rtCell.Top+=offsetTop;
9020
+ rtCell.Bottom+=offsetTop;
9021
+
9022
+ this.JSPopMenu.CreatePopMenu(menuData);
9023
+ this.JSPopMenu.PopupMenuByTab(rtCell);
9024
+ }
9025
+
9026
+ this.PopuMenuByRClick=function(menuData, x, y)
9027
+ {
9028
+ var rtClient=this.UIElement.getBoundingClientRect();
9029
+ var rtScroll=GetScrollPosition();
9030
+
9031
+ x+=rtClient.left+rtScroll.Left;
9032
+ y+=rtClient.top+rtScroll.Top;
9033
+
9034
+ this.JSPopMenu.CreatePopMenu(menuData);
9035
+ this.JSPopMenu.PopupMenuByRight(x,y);
9036
+ }
9037
+
9038
+ //点击右键菜单
9039
+ this.OnClickRightMenu=function(data)
9040
+ {
9041
+ JSConsole.Chart.Log('[JSChartContainer::OnClickRightMenu] ',data);
9042
+ if (!data || !data.Data) return;
9043
+
9044
+ var cmdID=data.Data.ID; //命令ID
9045
+ var aryArgs=data.Data.Args; //参数
9046
+ var param=null, srcParam=null; //原始值
9047
+ if (IFrameSplitOperator.IsNonEmptyArray(aryArgs))
9048
+ {
9049
+ srcParam=aryArgs[0];
9050
+ if (IFrameSplitOperator.IsNumber(aryArgs[0])) param=aryArgs[0];
9051
+ }
9052
+
9053
+ switch(cmdID)
9054
+ {
9055
+ case JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID:
9056
+ if (this.ChangePeriod && param!=null)
9057
+ this.ChangePeriod(param);
9058
+ break;
9059
+ case JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID:
9060
+ if (this.ChangeIndexWindowCount && param!=null)
9061
+ this.ChangeIndexWindowCount(param);
9062
+ break;
9063
+ case JSCHART_MENU_ID.CMD_CHANGE_RIGHT_ID:
9064
+ if (this.ChangeRight && param!=null)
9065
+ this.ChangeRight(param);
9066
+ break;
9067
+ case JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID:
9068
+ if (this.ChangeIndex && param!=null && aryArgs[1])
9069
+ this.ChangeIndex(param,aryArgs[1]);
9070
+ break;
9071
+
9072
+ case JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID:
9073
+ case JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID:
9074
+ if (this.ChangeInstructionIndex && aryArgs[0])
9075
+ this.ChangeInstructionIndex(aryArgs[0]);
9076
+ break;
9077
+ case JSCHART_MENU_ID.CMD_DELETE_COLOR_INDEX_ID: //删除五彩K线指标
9078
+ case JSCHART_MENU_ID.CMD_DELETE_TRADE_INDEX_ID: //删除专家系统(交易指标)
9079
+ if (this.CancelInstructionIndex) this.CancelInstructionIndex();
9080
+ break;
9081
+ case JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID: //切换K线类型
9082
+ if (this.ChangeKLineDrawType && param!=null)
9083
+ this.ChangeKLineDrawType(param,aryArgs[1],aryArgs[2]);
9084
+ break;
9085
+ case JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID: //缺口提示
9086
+ if (this.ChangePriceGap && IFrameSplitOperator.IsBool(aryArgs[0]))
9087
+ {
9088
+ if (aryArgs[0]==false)
9089
+ {
9090
+ this.ChangePriceGap({ Enable:aryArgs[0] });
9091
+ }
9092
+ else
9093
+ {
9094
+ if (IFrameSplitOperator.IsNumber(aryArgs[1]))
9095
+ this.ChangePriceGap({ Enable:aryArgs[0], Count:aryArgs[1] });
9096
+ }
9097
+ }
9098
+ break;
9099
+ case JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID:
9100
+ if (aryArgs[1]===true)
9101
+ {
9102
+ if (this.OverlaySymbol && aryArgs[0]) this.OverlaySymbol(aryArgs[0]);
9103
+ }
9104
+ else if (aryArgs[1]===false)
9105
+ {
9106
+ if (this.DeleteOverlaySymbol && aryArgs[0]) this.DeleteOverlaySymbol(aryArgs[0]);
9107
+ }
9108
+ break;
9109
+ case JSCHART_MENU_ID.CMD_DELETE_ALL_OVERLAY_SYMBOL_ID:
9110
+ if (this.ClearOverlaySymbol) this.ClearOverlaySymbol();
9111
+ break;
9112
+ case JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID:
9113
+ if (this.ChangeCoordinateType && aryArgs[0]) this.ChangeCoordinateType(aryArgs[0]);
9114
+ break;
9115
+ case JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID:
9116
+ if (aryArgs[0] && IFrameSplitOperator.IsBool(aryArgs[1]))
9117
+ {
9118
+ if (aryArgs[1]==true && this.AddKLineInfo) this.AddKLineInfo(aryArgs[0],true);
9119
+ else if (aryArgs[1]==false && this.DeleteKLineInfo) this.DeleteKLineInfo(aryArgs[0]);
9120
+ }
9121
+ break;
9122
+ case JSCHART_MENU_ID.CMD_DELETE_ALL_KLINE_INFO_ID:
9123
+ if (this.ClearKLineInfo) this.ClearKLineInfo();
9124
+ break;
9125
+ case JSCHART_MENU_ID.CMD_CHANGE_DRAG_MODE_ID:
9126
+ if (param!=null) this.DragMode=param;
9127
+ break;
9128
+ case JSCHART_MENU_ID.CMD_CHANGE_BG_SPLIT_ID:
9129
+ if (IFrameSplitOperator.IsBool(srcParam))
9130
+ {
9131
+ if (srcParam)
9132
+ {
9133
+ this.CreateExtendChart("SessionBreaksPaint", { });
9134
+ this.Draw();
9135
+ }
9136
+ else
9137
+ {
9138
+ var finder=this.GetExtendChartByClassName("SessionBreaksPaint");
9139
+ if (finder)
9140
+ {
9141
+ this.DeleteExtendChartByID(finder.Chart.ID);
9142
+ this.Draw();
9143
+ }
9144
+ }
9145
+ }
9146
+ break;
9147
+ case JSCHART_MENU_ID.CMD_SHOW_DRAWTOOL_ID:
9148
+ var option={Name:'画图工具', Top:this.Frame.ChartBorder.Top };
9149
+ var extendChart=this.CreateExtendChart(option.Name, option); //创建扩展图形
9150
+ this.SetSizeChange(true);
9151
+ this.Draw();
9152
+ break;
9153
+ case JSCHART_MENU_ID.CMD_HIDE_DRAWTOOL_ID:
9154
+ var drawTools=this.GetExtendChartByClassName('DrawToolsButton');
9155
+ if (drawTools)
9156
+ {
9157
+ var toolsWidth=drawTools.Chart.Width;
9158
+ var toolsIndex=parseInt(drawTools.Index);
9159
+ for(var i=toolsIndex+1; i<this.ExtendChartPaint.length; ++i) //在画图工具后面创建的需要减去工具的宽度
9160
+ {
9161
+ var item=this.ExtendChartPaint[i];
9162
+ if (item.ClassName=='StockChip')
9163
+ {
9164
+ item.Left-=toolsWidth;
9165
+ }
9166
+ }
9167
+ this.DeleteExtendChart(drawTools);
9168
+ this.Frame.ChartBorder.Right-=toolsWidth;
9169
+ this.SetSizeChange(true);
9170
+ this.Draw();
9171
+ }
9172
+ break;
9173
+ case JSCHART_MENU_ID.CMD_SHOW_STOCKCHIP_ID:
9174
+ var option={Name:'筹码分布', ShowType:1, Width:230 };
9175
+ var extendChart=this.CreateExtendChart(option.Name, option); //创建扩展图形
9176
+ this.SetSizeChange(true);
9177
+ this.Draw();
9178
+ break;
9179
+ case JSCHART_MENU_ID.CMD_HIDE_STOCKCHIP_ID:
9180
+ var StockChip=chart.GetExtendChartByClassName('StockChip');
9181
+ if (StockChip)
9182
+ {
9183
+ var chipWidth=StockChip.Chart.Width;
9184
+ var chipIndex=parseInt(StockChip.Index);
9185
+ for(var i=chipIndex+1; i<this.ExtendChartPaint.length; ++i) //在筹码后面创建的需要筹码的宽度
9186
+ {
9187
+ var item=this.ExtendChartPaint[i];
9188
+ if (item.ClassName=='DrawToolsButton')
9189
+ {
9190
+ item.Left-=chipWidth;
9191
+ }
9192
+ }
9193
+ this.DeleteExtendChart(StockChip);
9194
+ this.Frame.ChartBorder.Right-=chipWidth;
9195
+ this.SetSizeChange(true);
9196
+ this.Draw();
9197
+ }
9198
+ break;
9199
+ case JSCHART_MENU_ID.CMD_ENABLE_SELECT_RECT_ID:
9200
+ if (IFrameSplitOperator.IsBool(srcParam))
9201
+ this.EnableSelectRect=srcParam;
9202
+ break;
9203
+ case JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID:
9204
+ if (this.ChangeDayCount && param!=null)
9205
+ this.ChangeDayCount(param);
9206
+ break;
9207
+ }
9208
+ }
9005
9209
  }
9006
9210
 
9007
9211
  function GetDevicePixelRatio()
@@ -9099,11 +9303,12 @@ function GetScrollPosition()
9099
9303
  var scrollPos={};
9100
9304
  var scrollTop=0;
9101
9305
  var scrollLeft=0;
9102
- if(document.documentElement && document.documentElement.scrollTop)
9306
+ if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft))
9103
9307
  {
9104
9308
  scrollTop=document.documentElement.scrollTop;
9105
9309
  scrollLeft=document.documentElement.scrollLeft;
9106
- }else if(document.body)
9310
+ }
9311
+ else if(document.body)
9107
9312
  {
9108
9313
  scrollTop=document.body.scrollTop;
9109
9314
  scrollLeft=document.body.scrollLeft;
@@ -44067,7 +44272,8 @@ function FrameButtomToolbarPaint()
44067
44272
  this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);
44068
44273
  }
44069
44274
 
44070
- var font=this.TitleFont(rtBG.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom);
44275
+ var font=this.GetTitleFont(rtBG.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom);
44276
+ var svgFont=this.GetSVGFont(rtBG.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom);
44071
44277
  this.Canvas.textBaseline='middle';
44072
44278
  this.Canvas.textAlign='center';
44073
44279
  this.Canvas.font=font;
@@ -44075,9 +44281,23 @@ function FrameButtomToolbarPaint()
44075
44281
  for(var i=0;i<this.AryButton.length;++i)
44076
44282
  {
44077
44283
  var item=this.AryButton[i];
44078
- if (!item.Title) return;
44079
- var textWidth=this.Canvas.measureText(item.Title).width+2;
44080
- var buttonWidth=textWidth+this.ButtonConfig.Mergin.Left+this.ButtonConfig.Mergin.Right;
44284
+ if (!item.Title && !(item.SVGButton && item.SVGButton.Symbol)) return;
44285
+
44286
+ var textWidth=0;
44287
+ if (item.Title)
44288
+ {
44289
+ textWidth=this.Canvas.measureText(item.Title).width+2;
44290
+ }
44291
+
44292
+ var svgButtonWidth=0;
44293
+ if (item.SVGButton && item.SVGButton.Symbol)
44294
+ {
44295
+ svgButtonWidth=this.ButtonConfig.SVG.Size;
44296
+ if (textWidth>0) svgButtonWidth+=this.ButtonConfig.SVG.MerginLeft;
44297
+
44298
+ }
44299
+
44300
+ var buttonWidth=textWidth+svgButtonWidth+this.ButtonConfig.Mergin.Left+this.ButtonConfig.Mergin.Right;
44081
44301
  var rtButton={ Left:xBotton, Top:rtBG.Top, Bottom:rtBG.Bottom, Height:rtBG.Height, Width:buttonWidth };
44082
44302
  rtButton.Right=rtButton.Left+rtButton.Width;
44083
44303
 
@@ -44114,12 +44334,50 @@ function FrameButtomToolbarPaint()
44114
44334
  this.Canvas.stroke();
44115
44335
  }
44116
44336
 
44117
- this.Canvas.fillStyle=titleColor;
44118
- var xText=rtButton.Left+rtButton.Width/2; //居中
44119
- var yText=rtButton.Top+this.ButtonConfig.Mergin.Top+(rtButton.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom)/2;
44120
- this.Canvas.fillText(item.Title,xText,yText);
44337
+ if (item.Title)
44338
+ {
44339
+ this.Canvas.fillStyle=titleColor;
44340
+ var xText=rtButton.Left+(rtButton.Width-svgButtonWidth)/2; //居中
44341
+ var yText=rtButton.Top+this.ButtonConfig.Mergin.Top+(rtButton.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom)/2;
44342
+ this.Canvas.fillText(item.Title,xText,yText);
44343
+ }
44344
+
44345
+
44346
+ var rtSVG=null;
44347
+ if (item.SVGButton && item.SVGButton.Symbol)
44348
+ {
44349
+ this.Canvas.font=svgFont;
44350
+ this.Canvas.fillStyle=titleColor;
44351
+ var xText=rtButton.Right-this.ButtonConfig.SVG.Size/2-this.ButtonConfig.Mergin.Right;
44352
+ this.Canvas.fillText(item.SVGButton.Symbol,xText,yText);
44353
+ this.Canvas.font=font;
44354
+
44355
+ 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};
44356
+ rtSVG.Right=rtSVG.Left+rtSVG.Width;
44357
+ rtSVG.Bottom=rtSVG.Top+rtSVG.Height;
44358
+ }
44359
+
44360
+ //{ Rect:rtButton, ID:item.ID, Data:item, RectSVG:rtSVG }
44361
+ if (textWidth>0 && svgButtonWidth>0)
44362
+ {
44363
+ var rtText={ Left:rtButton.Left, Top:rtButton.Top, Bottom:rtButton.Bottom };
44364
+ rtText.Right=rtText.Left+textWidth+this.ButtonConfig.Mergin.Left+this.ButtonConfig.SVG.MerginLeft/2;
44365
+ var cacheItem={ Rect:rtText, ID:item.ID, Data:item, RectCell:rtButton, ButtonType:0 };
44366
+ this.AryRectButton.push(cacheItem);
44367
+
44368
+ var rtSVG={Left:rtText.Right, Right:rtButton.Right, Top:rtButton.Top, Bottom:rtButton.Bottom };
44369
+ var cacheItem={ Rect:rtSVG, ID:item.ID, Data:item, RectCell:rtButton, ButtonType:1 };
44370
+ this.AryRectButton.push(cacheItem);
44371
+ }
44372
+ else
44373
+ {
44374
+ var cacheItem={ Rect:rtButton, ID:item.ID, Data:item, RectCell:rtButton }; //RectCell 全部的大小
44375
+ if (textWidth>0) cacheItem.ButtonType=0;
44376
+ else if (svgButtonWidth>0) cacheItem.ButtonType=1;
44377
+ this.AryRectButton.push(cacheItem);
44378
+ }
44379
+
44121
44380
 
44122
- this.AryRectButton.push({ Rect:rtButton, ID:item.ID, Data:item });
44123
44381
 
44124
44382
  xBotton+=buttonWidth+1;
44125
44383
  }
@@ -44148,13 +44406,22 @@ function FrameButtomToolbarPaint()
44148
44406
  return null;
44149
44407
  }
44150
44408
 
44151
- this.TitleFont=function(height)
44409
+ this.GetTitleFont=function(height)
44152
44410
  {
44153
44411
  var config=this.ButtonConfig.Font;
44154
- var fontSize=height;
44412
+ var fontSize=height*GetDevicePixelRatio();
44155
44413
  if (IFrameSplitOperator.IsPlusNumber(config.Size)) fontSize=config.Size;
44156
44414
 
44157
- var font=`${fontSize*GetDevicePixelRatio()}px ${config.Family}`;
44415
+ var font=`${fontSize}px ${config.Family}`;
44416
+ return font;
44417
+ }
44418
+
44419
+ this.GetSVGFont=function(height)
44420
+ {
44421
+ var config=this.ButtonConfig.SVG;
44422
+ var fontSize=height*GetDevicePixelRatio();
44423
+ if (IFrameSplitOperator.IsPlusNumber(config.Size)) fontSize=config.Size;
44424
+ var font=`${fontSize}px ${config.Family}`;
44158
44425
  return font;
44159
44426
  }
44160
44427
 
@@ -44167,7 +44434,7 @@ function FrameButtomToolbarPaint()
44167
44434
  if (x>rect.Left && x<rect.Right && y>rect.Top && y<rect.Bottom)
44168
44435
  {
44169
44436
  var frame=this.GetFrame();
44170
- var result={ ID:item.Data.ID, Rect:rect, FrameID:this.FrameID, Frame:frame, Data:item.Data };
44437
+ var result={ ID:item.Data.ID, Rect:rect, FrameID:this.FrameID, Frame:frame, Data:item.Data, ButtonType:item.ButtonType, RectCell:item.RectCell, };
44171
44438
  return result;
44172
44439
  }
44173
44440
  }
@@ -53508,7 +53775,7 @@ function IChartDrawPicture()
53508
53775
  if (option.LineWidth>0) this.LineWidth=option.LineWidth;
53509
53776
  if (option.AreaColor) this.AreaColor=option.AreaColor;
53510
53777
  if (option.PointColor) this.PointColor=option.PointColor;
53511
- if (option.MoveOnPointColor) this.SelectPointColor=option.PointColor;
53778
+ if (option.MoveOnPointColor) this.MoveOnPointColor=option.MoveOnPointColor;
53512
53779
  if (option.PointRadius) this.PointRadius=option.PointRadius;
53513
53780
  if (IFrameSplitOperator.IsNumber(option.SquareSize)) this.SquareSize=option.SquareSize;
53514
53781
  if (IFrameSplitOperator.IsBool(option.IsShowPoint)) this.IsShowPoint=option.IsShowPoint;
@@ -53707,8 +53974,8 @@ function IChartDrawPicture()
53707
53974
  for(var i=0; i<this.Point.length; ++i)
53708
53975
  {
53709
53976
  var item=this.Point[i];
53710
- var xValue=parseInt(this.Frame.GetXData(item.Y));
53711
- var yValue=this.Frame.GetYData(item.X);
53977
+ var xValue=parseInt(this.Frame.GetXData(item.Y,false));
53978
+ var yValue=this.Frame.GetYData(item.X,false);
53712
53979
 
53713
53980
  var valueItem={ XValue:xValue, YValue:yValue };
53714
53981
  var minuteItem=data.Data[xValue];
@@ -53722,8 +53989,8 @@ function IChartDrawPicture()
53722
53989
  for(var i=0; i<this.Point.length; ++i)
53723
53990
  {
53724
53991
  var item=this.Point[i];
53725
- var xValue=parseInt(this.Frame.GetXData(item.X));
53726
- var yValue=this.Frame.GetYData(item.Y);
53992
+ var xValue=parseInt(this.Frame.GetXData(item.X,false));
53993
+ var yValue=this.Frame.GetYData(item.Y,false);
53727
53994
 
53728
53995
  if (xValue>=data.Data.length) //超过当前数据,直接读固定时间
53729
53996
  {
@@ -53798,7 +54065,7 @@ function IChartDrawPicture()
53798
54065
  }
53799
54066
 
53800
54067
  data.FindDataIndexByDateTime(aryDateTime);
53801
- for(var i in aryDateTime)
54068
+ for(var i=0; i<aryDateTime.length; ++i)
53802
54069
  {
53803
54070
  var findItem=aryDateTime[i];
53804
54071
  var valueItem=this.Value[i];
@@ -53806,6 +54073,17 @@ function IChartDrawPicture()
53806
54073
  }
53807
54074
  }
53808
54075
 
54076
+ //重置X索引数据
54077
+ this.ResetXValue=function()
54078
+ {
54079
+ for(var i=0; i<this.Value.length; ++i)
54080
+ {
54081
+ var item=this.Value[i];
54082
+ item.XValue=null;
54083
+ }
54084
+ return true;
54085
+ }
54086
+
53809
54087
  //xStep,yStep 移动的偏移量
53810
54088
  this.Move=function(xStep,yStep)
53811
54089
  {
@@ -53931,6 +54209,8 @@ function IChartDrawPicture()
53931
54209
  for(var i=0; i<this.Value.length; ++i)
53932
54210
  {
53933
54211
  var item=this.Value[i];
54212
+ if (!IFrameSplitOperator.IsNumber(item.XValue)) return null; //无效索引 不显示
54213
+
53934
54214
  var dataIndex=item.XValue-data.DataOffset;
53935
54215
  if (dataIndex<0 || dataIndex>=showCount) ++invaildX;
53936
54216
 
@@ -55001,7 +55281,7 @@ function ChartDrawPictureLine()
55001
55281
  if (this.IsFrameMinSize()) return;
55002
55282
  if (!this.IsShow) return;
55003
55283
 
55004
- var drawPoint=this.CalculateDrawPoint( {IsCheckX:true, IsCheckY:true} );
55284
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:true, IsCheckY:false} );
55005
55285
  if (!drawPoint) return;
55006
55286
  if (drawPoint.length!=2) return;
55007
55287
 
@@ -64834,12 +65114,14 @@ function JSChartResource()
64834
65114
  BorderColor:"rgb(204,204,204)",
64835
65115
  Button:
64836
65116
  {
64837
- Font:{ Family:"微软雅黑" },
65117
+ Font:{ Family:"微软雅黑", Size:12*GetDevicePixelRatio() },
64838
65118
  TitleColor: { Selected:"rgb(255,255,255)", Default:"rgb(125,125,125)", MoveOn:"rgb(234,85,4)" },
64839
65119
  BGColor: { Selected:"rgb(234,85,4)", Default:"rgb(235,235,235)", MoveOn:"rgb(242,242,242)" },
64840
65120
  BorderColor:"rgb(204,204,204)",
64841
65121
 
64842
- Mergin: { Left:5*GetDevicePixelRatio(), Right:5*GetDevicePixelRatio(), Top:4*GetDevicePixelRatio(), Bottom:2*GetDevicePixelRatio() }
65122
+ Mergin: { Left:5*GetDevicePixelRatio(), Right:5*GetDevicePixelRatio(), Top:4*GetDevicePixelRatio(), Bottom:2*GetDevicePixelRatio() },
65123
+
65124
+ SVG:{ Family:"iconfont", Size:12*GetDevicePixelRatio(), MerginLeft:4*GetDevicePixelRatio() }
64843
65125
  }
64844
65126
  }
64845
65127
 
@@ -65858,6 +66140,15 @@ function JSChartResource()
65858
66140
  if (IFrameSplitOperator.IsNumber(item.Top)) destItem.Top=item.Top;
65859
66141
  if (IFrameSplitOperator.IsNumber(item.Bottom)) destItem.Bottom=item.Bottom;
65860
66142
  }
66143
+
66144
+ if (button.SVG)
66145
+ {
66146
+ var item=button.SVG;
66147
+ var destItem=this.FrameButtomToolbar.Button.SVG;
66148
+ if (IFrameSplitOperator.IsNumber(item.Size)) destItem.Size=item.Size;
66149
+ if (IFrameSplitOperator.IsNumber(item.MerginLeft)) destItem.MerginLeft=item.MerginLeft;
66150
+ if (item.Family) destItem.Family=item.Family;
66151
+ }
65861
66152
  }
65862
66153
 
65863
66154
  }
@@ -72169,12 +72460,16 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72169
72460
  }
72170
72461
  }
72171
72462
 
72172
-
72173
72463
  //注册鼠标右键事件
72174
72464
  this.OnRightMenu=function(x,y,e)
72175
72465
  {
72176
72466
  var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
72177
- if (this.RightMenu)
72467
+ if (this.EnablePopMenuV2)
72468
+ {
72469
+ var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
72470
+ this.PopuRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
72471
+ }
72472
+ else if (this.RightMenu)
72178
72473
  {
72179
72474
  var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
72180
72475
  e.data={ Chart:this, FrameID:frameId };
@@ -72190,11 +72485,286 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72190
72485
  }
72191
72486
  }
72192
72487
 
72488
+ //右键菜单数据
72489
+ this.GetRightMenuData=function(frameID)
72490
+ {
72491
+ var windowCount=this.Frame.SubFrame.length; //窗口个数
72492
+ var klineChart=this.ChartPaint[0];
72493
+ var priceGap=klineChart.PriceGap; //缺口配置信息
72494
+ var coordinateType=null, yCoordinateType=null; //坐标类型
72495
+ var mainFrame=null;
72496
+ if (this.Frame.SubFrame[0] && this.Frame.SubFrame[0].Frame) mainFrame=this.Frame.SubFrame[0].Frame;
72497
+ if (mainFrame)
72498
+ {
72499
+ coordinateType=mainFrame.CoordinateType;
72500
+ if (mainFrame.YSplitOperator) yCoordinateType=mainFrame.YSplitOperator.CoordinateType;
72501
+ }
72502
+
72503
+ var aryKLineInfo=[]; //信息地雷
72504
+ for(var i=0;i<this.ChartInfo.length;++i)
72505
+ {
72506
+ var item=this.ChartInfo[i];
72507
+ if (item && item.ClassName) aryKLineInfo.push(item.ClassName);
72508
+ }
72509
+
72510
+ var aryOverlaySymbol=[]; //叠加的股票列表
72511
+ for(var i=0; i<this.OverlayChartPaint.length; ++i)
72512
+ {
72513
+ var item=this.OverlayChartPaint[i];
72514
+ if (item && item.Symbol) aryOverlaySymbol.push(item.Symbol)
72515
+ }
72516
+
72517
+ var bBGSpit=false, bShowDrawTool=false, bShowStockChip=false;
72518
+ if (this.GetExtendChartByClassName("SessionBreaksPaint")) bBGSpit=true;
72519
+ if (this.GetExtendChartByClassName('DrawToolsButton')) bShowDrawTool=true; //画图工具
72520
+ if (this.GetExtendChartByClassName('StockChip')) bShowStockChip=true; //筹码
72521
+
72522
+ var aryMenu=
72523
+ [
72524
+ {
72525
+ Name:"分析周期",
72526
+ SubMenu:
72527
+ [
72528
+ { Name:"日线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[0] }, Checked:this.Period==0 },
72529
+ { Name:"周线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[1] }, Checked:this.Period==1 },
72530
+ { Name:"双周线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[21]}, Checked:this.Period==21 },
72531
+ { Name:"月线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[2]}, Checked:this.Period==2 },
72532
+ { Name:"季线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[9]}, Checked:this.Period==9 },
72533
+ { Name:"半年", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[22]}, Checked:this.Period==22 },
72534
+ { Name:"年线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[3]}, Checked:this.Period==3 },
72535
+ { Name:"1分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[4]}, Checked:this.Period==4 },
72536
+ { Name:"5分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[5]}, Checked:this.Period==5 },
72537
+ { Name:"15分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[6]}, Checked:this.Period==6 },
72538
+ { Name:"30分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[7]}, Checked:this.Period==7 },
72539
+ { Name:"60分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[8]}, Checked:this.Period==8 },
72540
+ { Name:"2小时", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[11]}, Checked:this.Period==11 },
72541
+ { Name:"4小时", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[12]}, Checked:this.Period==12 },
72542
+ { Name:"分笔", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[10]}, Checked:this.Period==10 },
72543
+ { Name:"自定义周期:3分钟", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[20003]}, Checked:this.Period==20003 },
72544
+ { Name:"自定义周期:35分钟", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[20035]}, Checked:this.Period==20035 },
72545
+ { Name:"自定义周期:8日", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[40008]}, Checked:this.Period==40008 },
72546
+ ]
72547
+ },
72548
+ {
72549
+ Name:"指标切换",
72550
+ SubMenu:
72551
+ [
72552
+ { Name:"均线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "均线"]}},
72553
+ { Name:"BOLL", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "BOLL"]}},
72554
+ { Name:"MACD", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "MACD"]}},
72555
+ { Name:"KDJ", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "KDJ"]}},
72556
+ { Name:"VOL", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "VOL"]}},
72557
+ { Name:"RSI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "RSI"]}},
72558
+ { Name:"BRAR", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "BRAR"]}},
72559
+ { Name:"WR", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "WR"]}},
72560
+ ]
72561
+ },
72562
+ {
72563
+ Name:"五彩K线",
72564
+ SubMenu:
72565
+ [
72566
+ { Name:"十字星", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-十字星"]}},
72567
+ { Name:"早晨之星", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-早晨之星"]}},
72568
+ { Name:"垂死十字", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-垂死十字"]}},
72569
+ { Name:"三只乌鸦", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-三只乌鸦"]}},
72570
+ { Name:"光脚阴线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-光脚阴线"]}},
72571
+ { Name:"黄昏之星", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-黄昏之星"]}},
72572
+ ]
72573
+
72574
+ },
72575
+ {
72576
+ Name:"专家系统",
72577
+ SubMenu:
72578
+ [
72579
+ { Name:"BIAS", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-BIAS"]}},
72580
+ { Name:"CCI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-CCI"]}},
72581
+ { Name:"DMI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-DMI"]}},
72582
+ { Name:"KD", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-KD"]}},
72583
+ { Name:"BOLL", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-BOLL"]}},
72584
+ { Name:"KDJ", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-KDJ"]}},
72585
+ ]
72586
+ },
72587
+ {
72588
+ Name:"信息地雷",
72589
+ SubMenu:
72590
+ [
72591
+ { Name:"公告", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["公告", !aryKLineInfo.includes("AnnouncementInfo")]}, Checked:aryKLineInfo.includes("AnnouncementInfo") },
72592
+ { Name:"业绩预告", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["业绩预告", !aryKLineInfo.includes("PforecastInfo")]}, Checked:aryKLineInfo.includes("PforecastInfo") },
72593
+ { Name:"调研", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["调研", !aryKLineInfo.includes("ResearchInfo") ]}, Checked:aryKLineInfo.includes("ResearchInfo") },
72594
+ { Name:"大宗交易", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["大宗交易", !aryKLineInfo.includes("BlockTrading")]}, Checked:aryKLineInfo.includes("BlockTrading") },
72595
+ { Name:"龙虎榜", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["龙虎榜", !aryKLineInfo.includes("TradeDetail")]}, Checked:aryKLineInfo.includes("TradeDetail") },
72596
+ { Name:"互动易", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["互动易", !aryKLineInfo.includes("InvestorInfo")]}, Checked:aryKLineInfo.includes("InvestorInfo") },
72597
+ ]
72598
+ },
72599
+ {
72600
+ Name:"缺口提示",
72601
+ SubMenu:
72602
+ [
72603
+ { Name:"显示1个缺口", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID, Args:[true, 1]}, Checked:(priceGap.Enable==true && priceGap.Count==1) },
72604
+ { Name:"显示2个缺口", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID, Args:[true, 2]}, Checked:(priceGap.Enable==true && priceGap.Count==2) },
72605
+ { Name:"显示3个缺口", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID, Args:[true, 3]}, Checked:(priceGap.Enable==true && priceGap.Count==3) },
72606
+ { Name:"隐藏缺口", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID, Args:[false]}, Checked:priceGap.Enable==false },
72607
+ ]
72608
+ },
72609
+ {
72610
+ Name:"叠加品种",
72611
+ SubMenu:
72612
+ [
72613
+ { Name:"上证指数", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["000001.sh", !aryOverlaySymbol.includes("000001.sh")]}, Checked:aryOverlaySymbol.includes("000001.sh") },
72614
+ { Name:"深证成指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399001.sz", !aryOverlaySymbol.includes("399001.sz")]}, Checked:aryOverlaySymbol.includes("399001.sz") },
72615
+ { Name:"中小板指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399005.sz", !aryOverlaySymbol.includes("399005.sz")]}, Checked:aryOverlaySymbol.includes("399005.sz") },
72616
+ { Name:"创业板指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399006.sz", !aryOverlaySymbol.includes("399006.sz")]}, Checked:aryOverlaySymbol.includes("399006.sz") },
72617
+ { Name:"沪深300", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["000300.sh", !aryOverlaySymbol.includes("000300.sh")]}, Checked:aryOverlaySymbol.includes("000300.sh")},
72618
+ ]
72619
+ },
72620
+ {
72621
+ Name:"主图线型",
72622
+ SubMenu:
72623
+ [
72624
+ { Name:"K线(空心阳线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[3]} },
72625
+ { Name:"K线(实心阳线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[0]} },
72626
+ { Name:"美国线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[2, true, { IsThinAKBar:false }]} },
72627
+ { Name:"美国线(细)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[2, true, { IsThinAKBar:true }]} },
72628
+ { Name:"收盘线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[1]} },
72629
+ { Name:"收盘面积", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[4]} },
72630
+ { Name:"K线(空心阳线阴线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[6]} },
72631
+ { Name:"Heikin Ashi", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[11]} },
72632
+ { Name:"Line Break", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[12]} },
72633
+ { Name:"High-low", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[13]} },
72634
+ { Name:"HLC Area", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[15]} },
72635
+ ]
72636
+ },
72637
+ {
72638
+ Name:"坐标类型",
72639
+ SubMenu:
72640
+ [
72641
+ { Name:"反转坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ IsReverse:coordinateType==0 }]}, Checked:coordinateType==1 },
72642
+ { Name:JSPopMenu.SEPARATOR_LINE_NAME },
72643
+
72644
+ { Name:"普通坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:0 }]}, Checked:yCoordinateType==0 },
72645
+ { Name:"百分比坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:1 }]}, Checked:yCoordinateType==1 },
72646
+ { Name:"对数坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:2 }]}, Checked:yCoordinateType==2 },
72647
+ { Name:"等比坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:3 }]}, Checked:yCoordinateType==3 },
72648
+ { Name:"等分坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:4 }]}, Checked:yCoordinateType==4 },
72649
+ { Name:"黄金分割", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:5 }]}, Checked:yCoordinateType==5},
72650
+
72651
+ ]
72652
+ },
72653
+ {
72654
+ Name:"指标窗口个数",
72655
+ SubMenu:
72656
+ [
72657
+ { Name:"1个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[2]}, Checked:2==windowCount },
72658
+ { Name:"2个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[3]}, Checked:3==windowCount },
72659
+ { Name:"3个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[4]}, Checked:4==windowCount },
72660
+ { Name:"4个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[5]}, Checked:5==windowCount },
72661
+ { Name:"5个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[6]}, Checked:6==windowCount },
72662
+ ]
72663
+ },
72664
+ {
72665
+ Name:"其他设置",
72666
+ SubMenu:
72667
+ [
72668
+
72669
+ { Name:"禁止拖拽", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_DRAG_MODE_ID, Args:[0]}, Checked:0==this.DragMode },
72670
+ { Name:"启动拖拽", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_DRAG_MODE_ID, Args:[1]}, Checked:1==this.DragMode },
72671
+ { Name:"区间选择", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_DRAG_MODE_ID, Args:[2]}, Checked:2==this.DragMode },
72672
+ { Name:JSPopMenu.SEPARATOR_LINE_NAME },
72673
+
72674
+ { Name:"背景分割", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_BG_SPLIT_ID, Args:[!bBGSpit]}, Checked:bBGSpit},
72675
+
72676
+ { Name:"画图工具", Data:{ ID:bShowDrawTool?JSCHART_MENU_ID.CMD_HIDE_DRAWTOOL_ID:JSCHART_MENU_ID.CMD_SHOW_DRAWTOOL_ID, Args:[]}, Checked:bShowDrawTool},
72677
+
72678
+ { Name:"移动筹码图", Data:{ ID:bShowStockChip?JSCHART_MENU_ID.CMD_HIDE_STOCKCHIP_ID:JSCHART_MENU_ID.CMD_SHOW_STOCKCHIP_ID, Args:[]}, Checked:bShowStockChip},
72679
+ ]
72680
+ }
72681
+ ];
72682
+
72683
+ //复权
72684
+ if(!MARKET_SUFFIX_NAME.IsSHSZIndex(this.Symbol) && !MARKET_SUFFIX_NAME.IsBIT(this.Symbol))
72685
+ {
72686
+ var rightMenu=
72687
+ {
72688
+ Name:"复权处理",
72689
+ SubMenu:
72690
+ [
72691
+ { Name:"不复权", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_RIGHT_ID, Args:[0]}, Checked:0==this.Right },
72692
+ { Name:"前复权", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_RIGHT_ID, Args:[1]}, Checked:1==this.Right },
72693
+ { Name:"后复权", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_RIGHT_ID, Args:[2]}, Checked:2==this.Right }
72694
+ ]
72695
+ };
72696
+
72697
+ aryMenu.splice(1,0,rightMenu);
72698
+ }
72699
+
72700
+ //删除菜单
72701
+ for(var i=0;i<aryMenu.length;++i)
72702
+ {
72703
+ var item=aryMenu[i];
72704
+ if (item.Name=="五彩K线")
72705
+ {
72706
+ if (this.ColorIndex)
72707
+ {
72708
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
72709
+ item.SubMenu.push({ Name:"删除五彩K线", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_COLOR_INDEX_ID} });
72710
+ }
72711
+ }
72712
+ else if (item.Name=="专家系统")
72713
+ {
72714
+ if (this.TradeIndex)
72715
+ {
72716
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
72717
+ item.SubMenu.push({ Name:"删除专家系统", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_TRADE_INDEX_ID} });
72718
+ }
72719
+ }
72720
+ else if (item.Name=="叠加品种")
72721
+ {
72722
+ for(var j=0;j<item.SubMenu.length;++j)
72723
+ {
72724
+ if (item.SubMenu[j].Checked)
72725
+ {
72726
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
72727
+ item.SubMenu.push({ Name:"取消叠加", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_ALL_OVERLAY_SYMBOL_ID} });
72728
+ break;
72729
+ }
72730
+ }
72731
+ }
72732
+ else if (item.Name=="信息地雷")
72733
+ {
72734
+ for(var j=0;j<item.SubMenu.length;++j)
72735
+ {
72736
+ if (item.SubMenu[j].Checked)
72737
+ {
72738
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
72739
+ item.SubMenu.push({ Name:"删除所有", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_ALL_KLINE_INFO_ID} });
72740
+ break;
72741
+ }
72742
+ }
72743
+ }
72744
+ }
72745
+
72746
+ return aryMenu;
72747
+ }
72748
+
72749
+ this.PopuRightMenuV2=function(data,e)
72750
+ {
72751
+ if (!this.JSPopMenu) return;
72752
+ var x=data.X, y=data.Y;
72753
+ var frameID=data.FrameID;
72754
+ var menuData={ Menu:this.GetRightMenuData(frameID), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
72755
+ menuData.ClickCallback=(data)=>{ this.OnClickRightMenu(data); }
72756
+
72757
+ this.PopuMenuByRClick(menuData, x, y);
72758
+ }
72759
+
72193
72760
  //重新加载画图工具(切换股票|周期)
72194
72761
  this.ReloadChartDrawPicture=function()
72195
72762
  {
72196
72763
  this.ChartDrawPicture=[];
72197
- this.ChartDrawStorageCache;
72764
+ if (this.SelectChartDrawPicture) this.SelectChartDrawPicture.IsSelected=false;
72765
+ this.SelectChartDrawPicture=null;
72766
+ this.CurrentChartDrawPicture=null;
72767
+
72198
72768
  if (this.ChartDrawStorage)
72199
72769
  {
72200
72770
  this.ChartDrawStorageCache=this.ChartDrawStorage.GetDrawData( {Symbol:this.Symbol, Period:this.Period} );
@@ -73585,7 +74155,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
73585
74155
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_EXTENDCHART_BUTTON);
73586
74156
  if (event && event.Callback)
73587
74157
  {
73588
- var data={ Info:button, PreventDefault:false }; //PreventDefault 是否阻止内置的点击处理
74158
+ var data={ Info:button, PreventDefault:false, e:e }; //PreventDefault 是否阻止内置的点击处理
73589
74159
  event.Callback(event,data,this);
73590
74160
  if (data.PreventDefault) return;
73591
74161
  }
@@ -75552,7 +76122,13 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
75552
76122
  //注册鼠标右键事件
75553
76123
  this.OnRightMenu=function(x,y,e)
75554
76124
  {
75555
- if (this.RightMenu)
76125
+ var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
76126
+ if (this.EnablePopMenuV2)
76127
+ {
76128
+ var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
76129
+ this.PopuRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
76130
+ }
76131
+ else if (this.RightMenu)
75556
76132
  {
75557
76133
  var frameId=this.Frame.PtInFrame(x,y);
75558
76134
  e.data={ Chart:this, FrameID:frameId };
@@ -75568,6 +76144,107 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
75568
76144
  }
75569
76145
  }
75570
76146
 
76147
+ //右键菜单数据
76148
+ this.GetRightMenuData=function(frameID)
76149
+ {
76150
+ var windowCount=this.Frame.SubFrame.length; //窗口个数
76151
+
76152
+ var aryOverlaySymbol=[]; //叠加的股票列表
76153
+ for(var i=0; i<this.OverlayChartPaint.length; ++i)
76154
+ {
76155
+ var item=this.OverlayChartPaint[i];
76156
+ if (item && item.Symbol) aryOverlaySymbol.push(item.Symbol)
76157
+ }
76158
+
76159
+ var aryMenu=
76160
+ [
76161
+ {
76162
+ Name:"叠加品种",
76163
+ SubMenu:
76164
+ [
76165
+ { Name:"上证指数", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["000001.sh", !aryOverlaySymbol.includes("000001.sh")]}, Checked:aryOverlaySymbol.includes("000001.sh") },
76166
+ { Name:"深证成指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399001.sz", !aryOverlaySymbol.includes("399001.sz")]}, Checked:aryOverlaySymbol.includes("399001.sz") },
76167
+ { Name:"中小板指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399005.sz", !aryOverlaySymbol.includes("399005.sz")]}, Checked:aryOverlaySymbol.includes("399005.sz") },
76168
+ { Name:"创业板指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399006.sz", !aryOverlaySymbol.includes("399006.sz")]}, Checked:aryOverlaySymbol.includes("399006.sz") },
76169
+ { Name:"沪深300", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["000300.sh", !aryOverlaySymbol.includes("000300.sh")]}, Checked:aryOverlaySymbol.includes("000300.sh")},
76170
+ ]
76171
+ },
76172
+ {
76173
+ Name:"多日分时图",
76174
+ SubMenu:
76175
+ [
76176
+ { Name:"当日分时图", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[1]}, Checked:this.DayCount==1 },
76177
+ { Name:"最近2日", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[2]}, Checked:this.DayCount==2 },
76178
+ { Name:"最近3日", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[3]}, Checked:this.DayCount==3 },
76179
+ { Name:"最近4日", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[4]}, Checked:this.DayCount==4 },
76180
+ { Name:"最近5日", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[5]}, Checked:this.DayCount==5 },
76181
+ ]
76182
+ },
76183
+ {
76184
+ Name:"指标窗口个数",
76185
+ SubMenu:
76186
+ [
76187
+ { Name:"1个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[2]}, Checked:3==windowCount },
76188
+ { Name:"2个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[3]}, Checked:4==windowCount },
76189
+ { Name:"3个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[4]}, Checked:5==windowCount },
76190
+ { Name:"4个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[5]}, Checked:6==windowCount },
76191
+ { Name:"5个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[6]}, Checked:7==windowCount },
76192
+ ]
76193
+ },
76194
+ {
76195
+ Name:"指标切换",
76196
+ SubMenu:
76197
+ [
76198
+ { Name:"MACD", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "MACD"]}},
76199
+ { Name:"DMI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "DMI"]}},
76200
+ { Name:"DMA", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "DMA"]}},
76201
+ { Name:"BRAR", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "BRAR"]}},
76202
+ { Name:"KDJ", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "KDJ"]}},
76203
+ { Name:"RSI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "RSI"]}},
76204
+ { Name:"WR", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "WR"]}},
76205
+ { Name:"CCI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "CCI"]}},
76206
+ { Name:"TRIX", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "TRIX"]}},
76207
+ ]
76208
+ },
76209
+ {
76210
+ Name:"区间选择",Data:{ ID: JSCHART_MENU_ID.CMD_ENABLE_SELECT_RECT_ID, Args:[!this.EnableSelectRect]}, Checked:this.EnableSelectRect
76211
+ }
76212
+
76213
+ ];
76214
+
76215
+
76216
+ //删除菜单
76217
+ for(var i=0;i<aryMenu.length;++i)
76218
+ {
76219
+ var item=aryMenu[i];
76220
+ if (item.Name=="叠加品种")
76221
+ {
76222
+ for(var j=0;j<item.SubMenu.length;++j)
76223
+ {
76224
+ if (item.SubMenu[j].Checked)
76225
+ {
76226
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
76227
+ item.SubMenu.push({ Name:"取消叠加", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_ALL_OVERLAY_SYMBOL_ID} });
76228
+ break;
76229
+ }
76230
+ }
76231
+ }
76232
+ }
76233
+
76234
+ return aryMenu;
76235
+ }
76236
+
76237
+ this.PopuRightMenuV2=function(data,e)
76238
+ {
76239
+ if (!this.JSPopMenu) return;
76240
+ var x=data.X, y=data.Y;
76241
+ var frameID=data.FrameID;
76242
+ var menuData={ Menu:this.GetRightMenuData(frameID), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
76243
+ menuData.ClickCallback=(data)=>{ this.OnClickRightMenu(data); }
76244
+
76245
+ this.PopuMenuByRClick(menuData, x, y);
76246
+ }
76247
+
75571
76248
  this.OnWheel=function(e)
75572
76249
  {
75573
76250
  JSConsole.Chart.Log('[MinuteChartContainer::OnWheel]',e);
@@ -76672,15 +77349,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
76672
77349
  this.ResetDayOffset();
76673
77350
  }
76674
77351
 
76675
- if (this.DayCount>1)
76676
- {
76677
- this.ChartDrawPicture=[];
76678
- }
76679
- else
76680
- {
76681
- this.ReloadChartDrawPicture();
76682
- }
76683
-
77352
+ this.ReloadChartDrawPicture();
76684
77353
  this.ResetDataStatus();
76685
77354
  this.ClearIndexPaint(); //清空指标
76686
77355
  this.Frame.ClearYCoordinateMaxMin();
@@ -77202,6 +77871,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77202
77871
  this.TitlePaint[0].IsShowDate=true;
77203
77872
  this.UpdateDataOffset();
77204
77873
  this.UpdateFrameMaxMin(); //调整坐标最大 最小值
77874
+ this.CreateChartDrawPictureByStorage(); //创建画图工具
77205
77875
 
77206
77876
  //执行脚本
77207
77877
  if (this.Frame.SubFrame.length>2)
@@ -77500,7 +78170,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77500
78170
  this.UpdateLatestMinuteDataV2(minuteData);
77501
78171
  this.UpdateHistoryMinuteUI(updateTime);
77502
78172
  this.RecvMinuteDataEvent({FunctionName:"RecvUpdateMinuteData"} );
77503
- this.RequestOverlayMinuteData(); //请求叠加数据 (主数据下载完再下载)
78173
+ this.RequestOverlayMinuteData(); //请求叠加数据 (主数据下载完再下载)
77504
78174
  this.BindAllOverlayIndexData(this.SourceData);
77505
78175
  this.AutoUpdateEvent(true, "MinuteChartContainer::RecvUpdateMinuteData");
77506
78176
  this.AutoUpdate();
@@ -78920,7 +79590,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78920
79590
  this.ReloadChartDrawPicture=function()
78921
79591
  {
78922
79592
  this.ChartDrawPicture=[];
78923
- this.ChartDrawStorageCache;
79593
+ if (this.SelectChartDrawPicture) this.SelectChartDrawPicture.IsSelected=false;
79594
+ this.SelectChartDrawPicture=null;
79595
+ this.CurrentChartDrawPicture=null;
79596
+ this.MoveOnChartDrawPicture=null;
79597
+
78924
79598
  if (this.ChartDrawStorage)
78925
79599
  {
78926
79600
  this.ChartDrawStorageCache=this.ChartDrawStorage.GetDrawData( { Symbol:this.Symbol, Period:888888888 } );
@@ -78931,7 +79605,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78931
79605
  {
78932
79606
  if (!this.ChartDrawStorageCache || this.ChartDrawStorageCache.length<=0) return;
78933
79607
 
78934
- for(var i in this.ChartDrawStorageCache)
79608
+ var self=this;
79609
+ for(var i=0; i<this.ChartDrawStorageCache.length; ++i)
78935
79610
  {
78936
79611
  var item=this.ChartDrawStorageCache[i];
78937
79612
  if (item.FrameID<0 || !this.Frame.SubFrame || this.Frame.SubFrame.length<item.FrameID) continue;
@@ -78942,8 +79617,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78942
79617
  drawPicture.Canvas=this.Canvas;
78943
79618
  drawPicture.Status=10;
78944
79619
  drawPicture.Frame=this.Frame.SubFrame[item.FrameID].Frame; //绑定框架坐标
79620
+ if (drawPicture.ImportStorageData) drawPicture.ImportStorageData(item);
79621
+ drawPicture.ResetXValue();
78945
79622
  drawPicture.UpdateXValue();
78946
79623
  drawPicture.ValueToPoint();
79624
+ drawPicture.GetActiveDrawPicture=()=>{ return this.GetActiveDrawPicture(); }
78947
79625
 
78948
79626
  if (drawPicture.ClassName==='ChartDrawPictureText') drawPicture.IsInitialized=true;
78949
79627