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.
@@ -4211,6 +4211,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4211
4211
  chart.ModifyIndexDialog=this.ModifyIndexDialog;
4212
4212
  chart.ChangeIndexDialog=this.ChangeIndexDialog;
4213
4213
  chart.MinuteDialog=this.MinuteDialog;
4214
+
4215
+ var pixelRatio=GetDevicePixelRatio();
4214
4216
 
4215
4217
  //右键菜单
4216
4218
  if (option.IsShowRightMenu==true) chart.RightMenu=new KLineRightMenu(this.DivElement);
@@ -4429,8 +4431,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4429
4431
  chart.Frame.SubFrame[i].Frame.IsShowYText[1]=item.IsShowRightText;
4430
4432
  chart.Frame.SubFrame[i].Frame.YSplitOperator.IsShowRightText=item.IsShowRightText; //显示右边刻度
4431
4433
  }
4432
- if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace;
4433
- if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace;
4434
+ if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace*pixelRatio;
4435
+ if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace*pixelRatio;
4434
4436
 
4435
4437
  if (item.RightTextPosition>0) chart.Frame.SubFrame[i].Frame.YTextPosition[1]=item.RightTextPosition;
4436
4438
  if (item.LeftTextPosition>0) chart.Frame.SubFrame[i].Frame.YTextPosition[0]=item.LeftTextPosition;
@@ -4732,6 +4734,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4732
4734
  chart.ModifyIndexDialog=this.ModifyIndexDialog;
4733
4735
  chart.ChangeIndexDialog=this.ChangeIndexDialog;
4734
4736
 
4737
+ var pixelRatio=GetDevicePixelRatio();
4738
+
4735
4739
  var windowsCount=2;
4736
4740
  if (option.Windows && option.Windows.length>0) windowsCount+=option.Windows.length; //指标窗口从第3个窗口开始
4737
4741
  if (option.EnableScrollUpDown==true) chart.EnableScrollUpDown=option.EnableScrollUpDown;
@@ -4899,8 +4903,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4899
4903
  if (IFrameSplitOperator.IsNumber(item.YTextBaseline)) chart.Frame.SubFrame[i].Frame.YTextBaseline=item.YTextBaseline;
4900
4904
  if (IFrameSplitOperator.IsBool(item.IsShowIndexTitle)) chart.Frame.SubFrame[i].Frame.IsShowIndexTitle=item.IsShowIndexTitle;
4901
4905
 
4902
- if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace;
4903
- if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace;
4906
+ if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace*pixelRatio;
4907
+ if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace*pixelRatio;
4904
4908
 
4905
4909
  //是否显示关闭集合竞价按钮
4906
4910
  if (IFrameSplitOperator.IsNumber(item.CloseBeforeButton)) chart.Frame.SubFrame[i].Frame.IsShowCloseButton=item.CloseBeforeButton;
@@ -5573,6 +5577,13 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5573
5577
  //是否自动更新
5574
5578
  if (option.IsAutoUpdate!=null) chart.IsAutoUpdate=option.IsAutoUpdate;
5575
5579
  if (option.AutoUpdateFrequency>0) chart.AutoUpdateFrequency=option.AutoUpdateFrequency;
5580
+ //内置菜单
5581
+ if (option.EnablePopMenuV2===true)
5582
+ {
5583
+ chart.JSPopMenu=new JSPopMenu();
5584
+ chart.JSPopMenu.Inital();
5585
+ chart.EnablePopMenuV2=true;
5586
+ }
5576
5587
  //注册事件
5577
5588
  if (option.EventCallback)
5578
5589
  {
@@ -5599,19 +5610,6 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5599
5610
  this.DivElement.JSChart=this; //div中保存一份
5600
5611
  this.JSChartContainer.Draw();
5601
5612
  }
5602
-
5603
- if (IFrameSplitOperator.IsBool(option.CheckLatestVerion) && option.CheckLatestVerion==false)
5604
- {
5605
-
5606
- }
5607
- else if (JSChart.LastVersion==null)
5608
- {
5609
- if (chart && typeof(chart.GetLatestVersion)=='function')
5610
- {
5611
- //由于域名都要备案,获取最新版本接口停止使用
5612
- //chart.GetLatestVersion();
5613
- }
5614
- }
5615
5613
  }
5616
5614
 
5617
5615
  //创建工具条
@@ -6055,6 +6053,15 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
6055
6053
  return this.JSChartContainer.ChangePriceGap(option);
6056
6054
  }
6057
6055
  }
6056
+
6057
+ this.PopupMenuByTab=function(menuData, rtTab)
6058
+ {
6059
+ if(this.JSChartContainer && typeof(this.JSChartContainer.PopupMenuByTab)=='function')
6060
+ {
6061
+ JSConsole.Chart.Log('[JSChart:ChangePriceGap] ');
6062
+ return this.JSChartContainer.PopupMenuByTab(menuData, rtTab);
6063
+ }
6064
+ }
6058
6065
  }
6059
6066
 
6060
6067
  JSChart.LastVersion=null; //最新的版本号
@@ -6260,6 +6267,12 @@ JSChart.ToFixedRect=function(value)
6260
6267
  return ToFixedRect(value);
6261
6268
  }
6262
6269
 
6270
+ JSChart.GetScrollPosition=function()
6271
+ {
6272
+ return GetScrollPosition();
6273
+ }
6274
+
6275
+
6263
6276
 
6264
6277
 
6265
6278
  var JSCHART_EVENT_ID=
@@ -6545,6 +6558,36 @@ var JSCHART_WORKER_MESSAGE_ID=
6545
6558
  ERROR_EXECUTE_SCRIPT:3,
6546
6559
  }
6547
6560
 
6561
+ var JSCHART_MENU_ID=
6562
+ {
6563
+ CMD_CHANGE_PERIOD_ID:1, //切换周期
6564
+ CMD_CHANGE_WINDOW_COUNT_ID:2, //窗口个数
6565
+ CMD_CHANGE_RIGHT_ID:3, //复权
6566
+ CMD_CHANGE_INDEX_ID:4, //切换指标
6567
+ CMD_CHANGE_COLOR_INDEX_ID:5, //五彩K线指标
6568
+ CMD_CHANGE_TRADE_INDEX_ID:6, //专家系统(交易指标)
6569
+ CMD_DELETE_COLOR_INDEX_ID:7, //删除五彩K线指标
6570
+ CMD_DELETE_TRADE_INDEX_ID:8, //删除专家系统(交易指标)
6571
+ CMD_CHANGE_KLINE_TYPE_ID:9, //切换K线类型
6572
+ CMD_CHANGE_PRICE_GAP_ID:10, //缺口提示
6573
+ CMD_OVERLAY_SYMBOL_ID:11, //叠加品种
6574
+ CMD_DELETE_ALL_OVERLAY_SYMBOL_ID:12, //删除所有叠加品种
6575
+ CMD_CHANGE_COORDINATETYPE_ID:13, //切换坐标类型
6576
+ CMD_CHANGE_KLINE_INFO_ID:14, //切换信息地雷
6577
+ CMD_DELETE_ALL_KLINE_INFO_ID:15, //清空信息地雷
6578
+ CMD_CHANGE_DRAG_MODE_ID:16, //切换拖动模式
6579
+ CMD_CHANGE_BG_SPLIT_ID:17, //背景分割
6580
+
6581
+ CMD_SHOW_DRAWTOOL_ID:18, //画图工具
6582
+ CMD_HIDE_DRAWTOOL_ID:19,
6583
+
6584
+ CMD_SHOW_STOCKCHIP_ID:20, //筹码分布
6585
+ CMD_HIDE_STOCKCHIP_ID:21,
6586
+
6587
+ CMD_ENABLE_SELECT_RECT_ID:22, //启动区间选择
6588
+ CMD_CHANGE_DAY_COUNT_ID:23, //切换天数
6589
+ }
6590
+
6548
6591
 
6549
6592
  function PhoneDBClick()
6550
6593
  {
@@ -6630,6 +6673,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6630
6673
  this.LoadDataSplashTitle="数据加载中"; //下载数据提示信息
6631
6674
  this.DefaultCursor="default"; //crosshair , default 默认手型
6632
6675
 
6676
+ this.EnablePopMenuV2=false;
6677
+ this.JSPopMenu; //内置菜单
6678
+ //this.JSPopMenu=new JSPopMenu(); //内置菜单
6679
+ //this.JSPopMenu.Inital();
6680
+
6633
6681
  //绘图缓存
6634
6682
  this.CacheCanvas=null;
6635
6683
  this.CacheElement=null;
@@ -6825,61 +6873,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6825
6873
  {
6826
6874
  this.IsDestroy=true;
6827
6875
  this.StopAutoUpdate();
6828
-
6829
- if (this.GetLatestVersionTimer!=null)
6830
- {
6831
- clearTimeout(this.GetLatestVersionTimer);
6832
- this.GetLatestVersionTimer=null;
6833
- }
6834
6876
  }
6835
6877
 
6836
6878
  this.ChartDestory=this.ChartDestroy; //老版本写错了,需要兼容下
6837
6879
 
6838
-
6839
- this.GetLatestVersionTimer=null; //获取最新版本
6840
- this.GetLatestVersion=function()
6841
- {
6842
- if (this.GetLatestVersionTimer!=null)
6843
- {
6844
- clearTimeout(this.GetLatestVersionTimer);
6845
- this.GetLatestVersionTimer=null;
6846
- }
6847
-
6848
- var roundeTime=Math.floor(Math.random()*50);
6849
- var waittimer=1000*60*3+(roundeTime*1000);
6850
- var value="aHR0cHM6Ly9ocWNoYXJ0LnplYWxpbmsuY29tL2FwaS9HZXRWZXJzaW9u";
6851
- JSConsole.Chart.Log("[JSChartContainer::GetLatestVersion] wait for get hqchart latest version. ",waittimer);
6852
- this.GetLatestVersionTimer = setTimeout(()=>
6853
- {
6854
- var width=0, height=0;
6855
- if (this.Frame && this.Frame.ChartBorder)
6856
- {
6857
- width=this.Frame.ChartBorder.GetChartWidth();
6858
- height=this.Frame.ChartBorder.GetChartHeight();
6859
- }
6860
-
6861
- var url=`${atob(value)}?width=${width}&height=${height}&type=h5`;
6862
-
6863
- if (JSChart.LastVersion!=null) return; //只请求一次
6864
-
6865
- JSNetwork.HttpRequest({
6866
- url: url,
6867
- type:"get",
6868
- dataType: "json",
6869
- async:true,
6870
- success:function(data)
6871
- {
6872
- JSConsole.Chart.Log("[JSChartContainer::GetLatestVersion] hqchart latest version. ",data);
6873
- JSChart.LastVersion=data;
6874
- },
6875
- error:function(request, textStatus, errorThrown)
6876
- {
6877
- JSConsole.Chart.Log("[JSChartContainer::GetLatestVersion] Get HQChart latest version failed.", request);
6878
- }
6879
- });
6880
- }, waittimer);
6881
- }
6882
-
6883
6880
  //设置焦点
6884
6881
  this.SetFocus=function()
6885
6882
  {
@@ -12938,6 +12935,213 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
12938
12935
  }
12939
12936
  }
12940
12937
  }
12938
+
12939
+ this.PopupMenuByTab=function(menuData, rtTab)
12940
+ {
12941
+ if (!this.JSPopMenu) return;
12942
+
12943
+ var pixelRatio=GetDevicePixelRatio();
12944
+ var rtCell={ Left:rtTab.Left/pixelRatio, Right:rtTab.Right/pixelRatio, Bottom:rtTab.Bottom/pixelRatio, Top:rtTab.Top/pixelRatio };
12945
+ rtCell.Width=rtCell.Right-rtCell.Left;
12946
+ rtCell.Height=rtCell.Bottom-rtCell.Top;
12947
+
12948
+ var rtClient=this.UIElement.getBoundingClientRect();
12949
+ var rtScroll=GetScrollPosition();
12950
+
12951
+ var offsetLeft=rtClient.left+rtScroll.Left;
12952
+ var offsetTop=rtClient.top+rtScroll.Top;
12953
+ rtCell.Left+=offsetLeft;
12954
+ rtCell.Right+=offsetLeft;
12955
+ rtCell.Top+=offsetTop;
12956
+ rtCell.Bottom+=offsetTop;
12957
+
12958
+ this.JSPopMenu.CreatePopMenu(menuData);
12959
+ this.JSPopMenu.PopupMenuByTab(rtCell);
12960
+ }
12961
+
12962
+ this.PopuMenuByRClick=function(menuData, x, y)
12963
+ {
12964
+ var rtClient=this.UIElement.getBoundingClientRect();
12965
+ var rtScroll=GetScrollPosition();
12966
+
12967
+ x+=rtClient.left+rtScroll.Left;
12968
+ y+=rtClient.top+rtScroll.Top;
12969
+
12970
+ this.JSPopMenu.CreatePopMenu(menuData);
12971
+ this.JSPopMenu.PopupMenuByRight(x,y);
12972
+ }
12973
+
12974
+ //点击右键菜单
12975
+ this.OnClickRightMenu=function(data)
12976
+ {
12977
+ JSConsole.Chart.Log('[JSChartContainer::OnClickRightMenu] ',data);
12978
+ if (!data || !data.Data) return;
12979
+
12980
+ var cmdID=data.Data.ID; //命令ID
12981
+ var aryArgs=data.Data.Args; //参数
12982
+ var param=null, srcParam=null; //原始值
12983
+ if (IFrameSplitOperator.IsNonEmptyArray(aryArgs))
12984
+ {
12985
+ srcParam=aryArgs[0];
12986
+ if (IFrameSplitOperator.IsNumber(aryArgs[0])) param=aryArgs[0];
12987
+ }
12988
+
12989
+ switch(cmdID)
12990
+ {
12991
+ case JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID:
12992
+ if (this.ChangePeriod && param!=null)
12993
+ this.ChangePeriod(param);
12994
+ break;
12995
+ case JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID:
12996
+ if (this.ChangeIndexWindowCount && param!=null)
12997
+ this.ChangeIndexWindowCount(param);
12998
+ break;
12999
+ case JSCHART_MENU_ID.CMD_CHANGE_RIGHT_ID:
13000
+ if (this.ChangeRight && param!=null)
13001
+ this.ChangeRight(param);
13002
+ break;
13003
+ case JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID:
13004
+ if (this.ChangeIndex && param!=null && aryArgs[1])
13005
+ this.ChangeIndex(param,aryArgs[1]);
13006
+ break;
13007
+
13008
+ case JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID:
13009
+ case JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID:
13010
+ if (this.ChangeInstructionIndex && aryArgs[0])
13011
+ this.ChangeInstructionIndex(aryArgs[0]);
13012
+ break;
13013
+ case JSCHART_MENU_ID.CMD_DELETE_COLOR_INDEX_ID: //删除五彩K线指标
13014
+ case JSCHART_MENU_ID.CMD_DELETE_TRADE_INDEX_ID: //删除专家系统(交易指标)
13015
+ if (this.CancelInstructionIndex) this.CancelInstructionIndex();
13016
+ break;
13017
+ case JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID: //切换K线类型
13018
+ if (this.ChangeKLineDrawType && param!=null)
13019
+ this.ChangeKLineDrawType(param,aryArgs[1],aryArgs[2]);
13020
+ break;
13021
+ case JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID: //缺口提示
13022
+ if (this.ChangePriceGap && IFrameSplitOperator.IsBool(aryArgs[0]))
13023
+ {
13024
+ if (aryArgs[0]==false)
13025
+ {
13026
+ this.ChangePriceGap({ Enable:aryArgs[0] });
13027
+ }
13028
+ else
13029
+ {
13030
+ if (IFrameSplitOperator.IsNumber(aryArgs[1]))
13031
+ this.ChangePriceGap({ Enable:aryArgs[0], Count:aryArgs[1] });
13032
+ }
13033
+ }
13034
+ break;
13035
+ case JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID:
13036
+ if (aryArgs[1]===true)
13037
+ {
13038
+ if (this.OverlaySymbol && aryArgs[0]) this.OverlaySymbol(aryArgs[0]);
13039
+ }
13040
+ else if (aryArgs[1]===false)
13041
+ {
13042
+ if (this.DeleteOverlaySymbol && aryArgs[0]) this.DeleteOverlaySymbol(aryArgs[0]);
13043
+ }
13044
+ break;
13045
+ case JSCHART_MENU_ID.CMD_DELETE_ALL_OVERLAY_SYMBOL_ID:
13046
+ if (this.ClearOverlaySymbol) this.ClearOverlaySymbol();
13047
+ break;
13048
+ case JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID:
13049
+ if (this.ChangeCoordinateType && aryArgs[0]) this.ChangeCoordinateType(aryArgs[0]);
13050
+ break;
13051
+ case JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID:
13052
+ if (aryArgs[0] && IFrameSplitOperator.IsBool(aryArgs[1]))
13053
+ {
13054
+ if (aryArgs[1]==true && this.AddKLineInfo) this.AddKLineInfo(aryArgs[0],true);
13055
+ else if (aryArgs[1]==false && this.DeleteKLineInfo) this.DeleteKLineInfo(aryArgs[0]);
13056
+ }
13057
+ break;
13058
+ case JSCHART_MENU_ID.CMD_DELETE_ALL_KLINE_INFO_ID:
13059
+ if (this.ClearKLineInfo) this.ClearKLineInfo();
13060
+ break;
13061
+ case JSCHART_MENU_ID.CMD_CHANGE_DRAG_MODE_ID:
13062
+ if (param!=null) this.DragMode=param;
13063
+ break;
13064
+ case JSCHART_MENU_ID.CMD_CHANGE_BG_SPLIT_ID:
13065
+ if (IFrameSplitOperator.IsBool(srcParam))
13066
+ {
13067
+ if (srcParam)
13068
+ {
13069
+ this.CreateExtendChart("SessionBreaksPaint", { });
13070
+ this.Draw();
13071
+ }
13072
+ else
13073
+ {
13074
+ var finder=this.GetExtendChartByClassName("SessionBreaksPaint");
13075
+ if (finder)
13076
+ {
13077
+ this.DeleteExtendChartByID(finder.Chart.ID);
13078
+ this.Draw();
13079
+ }
13080
+ }
13081
+ }
13082
+ break;
13083
+ case JSCHART_MENU_ID.CMD_SHOW_DRAWTOOL_ID:
13084
+ var option={Name:'画图工具', Top:this.Frame.ChartBorder.Top };
13085
+ var extendChart=this.CreateExtendChart(option.Name, option); //创建扩展图形
13086
+ this.SetSizeChange(true);
13087
+ this.Draw();
13088
+ break;
13089
+ case JSCHART_MENU_ID.CMD_HIDE_DRAWTOOL_ID:
13090
+ var drawTools=this.GetExtendChartByClassName('DrawToolsButton');
13091
+ if (drawTools)
13092
+ {
13093
+ var toolsWidth=drawTools.Chart.Width;
13094
+ var toolsIndex=parseInt(drawTools.Index);
13095
+ for(var i=toolsIndex+1; i<this.ExtendChartPaint.length; ++i) //在画图工具后面创建的需要减去工具的宽度
13096
+ {
13097
+ var item=this.ExtendChartPaint[i];
13098
+ if (item.ClassName=='StockChip')
13099
+ {
13100
+ item.Left-=toolsWidth;
13101
+ }
13102
+ }
13103
+ this.DeleteExtendChart(drawTools);
13104
+ this.Frame.ChartBorder.Right-=toolsWidth;
13105
+ this.SetSizeChange(true);
13106
+ this.Draw();
13107
+ }
13108
+ break;
13109
+ case JSCHART_MENU_ID.CMD_SHOW_STOCKCHIP_ID:
13110
+ var option={Name:'筹码分布', ShowType:1, Width:230 };
13111
+ var extendChart=this.CreateExtendChart(option.Name, option); //创建扩展图形
13112
+ this.SetSizeChange(true);
13113
+ this.Draw();
13114
+ break;
13115
+ case JSCHART_MENU_ID.CMD_HIDE_STOCKCHIP_ID:
13116
+ var StockChip=chart.GetExtendChartByClassName('StockChip');
13117
+ if (StockChip)
13118
+ {
13119
+ var chipWidth=StockChip.Chart.Width;
13120
+ var chipIndex=parseInt(StockChip.Index);
13121
+ for(var i=chipIndex+1; i<this.ExtendChartPaint.length; ++i) //在筹码后面创建的需要筹码的宽度
13122
+ {
13123
+ var item=this.ExtendChartPaint[i];
13124
+ if (item.ClassName=='DrawToolsButton')
13125
+ {
13126
+ item.Left-=chipWidth;
13127
+ }
13128
+ }
13129
+ this.DeleteExtendChart(StockChip);
13130
+ this.Frame.ChartBorder.Right-=chipWidth;
13131
+ this.SetSizeChange(true);
13132
+ this.Draw();
13133
+ }
13134
+ break;
13135
+ case JSCHART_MENU_ID.CMD_ENABLE_SELECT_RECT_ID:
13136
+ if (IFrameSplitOperator.IsBool(srcParam))
13137
+ this.EnableSelectRect=srcParam;
13138
+ break;
13139
+ case JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID:
13140
+ if (this.ChangeDayCount && param!=null)
13141
+ this.ChangeDayCount(param);
13142
+ break;
13143
+ }
13144
+ }
12941
13145
  }
12942
13146
 
12943
13147
  function GetDevicePixelRatio()
@@ -13035,11 +13239,12 @@ function GetScrollPosition()
13035
13239
  var scrollPos={};
13036
13240
  var scrollTop=0;
13037
13241
  var scrollLeft=0;
13038
- if(document.documentElement && document.documentElement.scrollTop)
13242
+ if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft))
13039
13243
  {
13040
13244
  scrollTop=document.documentElement.scrollTop;
13041
13245
  scrollLeft=document.documentElement.scrollLeft;
13042
- }else if(document.body)
13246
+ }
13247
+ else if(document.body)
13043
13248
  {
13044
13249
  scrollTop=document.body.scrollTop;
13045
13250
  scrollLeft=document.body.scrollLeft;
@@ -48003,7 +48208,8 @@ function FrameButtomToolbarPaint()
48003
48208
  this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);
48004
48209
  }
48005
48210
 
48006
- var font=this.TitleFont(rtBG.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom);
48211
+ var font=this.GetTitleFont(rtBG.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom);
48212
+ var svgFont=this.GetSVGFont(rtBG.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom);
48007
48213
  this.Canvas.textBaseline='middle';
48008
48214
  this.Canvas.textAlign='center';
48009
48215
  this.Canvas.font=font;
@@ -48011,9 +48217,23 @@ function FrameButtomToolbarPaint()
48011
48217
  for(var i=0;i<this.AryButton.length;++i)
48012
48218
  {
48013
48219
  var item=this.AryButton[i];
48014
- if (!item.Title) return;
48015
- var textWidth=this.Canvas.measureText(item.Title).width+2;
48016
- var buttonWidth=textWidth+this.ButtonConfig.Mergin.Left+this.ButtonConfig.Mergin.Right;
48220
+ if (!item.Title && !(item.SVGButton && item.SVGButton.Symbol)) return;
48221
+
48222
+ var textWidth=0;
48223
+ if (item.Title)
48224
+ {
48225
+ textWidth=this.Canvas.measureText(item.Title).width+2;
48226
+ }
48227
+
48228
+ var svgButtonWidth=0;
48229
+ if (item.SVGButton && item.SVGButton.Symbol)
48230
+ {
48231
+ svgButtonWidth=this.ButtonConfig.SVG.Size;
48232
+ if (textWidth>0) svgButtonWidth+=this.ButtonConfig.SVG.MerginLeft;
48233
+
48234
+ }
48235
+
48236
+ var buttonWidth=textWidth+svgButtonWidth+this.ButtonConfig.Mergin.Left+this.ButtonConfig.Mergin.Right;
48017
48237
  var rtButton={ Left:xBotton, Top:rtBG.Top, Bottom:rtBG.Bottom, Height:rtBG.Height, Width:buttonWidth };
48018
48238
  rtButton.Right=rtButton.Left+rtButton.Width;
48019
48239
 
@@ -48050,12 +48270,50 @@ function FrameButtomToolbarPaint()
48050
48270
  this.Canvas.stroke();
48051
48271
  }
48052
48272
 
48053
- this.Canvas.fillStyle=titleColor;
48054
- var xText=rtButton.Left+rtButton.Width/2; //居中
48055
- var yText=rtButton.Top+this.ButtonConfig.Mergin.Top+(rtButton.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom)/2;
48056
- this.Canvas.fillText(item.Title,xText,yText);
48273
+ if (item.Title)
48274
+ {
48275
+ this.Canvas.fillStyle=titleColor;
48276
+ var xText=rtButton.Left+(rtButton.Width-svgButtonWidth)/2; //居中
48277
+ var yText=rtButton.Top+this.ButtonConfig.Mergin.Top+(rtButton.Height-this.ButtonConfig.Mergin.Top-this.ButtonConfig.Mergin.Bottom)/2;
48278
+ this.Canvas.fillText(item.Title,xText,yText);
48279
+ }
48280
+
48281
+
48282
+ var rtSVG=null;
48283
+ if (item.SVGButton && item.SVGButton.Symbol)
48284
+ {
48285
+ this.Canvas.font=svgFont;
48286
+ this.Canvas.fillStyle=titleColor;
48287
+ var xText=rtButton.Right-this.ButtonConfig.SVG.Size/2-this.ButtonConfig.Mergin.Right;
48288
+ this.Canvas.fillText(item.SVGButton.Symbol,xText,yText);
48289
+ this.Canvas.font=font;
48290
+
48291
+ 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};
48292
+ rtSVG.Right=rtSVG.Left+rtSVG.Width;
48293
+ rtSVG.Bottom=rtSVG.Top+rtSVG.Height;
48294
+ }
48295
+
48296
+ //{ Rect:rtButton, ID:item.ID, Data:item, RectSVG:rtSVG }
48297
+ if (textWidth>0 && svgButtonWidth>0)
48298
+ {
48299
+ var rtText={ Left:rtButton.Left, Top:rtButton.Top, Bottom:rtButton.Bottom };
48300
+ rtText.Right=rtText.Left+textWidth+this.ButtonConfig.Mergin.Left+this.ButtonConfig.SVG.MerginLeft/2;
48301
+ var cacheItem={ Rect:rtText, ID:item.ID, Data:item, RectCell:rtButton, ButtonType:0 };
48302
+ this.AryRectButton.push(cacheItem);
48303
+
48304
+ var rtSVG={Left:rtText.Right, Right:rtButton.Right, Top:rtButton.Top, Bottom:rtButton.Bottom };
48305
+ var cacheItem={ Rect:rtSVG, ID:item.ID, Data:item, RectCell:rtButton, ButtonType:1 };
48306
+ this.AryRectButton.push(cacheItem);
48307
+ }
48308
+ else
48309
+ {
48310
+ var cacheItem={ Rect:rtButton, ID:item.ID, Data:item, RectCell:rtButton }; //RectCell 全部的大小
48311
+ if (textWidth>0) cacheItem.ButtonType=0;
48312
+ else if (svgButtonWidth>0) cacheItem.ButtonType=1;
48313
+ this.AryRectButton.push(cacheItem);
48314
+ }
48315
+
48057
48316
 
48058
- this.AryRectButton.push({ Rect:rtButton, ID:item.ID, Data:item });
48059
48317
 
48060
48318
  xBotton+=buttonWidth+1;
48061
48319
  }
@@ -48084,13 +48342,22 @@ function FrameButtomToolbarPaint()
48084
48342
  return null;
48085
48343
  }
48086
48344
 
48087
- this.TitleFont=function(height)
48345
+ this.GetTitleFont=function(height)
48088
48346
  {
48089
48347
  var config=this.ButtonConfig.Font;
48090
- var fontSize=height;
48348
+ var fontSize=height*GetDevicePixelRatio();
48091
48349
  if (IFrameSplitOperator.IsPlusNumber(config.Size)) fontSize=config.Size;
48092
48350
 
48093
- var font=`${fontSize*GetDevicePixelRatio()}px ${config.Family}`;
48351
+ var font=`${fontSize}px ${config.Family}`;
48352
+ return font;
48353
+ }
48354
+
48355
+ this.GetSVGFont=function(height)
48356
+ {
48357
+ var config=this.ButtonConfig.SVG;
48358
+ var fontSize=height*GetDevicePixelRatio();
48359
+ if (IFrameSplitOperator.IsPlusNumber(config.Size)) fontSize=config.Size;
48360
+ var font=`${fontSize}px ${config.Family}`;
48094
48361
  return font;
48095
48362
  }
48096
48363
 
@@ -48103,7 +48370,7 @@ function FrameButtomToolbarPaint()
48103
48370
  if (x>rect.Left && x<rect.Right && y>rect.Top && y<rect.Bottom)
48104
48371
  {
48105
48372
  var frame=this.GetFrame();
48106
- var result={ ID:item.Data.ID, Rect:rect, FrameID:this.FrameID, Frame:frame, Data:item.Data };
48373
+ var result={ ID:item.Data.ID, Rect:rect, FrameID:this.FrameID, Frame:frame, Data:item.Data, ButtonType:item.ButtonType, RectCell:item.RectCell, };
48107
48374
  return result;
48108
48375
  }
48109
48376
  }
@@ -57444,7 +57711,7 @@ function IChartDrawPicture()
57444
57711
  if (option.LineWidth>0) this.LineWidth=option.LineWidth;
57445
57712
  if (option.AreaColor) this.AreaColor=option.AreaColor;
57446
57713
  if (option.PointColor) this.PointColor=option.PointColor;
57447
- if (option.MoveOnPointColor) this.SelectPointColor=option.PointColor;
57714
+ if (option.MoveOnPointColor) this.MoveOnPointColor=option.MoveOnPointColor;
57448
57715
  if (option.PointRadius) this.PointRadius=option.PointRadius;
57449
57716
  if (IFrameSplitOperator.IsNumber(option.SquareSize)) this.SquareSize=option.SquareSize;
57450
57717
  if (IFrameSplitOperator.IsBool(option.IsShowPoint)) this.IsShowPoint=option.IsShowPoint;
@@ -57643,8 +57910,8 @@ function IChartDrawPicture()
57643
57910
  for(var i=0; i<this.Point.length; ++i)
57644
57911
  {
57645
57912
  var item=this.Point[i];
57646
- var xValue=parseInt(this.Frame.GetXData(item.Y));
57647
- var yValue=this.Frame.GetYData(item.X);
57913
+ var xValue=parseInt(this.Frame.GetXData(item.Y,false));
57914
+ var yValue=this.Frame.GetYData(item.X,false);
57648
57915
 
57649
57916
  var valueItem={ XValue:xValue, YValue:yValue };
57650
57917
  var minuteItem=data.Data[xValue];
@@ -57658,8 +57925,8 @@ function IChartDrawPicture()
57658
57925
  for(var i=0; i<this.Point.length; ++i)
57659
57926
  {
57660
57927
  var item=this.Point[i];
57661
- var xValue=parseInt(this.Frame.GetXData(item.X));
57662
- var yValue=this.Frame.GetYData(item.Y);
57928
+ var xValue=parseInt(this.Frame.GetXData(item.X,false));
57929
+ var yValue=this.Frame.GetYData(item.Y,false);
57663
57930
 
57664
57931
  if (xValue>=data.Data.length) //超过当前数据,直接读固定时间
57665
57932
  {
@@ -57734,7 +58001,7 @@ function IChartDrawPicture()
57734
58001
  }
57735
58002
 
57736
58003
  data.FindDataIndexByDateTime(aryDateTime);
57737
- for(var i in aryDateTime)
58004
+ for(var i=0; i<aryDateTime.length; ++i)
57738
58005
  {
57739
58006
  var findItem=aryDateTime[i];
57740
58007
  var valueItem=this.Value[i];
@@ -57742,6 +58009,17 @@ function IChartDrawPicture()
57742
58009
  }
57743
58010
  }
57744
58011
 
58012
+ //重置X索引数据
58013
+ this.ResetXValue=function()
58014
+ {
58015
+ for(var i=0; i<this.Value.length; ++i)
58016
+ {
58017
+ var item=this.Value[i];
58018
+ item.XValue=null;
58019
+ }
58020
+ return true;
58021
+ }
58022
+
57745
58023
  //xStep,yStep 移动的偏移量
57746
58024
  this.Move=function(xStep,yStep)
57747
58025
  {
@@ -57867,6 +58145,8 @@ function IChartDrawPicture()
57867
58145
  for(var i=0; i<this.Value.length; ++i)
57868
58146
  {
57869
58147
  var item=this.Value[i];
58148
+ if (!IFrameSplitOperator.IsNumber(item.XValue)) return null; //无效索引 不显示
58149
+
57870
58150
  var dataIndex=item.XValue-data.DataOffset;
57871
58151
  if (dataIndex<0 || dataIndex>=showCount) ++invaildX;
57872
58152
 
@@ -58937,7 +59217,7 @@ function ChartDrawPictureLine()
58937
59217
  if (this.IsFrameMinSize()) return;
58938
59218
  if (!this.IsShow) return;
58939
59219
 
58940
- var drawPoint=this.CalculateDrawPoint( {IsCheckX:true, IsCheckY:true} );
59220
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:true, IsCheckY:false} );
58941
59221
  if (!drawPoint) return;
58942
59222
  if (drawPoint.length!=2) return;
58943
59223
 
@@ -68770,12 +69050,14 @@ function JSChartResource()
68770
69050
  BorderColor:"rgb(204,204,204)",
68771
69051
  Button:
68772
69052
  {
68773
- Font:{ Family:"微软雅黑" },
69053
+ Font:{ Family:"微软雅黑", Size:12*GetDevicePixelRatio() },
68774
69054
  TitleColor: { Selected:"rgb(255,255,255)", Default:"rgb(125,125,125)", MoveOn:"rgb(234,85,4)" },
68775
69055
  BGColor: { Selected:"rgb(234,85,4)", Default:"rgb(235,235,235)", MoveOn:"rgb(242,242,242)" },
68776
69056
  BorderColor:"rgb(204,204,204)",
68777
69057
 
68778
- Mergin: { Left:5*GetDevicePixelRatio(), Right:5*GetDevicePixelRatio(), Top:4*GetDevicePixelRatio(), Bottom:2*GetDevicePixelRatio() }
69058
+ Mergin: { Left:5*GetDevicePixelRatio(), Right:5*GetDevicePixelRatio(), Top:4*GetDevicePixelRatio(), Bottom:2*GetDevicePixelRatio() },
69059
+
69060
+ SVG:{ Family:"iconfont", Size:12*GetDevicePixelRatio(), MerginLeft:4*GetDevicePixelRatio() }
68779
69061
  }
68780
69062
  }
68781
69063
 
@@ -69794,6 +70076,15 @@ function JSChartResource()
69794
70076
  if (IFrameSplitOperator.IsNumber(item.Top)) destItem.Top=item.Top;
69795
70077
  if (IFrameSplitOperator.IsNumber(item.Bottom)) destItem.Bottom=item.Bottom;
69796
70078
  }
70079
+
70080
+ if (button.SVG)
70081
+ {
70082
+ var item=button.SVG;
70083
+ var destItem=this.FrameButtomToolbar.Button.SVG;
70084
+ if (IFrameSplitOperator.IsNumber(item.Size)) destItem.Size=item.Size;
70085
+ if (IFrameSplitOperator.IsNumber(item.MerginLeft)) destItem.MerginLeft=item.MerginLeft;
70086
+ if (item.Family) destItem.Family=item.Family;
70087
+ }
69797
70088
  }
69798
70089
 
69799
70090
  }
@@ -76105,12 +76396,16 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
76105
76396
  }
76106
76397
  }
76107
76398
 
76108
-
76109
76399
  //注册鼠标右键事件
76110
76400
  this.OnRightMenu=function(x,y,e)
76111
76401
  {
76112
76402
  var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
76113
- if (this.RightMenu)
76403
+ if (this.EnablePopMenuV2)
76404
+ {
76405
+ var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
76406
+ this.PopuRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
76407
+ }
76408
+ else if (this.RightMenu)
76114
76409
  {
76115
76410
  var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
76116
76411
  e.data={ Chart:this, FrameID:frameId };
@@ -76126,11 +76421,286 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
76126
76421
  }
76127
76422
  }
76128
76423
 
76424
+ //右键菜单数据
76425
+ this.GetRightMenuData=function(frameID)
76426
+ {
76427
+ var windowCount=this.Frame.SubFrame.length; //窗口个数
76428
+ var klineChart=this.ChartPaint[0];
76429
+ var priceGap=klineChart.PriceGap; //缺口配置信息
76430
+ var coordinateType=null, yCoordinateType=null; //坐标类型
76431
+ var mainFrame=null;
76432
+ if (this.Frame.SubFrame[0] && this.Frame.SubFrame[0].Frame) mainFrame=this.Frame.SubFrame[0].Frame;
76433
+ if (mainFrame)
76434
+ {
76435
+ coordinateType=mainFrame.CoordinateType;
76436
+ if (mainFrame.YSplitOperator) yCoordinateType=mainFrame.YSplitOperator.CoordinateType;
76437
+ }
76438
+
76439
+ var aryKLineInfo=[]; //信息地雷
76440
+ for(var i=0;i<this.ChartInfo.length;++i)
76441
+ {
76442
+ var item=this.ChartInfo[i];
76443
+ if (item && item.ClassName) aryKLineInfo.push(item.ClassName);
76444
+ }
76445
+
76446
+ var aryOverlaySymbol=[]; //叠加的股票列表
76447
+ for(var i=0; i<this.OverlayChartPaint.length; ++i)
76448
+ {
76449
+ var item=this.OverlayChartPaint[i];
76450
+ if (item && item.Symbol) aryOverlaySymbol.push(item.Symbol)
76451
+ }
76452
+
76453
+ var bBGSpit=false, bShowDrawTool=false, bShowStockChip=false;
76454
+ if (this.GetExtendChartByClassName("SessionBreaksPaint")) bBGSpit=true;
76455
+ if (this.GetExtendChartByClassName('DrawToolsButton')) bShowDrawTool=true; //画图工具
76456
+ if (this.GetExtendChartByClassName('StockChip')) bShowStockChip=true; //筹码
76457
+
76458
+ var aryMenu=
76459
+ [
76460
+ {
76461
+ Name:"分析周期",
76462
+ SubMenu:
76463
+ [
76464
+ { Name:"日线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[0] }, Checked:this.Period==0 },
76465
+ { Name:"周线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[1] }, Checked:this.Period==1 },
76466
+ { Name:"双周线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[21]}, Checked:this.Period==21 },
76467
+ { Name:"月线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[2]}, Checked:this.Period==2 },
76468
+ { Name:"季线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[9]}, Checked:this.Period==9 },
76469
+ { Name:"半年", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[22]}, Checked:this.Period==22 },
76470
+ { Name:"年线", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[3]}, Checked:this.Period==3 },
76471
+ { Name:"1分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[4]}, Checked:this.Period==4 },
76472
+ { Name:"5分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[5]}, Checked:this.Period==5 },
76473
+ { Name:"15分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[6]}, Checked:this.Period==6 },
76474
+ { Name:"30分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[7]}, Checked:this.Period==7 },
76475
+ { Name:"60分", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[8]}, Checked:this.Period==8 },
76476
+ { Name:"2小时", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[11]}, Checked:this.Period==11 },
76477
+ { Name:"4小时", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[12]}, Checked:this.Period==12 },
76478
+ { Name:"分笔", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[10]}, Checked:this.Period==10 },
76479
+ { Name:"自定义周期:3分钟", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[20003]}, Checked:this.Period==20003 },
76480
+ { Name:"自定义周期:35分钟", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[20035]}, Checked:this.Period==20035 },
76481
+ { Name:"自定义周期:8日", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_PERIOD_ID, Args:[40008]}, Checked:this.Period==40008 },
76482
+ ]
76483
+ },
76484
+ {
76485
+ Name:"指标切换",
76486
+ SubMenu:
76487
+ [
76488
+ { Name:"均线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "均线"]}},
76489
+ { Name:"BOLL", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "BOLL"]}},
76490
+ { Name:"MACD", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "MACD"]}},
76491
+ { Name:"KDJ", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "KDJ"]}},
76492
+ { Name:"VOL", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "VOL"]}},
76493
+ { Name:"RSI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "RSI"]}},
76494
+ { Name:"BRAR", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "BRAR"]}},
76495
+ { Name:"WR", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "WR"]}},
76496
+ ]
76497
+ },
76498
+ {
76499
+ Name:"五彩K线",
76500
+ SubMenu:
76501
+ [
76502
+ { Name:"十字星", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-十字星"]}},
76503
+ { Name:"早晨之星", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-早晨之星"]}},
76504
+ { Name:"垂死十字", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-垂死十字"]}},
76505
+ { Name:"三只乌鸦", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-三只乌鸦"]}},
76506
+ { Name:"光脚阴线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-光脚阴线"]}},
76507
+ { Name:"黄昏之星", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COLOR_INDEX_ID, Args:["五彩K线-黄昏之星"]}},
76508
+ ]
76509
+
76510
+ },
76511
+ {
76512
+ Name:"专家系统",
76513
+ SubMenu:
76514
+ [
76515
+ { Name:"BIAS", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-BIAS"]}},
76516
+ { Name:"CCI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-CCI"]}},
76517
+ { Name:"DMI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-DMI"]}},
76518
+ { Name:"KD", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-KD"]}},
76519
+ { Name:"BOLL", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-BOLL"]}},
76520
+ { Name:"KDJ", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_TRADE_INDEX_ID, Args:["交易系统-KDJ"]}},
76521
+ ]
76522
+ },
76523
+ {
76524
+ Name:"信息地雷",
76525
+ SubMenu:
76526
+ [
76527
+ { Name:"公告", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["公告", !aryKLineInfo.includes("AnnouncementInfo")]}, Checked:aryKLineInfo.includes("AnnouncementInfo") },
76528
+ { Name:"业绩预告", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["业绩预告", !aryKLineInfo.includes("PforecastInfo")]}, Checked:aryKLineInfo.includes("PforecastInfo") },
76529
+ { Name:"调研", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["调研", !aryKLineInfo.includes("ResearchInfo") ]}, Checked:aryKLineInfo.includes("ResearchInfo") },
76530
+ { Name:"大宗交易", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["大宗交易", !aryKLineInfo.includes("BlockTrading")]}, Checked:aryKLineInfo.includes("BlockTrading") },
76531
+ { Name:"龙虎榜", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["龙虎榜", !aryKLineInfo.includes("TradeDetail")]}, Checked:aryKLineInfo.includes("TradeDetail") },
76532
+ { Name:"互动易", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_INFO_ID, Args:["互动易", !aryKLineInfo.includes("InvestorInfo")]}, Checked:aryKLineInfo.includes("InvestorInfo") },
76533
+ ]
76534
+ },
76535
+ {
76536
+ Name:"缺口提示",
76537
+ SubMenu:
76538
+ [
76539
+ { Name:"显示1个缺口", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID, Args:[true, 1]}, Checked:(priceGap.Enable==true && priceGap.Count==1) },
76540
+ { Name:"显示2个缺口", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID, Args:[true, 2]}, Checked:(priceGap.Enable==true && priceGap.Count==2) },
76541
+ { Name:"显示3个缺口", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID, Args:[true, 3]}, Checked:(priceGap.Enable==true && priceGap.Count==3) },
76542
+ { Name:"隐藏缺口", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_PRICE_GAP_ID, Args:[false]}, Checked:priceGap.Enable==false },
76543
+ ]
76544
+ },
76545
+ {
76546
+ Name:"叠加品种",
76547
+ SubMenu:
76548
+ [
76549
+ { Name:"上证指数", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["000001.sh", !aryOverlaySymbol.includes("000001.sh")]}, Checked:aryOverlaySymbol.includes("000001.sh") },
76550
+ { Name:"深证成指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399001.sz", !aryOverlaySymbol.includes("399001.sz")]}, Checked:aryOverlaySymbol.includes("399001.sz") },
76551
+ { Name:"中小板指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399005.sz", !aryOverlaySymbol.includes("399005.sz")]}, Checked:aryOverlaySymbol.includes("399005.sz") },
76552
+ { Name:"创业板指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399006.sz", !aryOverlaySymbol.includes("399006.sz")]}, Checked:aryOverlaySymbol.includes("399006.sz") },
76553
+ { Name:"沪深300", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["000300.sh", !aryOverlaySymbol.includes("000300.sh")]}, Checked:aryOverlaySymbol.includes("000300.sh")},
76554
+ ]
76555
+ },
76556
+ {
76557
+ Name:"主图线型",
76558
+ SubMenu:
76559
+ [
76560
+ { Name:"K线(空心阳线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[3]} },
76561
+ { Name:"K线(实心阳线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[0]} },
76562
+ { Name:"美国线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[2, true, { IsThinAKBar:false }]} },
76563
+ { Name:"美国线(细)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[2, true, { IsThinAKBar:true }]} },
76564
+ { Name:"收盘线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[1]} },
76565
+ { Name:"收盘面积", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[4]} },
76566
+ { Name:"K线(空心阳线阴线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[6]} },
76567
+ { Name:"Heikin Ashi", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[11]} },
76568
+ { Name:"Line Break", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[12]} },
76569
+ { Name:"High-low", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[13]} },
76570
+ { Name:"HLC Area", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[15]} },
76571
+ ]
76572
+ },
76573
+ {
76574
+ Name:"坐标类型",
76575
+ SubMenu:
76576
+ [
76577
+ { Name:"反转坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ IsReverse:coordinateType==0 }]}, Checked:coordinateType==1 },
76578
+ { Name:JSPopMenu.SEPARATOR_LINE_NAME },
76579
+
76580
+ { Name:"普通坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:0 }]}, Checked:yCoordinateType==0 },
76581
+ { Name:"百分比坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:1 }]}, Checked:yCoordinateType==1 },
76582
+ { Name:"对数坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:2 }]}, Checked:yCoordinateType==2 },
76583
+ { Name:"等比坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:3 }]}, Checked:yCoordinateType==3 },
76584
+ { Name:"等分坐标", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:4 }]}, Checked:yCoordinateType==4 },
76585
+ { Name:"黄金分割", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_COORDINATETYPE_ID, Args:[{ Type:5 }]}, Checked:yCoordinateType==5},
76586
+
76587
+ ]
76588
+ },
76589
+ {
76590
+ Name:"指标窗口个数",
76591
+ SubMenu:
76592
+ [
76593
+ { Name:"1个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[2]}, Checked:2==windowCount },
76594
+ { Name:"2个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[3]}, Checked:3==windowCount },
76595
+ { Name:"3个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[4]}, Checked:4==windowCount },
76596
+ { Name:"4个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[5]}, Checked:5==windowCount },
76597
+ { Name:"5个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[6]}, Checked:6==windowCount },
76598
+ ]
76599
+ },
76600
+ {
76601
+ Name:"其他设置",
76602
+ SubMenu:
76603
+ [
76604
+
76605
+ { Name:"禁止拖拽", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_DRAG_MODE_ID, Args:[0]}, Checked:0==this.DragMode },
76606
+ { Name:"启动拖拽", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_DRAG_MODE_ID, Args:[1]}, Checked:1==this.DragMode },
76607
+ { Name:"区间选择", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_DRAG_MODE_ID, Args:[2]}, Checked:2==this.DragMode },
76608
+ { Name:JSPopMenu.SEPARATOR_LINE_NAME },
76609
+
76610
+ { Name:"背景分割", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_BG_SPLIT_ID, Args:[!bBGSpit]}, Checked:bBGSpit},
76611
+
76612
+ { Name:"画图工具", Data:{ ID:bShowDrawTool?JSCHART_MENU_ID.CMD_HIDE_DRAWTOOL_ID:JSCHART_MENU_ID.CMD_SHOW_DRAWTOOL_ID, Args:[]}, Checked:bShowDrawTool},
76613
+
76614
+ { Name:"移动筹码图", Data:{ ID:bShowStockChip?JSCHART_MENU_ID.CMD_HIDE_STOCKCHIP_ID:JSCHART_MENU_ID.CMD_SHOW_STOCKCHIP_ID, Args:[]}, Checked:bShowStockChip},
76615
+ ]
76616
+ }
76617
+ ];
76618
+
76619
+ //复权
76620
+ if(!MARKET_SUFFIX_NAME.IsSHSZIndex(this.Symbol) && !MARKET_SUFFIX_NAME.IsBIT(this.Symbol))
76621
+ {
76622
+ var rightMenu=
76623
+ {
76624
+ Name:"复权处理",
76625
+ SubMenu:
76626
+ [
76627
+ { Name:"不复权", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_RIGHT_ID, Args:[0]}, Checked:0==this.Right },
76628
+ { Name:"前复权", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_RIGHT_ID, Args:[1]}, Checked:1==this.Right },
76629
+ { Name:"后复权", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_RIGHT_ID, Args:[2]}, Checked:2==this.Right }
76630
+ ]
76631
+ };
76632
+
76633
+ aryMenu.splice(1,0,rightMenu);
76634
+ }
76635
+
76636
+ //删除菜单
76637
+ for(var i=0;i<aryMenu.length;++i)
76638
+ {
76639
+ var item=aryMenu[i];
76640
+ if (item.Name=="五彩K线")
76641
+ {
76642
+ if (this.ColorIndex)
76643
+ {
76644
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
76645
+ item.SubMenu.push({ Name:"删除五彩K线", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_COLOR_INDEX_ID} });
76646
+ }
76647
+ }
76648
+ else if (item.Name=="专家系统")
76649
+ {
76650
+ if (this.TradeIndex)
76651
+ {
76652
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
76653
+ item.SubMenu.push({ Name:"删除专家系统", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_TRADE_INDEX_ID} });
76654
+ }
76655
+ }
76656
+ else if (item.Name=="叠加品种")
76657
+ {
76658
+ for(var j=0;j<item.SubMenu.length;++j)
76659
+ {
76660
+ if (item.SubMenu[j].Checked)
76661
+ {
76662
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
76663
+ item.SubMenu.push({ Name:"取消叠加", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_ALL_OVERLAY_SYMBOL_ID} });
76664
+ break;
76665
+ }
76666
+ }
76667
+ }
76668
+ else if (item.Name=="信息地雷")
76669
+ {
76670
+ for(var j=0;j<item.SubMenu.length;++j)
76671
+ {
76672
+ if (item.SubMenu[j].Checked)
76673
+ {
76674
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
76675
+ item.SubMenu.push({ Name:"删除所有", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_ALL_KLINE_INFO_ID} });
76676
+ break;
76677
+ }
76678
+ }
76679
+ }
76680
+ }
76681
+
76682
+ return aryMenu;
76683
+ }
76684
+
76685
+ this.PopuRightMenuV2=function(data,e)
76686
+ {
76687
+ if (!this.JSPopMenu) return;
76688
+ var x=data.X, y=data.Y;
76689
+ var frameID=data.FrameID;
76690
+ var menuData={ Menu:this.GetRightMenuData(frameID), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
76691
+ menuData.ClickCallback=(data)=>{ this.OnClickRightMenu(data); }
76692
+
76693
+ this.PopuMenuByRClick(menuData, x, y);
76694
+ }
76695
+
76129
76696
  //重新加载画图工具(切换股票|周期)
76130
76697
  this.ReloadChartDrawPicture=function()
76131
76698
  {
76132
76699
  this.ChartDrawPicture=[];
76133
- this.ChartDrawStorageCache;
76700
+ if (this.SelectChartDrawPicture) this.SelectChartDrawPicture.IsSelected=false;
76701
+ this.SelectChartDrawPicture=null;
76702
+ this.CurrentChartDrawPicture=null;
76703
+
76134
76704
  if (this.ChartDrawStorage)
76135
76705
  {
76136
76706
  this.ChartDrawStorageCache=this.ChartDrawStorage.GetDrawData( {Symbol:this.Symbol, Period:this.Period} );
@@ -77521,7 +78091,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
77521
78091
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_EXTENDCHART_BUTTON);
77522
78092
  if (event && event.Callback)
77523
78093
  {
77524
- var data={ Info:button, PreventDefault:false }; //PreventDefault 是否阻止内置的点击处理
78094
+ var data={ Info:button, PreventDefault:false, e:e }; //PreventDefault 是否阻止内置的点击处理
77525
78095
  event.Callback(event,data,this);
77526
78096
  if (data.PreventDefault) return;
77527
78097
  }
@@ -79488,7 +80058,13 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
79488
80058
  //注册鼠标右键事件
79489
80059
  this.OnRightMenu=function(x,y,e)
79490
80060
  {
79491
- if (this.RightMenu)
80061
+ var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
80062
+ if (this.EnablePopMenuV2)
80063
+ {
80064
+ var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
80065
+ this.PopuRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
80066
+ }
80067
+ else if (this.RightMenu)
79492
80068
  {
79493
80069
  var frameId=this.Frame.PtInFrame(x,y);
79494
80070
  e.data={ Chart:this, FrameID:frameId };
@@ -79504,6 +80080,107 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
79504
80080
  }
79505
80081
  }
79506
80082
 
80083
+ //右键菜单数据
80084
+ this.GetRightMenuData=function(frameID)
80085
+ {
80086
+ var windowCount=this.Frame.SubFrame.length; //窗口个数
80087
+
80088
+ var aryOverlaySymbol=[]; //叠加的股票列表
80089
+ for(var i=0; i<this.OverlayChartPaint.length; ++i)
80090
+ {
80091
+ var item=this.OverlayChartPaint[i];
80092
+ if (item && item.Symbol) aryOverlaySymbol.push(item.Symbol)
80093
+ }
80094
+
80095
+ var aryMenu=
80096
+ [
80097
+ {
80098
+ Name:"叠加品种",
80099
+ SubMenu:
80100
+ [
80101
+ { Name:"上证指数", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["000001.sh", !aryOverlaySymbol.includes("000001.sh")]}, Checked:aryOverlaySymbol.includes("000001.sh") },
80102
+ { Name:"深证成指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399001.sz", !aryOverlaySymbol.includes("399001.sz")]}, Checked:aryOverlaySymbol.includes("399001.sz") },
80103
+ { Name:"中小板指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399005.sz", !aryOverlaySymbol.includes("399005.sz")]}, Checked:aryOverlaySymbol.includes("399005.sz") },
80104
+ { Name:"创业板指", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["399006.sz", !aryOverlaySymbol.includes("399006.sz")]}, Checked:aryOverlaySymbol.includes("399006.sz") },
80105
+ { Name:"沪深300", Data:{ ID: JSCHART_MENU_ID.CMD_OVERLAY_SYMBOL_ID, Args:["000300.sh", !aryOverlaySymbol.includes("000300.sh")]}, Checked:aryOverlaySymbol.includes("000300.sh")},
80106
+ ]
80107
+ },
80108
+ {
80109
+ Name:"多日分时图",
80110
+ SubMenu:
80111
+ [
80112
+ { Name:"当日分时图", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[1]}, Checked:this.DayCount==1 },
80113
+ { Name:"最近2日", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[2]}, Checked:this.DayCount==2 },
80114
+ { Name:"最近3日", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[3]}, Checked:this.DayCount==3 },
80115
+ { Name:"最近4日", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[4]}, Checked:this.DayCount==4 },
80116
+ { Name:"最近5日", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_DAY_COUNT_ID, Args:[5]}, Checked:this.DayCount==5 },
80117
+ ]
80118
+ },
80119
+ {
80120
+ Name:"指标窗口个数",
80121
+ SubMenu:
80122
+ [
80123
+ { Name:"1个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[2]}, Checked:3==windowCount },
80124
+ { Name:"2个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[3]}, Checked:4==windowCount },
80125
+ { Name:"3个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[4]}, Checked:5==windowCount },
80126
+ { Name:"4个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[5]}, Checked:6==windowCount },
80127
+ { Name:"5个窗口", Data:{ ID:JSCHART_MENU_ID.CMD_CHANGE_WINDOW_COUNT_ID, Args:[6]}, Checked:7==windowCount },
80128
+ ]
80129
+ },
80130
+ {
80131
+ Name:"指标切换",
80132
+ SubMenu:
80133
+ [
80134
+ { Name:"MACD", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "MACD"]}},
80135
+ { Name:"DMI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "DMI"]}},
80136
+ { Name:"DMA", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "DMA"]}},
80137
+ { Name:"BRAR", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "BRAR"]}},
80138
+ { Name:"KDJ", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "KDJ"]}},
80139
+ { Name:"RSI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "RSI"]}},
80140
+ { Name:"WR", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "WR"]}},
80141
+ { Name:"CCI", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "CCI"]}},
80142
+ { Name:"TRIX", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_INDEX_ID, Args:[frameID, "TRIX"]}},
80143
+ ]
80144
+ },
80145
+ {
80146
+ Name:"区间选择",Data:{ ID: JSCHART_MENU_ID.CMD_ENABLE_SELECT_RECT_ID, Args:[!this.EnableSelectRect]}, Checked:this.EnableSelectRect
80147
+ }
80148
+
80149
+ ];
80150
+
80151
+
80152
+ //删除菜单
80153
+ for(var i=0;i<aryMenu.length;++i)
80154
+ {
80155
+ var item=aryMenu[i];
80156
+ if (item.Name=="叠加品种")
80157
+ {
80158
+ for(var j=0;j<item.SubMenu.length;++j)
80159
+ {
80160
+ if (item.SubMenu[j].Checked)
80161
+ {
80162
+ item.SubMenu.push({ Name:JSPopMenu.SEPARATOR_LINE_NAME });
80163
+ item.SubMenu.push({ Name:"取消叠加", Data:{ ID: JSCHART_MENU_ID.CMD_DELETE_ALL_OVERLAY_SYMBOL_ID} });
80164
+ break;
80165
+ }
80166
+ }
80167
+ }
80168
+ }
80169
+
80170
+ return aryMenu;
80171
+ }
80172
+
80173
+ this.PopuRightMenuV2=function(data,e)
80174
+ {
80175
+ if (!this.JSPopMenu) return;
80176
+ var x=data.X, y=data.Y;
80177
+ var frameID=data.FrameID;
80178
+ var menuData={ Menu:this.GetRightMenuData(frameID), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
80179
+ menuData.ClickCallback=(data)=>{ this.OnClickRightMenu(data); }
80180
+
80181
+ this.PopuMenuByRClick(menuData, x, y);
80182
+ }
80183
+
79507
80184
  this.OnWheel=function(e)
79508
80185
  {
79509
80186
  JSConsole.Chart.Log('[MinuteChartContainer::OnWheel]',e);
@@ -80608,15 +81285,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
80608
81285
  this.ResetDayOffset();
80609
81286
  }
80610
81287
 
80611
- if (this.DayCount>1)
80612
- {
80613
- this.ChartDrawPicture=[];
80614
- }
80615
- else
80616
- {
80617
- this.ReloadChartDrawPicture();
80618
- }
80619
-
81288
+ this.ReloadChartDrawPicture();
80620
81289
  this.ResetDataStatus();
80621
81290
  this.ClearIndexPaint(); //清空指标
80622
81291
  this.Frame.ClearYCoordinateMaxMin();
@@ -81138,6 +81807,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
81138
81807
  this.TitlePaint[0].IsShowDate=true;
81139
81808
  this.UpdateDataOffset();
81140
81809
  this.UpdateFrameMaxMin(); //调整坐标最大 最小值
81810
+ this.CreateChartDrawPictureByStorage(); //创建画图工具
81141
81811
 
81142
81812
  //执行脚本
81143
81813
  if (this.Frame.SubFrame.length>2)
@@ -81436,7 +82106,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
81436
82106
  this.UpdateLatestMinuteDataV2(minuteData);
81437
82107
  this.UpdateHistoryMinuteUI(updateTime);
81438
82108
  this.RecvMinuteDataEvent({FunctionName:"RecvUpdateMinuteData"} );
81439
- this.RequestOverlayMinuteData(); //请求叠加数据 (主数据下载完再下载)
82109
+ this.RequestOverlayMinuteData(); //请求叠加数据 (主数据下载完再下载)
81440
82110
  this.BindAllOverlayIndexData(this.SourceData);
81441
82111
  this.AutoUpdateEvent(true, "MinuteChartContainer::RecvUpdateMinuteData");
81442
82112
  this.AutoUpdate();
@@ -82856,7 +83526,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
82856
83526
  this.ReloadChartDrawPicture=function()
82857
83527
  {
82858
83528
  this.ChartDrawPicture=[];
82859
- this.ChartDrawStorageCache;
83529
+ if (this.SelectChartDrawPicture) this.SelectChartDrawPicture.IsSelected=false;
83530
+ this.SelectChartDrawPicture=null;
83531
+ this.CurrentChartDrawPicture=null;
83532
+ this.MoveOnChartDrawPicture=null;
83533
+
82860
83534
  if (this.ChartDrawStorage)
82861
83535
  {
82862
83536
  this.ChartDrawStorageCache=this.ChartDrawStorage.GetDrawData( { Symbol:this.Symbol, Period:888888888 } );
@@ -82867,7 +83541,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
82867
83541
  {
82868
83542
  if (!this.ChartDrawStorageCache || this.ChartDrawStorageCache.length<=0) return;
82869
83543
 
82870
- for(var i in this.ChartDrawStorageCache)
83544
+ var self=this;
83545
+ for(var i=0; i<this.ChartDrawStorageCache.length; ++i)
82871
83546
  {
82872
83547
  var item=this.ChartDrawStorageCache[i];
82873
83548
  if (item.FrameID<0 || !this.Frame.SubFrame || this.Frame.SubFrame.length<item.FrameID) continue;
@@ -82878,8 +83553,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
82878
83553
  drawPicture.Canvas=this.Canvas;
82879
83554
  drawPicture.Status=10;
82880
83555
  drawPicture.Frame=this.Frame.SubFrame[item.FrameID].Frame; //绑定框架坐标
83556
+ if (drawPicture.ImportStorageData) drawPicture.ImportStorageData(item);
83557
+ drawPicture.ResetXValue();
82881
83558
  drawPicture.UpdateXValue();
82882
83559
  drawPicture.ValueToPoint();
83560
+ drawPicture.GetActiveDrawPicture=()=>{ return this.GetActiveDrawPicture(); }
82883
83561
 
82884
83562
  if (drawPicture.ClassName==='ChartDrawPictureText') drawPicture.IsInitialized=true;
82885
83563
 
@@ -134949,6 +135627,272 @@ function ScrollBarBGChart()
134949
135627
  }
134950
135628
 
134951
135629
 
135630
+ /*
135631
+ Copyright (c) 2018 jones
135632
+
135633
+ http://www.apache.org/licenses/LICENSE-2.0
135634
+
135635
+ 开源项目 https://github.com/jones2000/HQChart
135636
+
135637
+ jones_2000@163.com
135638
+
135639
+ 内置菜单 使用table模式
135640
+ */
135641
+
135642
+ function JSPopMenu()
135643
+ {
135644
+ this.Data={ Menu:[], Position:0 }; //{ Name:, SVG, ID, bChecked:, SubMenu:[] } Position 0=右键菜单 1=Tab弹菜单 2=下拉菜单
135645
+
135646
+ this.RootDOM=null;
135647
+ this.TBodyDOM=null;
135648
+ this.ArySubRootDOM=[];
135649
+
135650
+ this.ClickCallback=null; //点击回调
135651
+ this.CheckedClassName="UMyChart_MenuItem_Span_Checked iconfont icon-checked"; //选中图标
135652
+ this.RightArrowClassName="UMyChart_MenuItem_Span_Arrow iconfont icon-menu_arraw_right"; //右侧箭头
135653
+
135654
+ this.AryTDClassName=
135655
+ [
135656
+ "UMyChart_MenuItem_Td_Status", //图标
135657
+ "UMyChart_MenuItem_Td_Content", //文字
135658
+ "UMyChart_MenuItem_Td_Shortcut", //快捷方式
135659
+ "UMyChart_MenuItem_Td_Arrow" //箭头
135660
+ ];
135661
+
135662
+ this.Inital=function()
135663
+ {
135664
+ window.addEventListener('mousedown', (e)=>{ this.OnWindowMouseDown(e)});
135665
+ }
135666
+
135667
+ //创建菜单
135668
+ this.CreatePopMenu=function(data)
135669
+ {
135670
+ this.Clear();
135671
+
135672
+ var root=document.createElement("div");
135673
+ root.className="UMyChart_PopMenu";
135674
+
135675
+ var table=document.createElement("table");
135676
+ table.className="UMyChart_PopMenu_Table";
135677
+ root.appendChild(table);
135678
+
135679
+ var tbody=document.createElement("tbody");
135680
+ tbody.className="UMyChart_PopMenu_Tbody";
135681
+ table.appendChild(tbody);
135682
+
135683
+
135684
+ var rootData={ Root:root, TBody:tbody, Table:table };
135685
+ for(var i=0;i<data.Menu.length;++i)
135686
+ {
135687
+ var item=data.Menu[i];
135688
+ var trDom=this.CreateMenu(rootData, item);
135689
+ tbody.appendChild(trDom);
135690
+ }
135691
+
135692
+ document.body.appendChild(root);
135693
+ this.RootDOM=root;
135694
+ this.TBodyDOM=tbody;
135695
+
135696
+ if (IFrameSplitOperator.IsNumber(data.Position)) this.Data.Position=data.Position;
135697
+ if (data.ClickCallback) this.ClickCallback=data.ClickCallback;
135698
+
135699
+ }
135700
+
135701
+ //清除菜单
135702
+ this.Clear=function()
135703
+ {
135704
+ this.Data.Menu=[];
135705
+ this.Data.Position=JSPopMenu.POSITION_ID.RIGHT_MENU_ID;
135706
+ this.ClickCallback=null;
135707
+
135708
+ if (!this.RootDOM) return;
135709
+
135710
+ document.body.removeChild(this.RootDOM);
135711
+ this.RootDOM=null;
135712
+ this.TBodyDOM=null;
135713
+
135714
+ for(var i=0;i<this.ArySubRootDOM.length;++i)
135715
+ {
135716
+ document.body.removeChild(this.ArySubRootDOM[i]);
135717
+ }
135718
+ this.ArySubRootDOM=[]
135719
+ }
135720
+
135721
+ this.CreateMenu=function(parentItem, item)
135722
+ {
135723
+ var trDom=document.createElement("tr");
135724
+ trDom.className='UMyChart_MenuItem_Tr';
135725
+
135726
+ var prtTdDom=null;
135727
+ for(var i=0;i<this.AryTDClassName.length;++i)
135728
+ {
135729
+ var tdDom=document.createElement("td");
135730
+ tdDom.className=this.AryTDClassName[i];
135731
+
135732
+ if (i==0) //图标
135733
+ {
135734
+ if (item.Checked)
135735
+ {
135736
+ var spanDom=document.createElement("span");
135737
+ spanDom.className=this.CheckedClassName;
135738
+ tdDom.appendChild(spanDom);
135739
+ }
135740
+ }
135741
+ else if (i==1) //内容
135742
+ {
135743
+ tdDom.innerText=item.Name;
135744
+ }
135745
+ else if (i==2) //快捷方式
135746
+ {
135747
+
135748
+ }
135749
+ else if (i==3) //箭头
135750
+ {
135751
+ if (IFrameSplitOperator.IsNonEmptyArray(item.SubMenu))
135752
+ {
135753
+ var spanDom=document.createElement("span");
135754
+ spanDom.className=this.RightArrowClassName;
135755
+ tdDom.appendChild(spanDom);
135756
+ }
135757
+ }
135758
+
135759
+ trDom.appendChild(tdDom);
135760
+ }
135761
+
135762
+ if (IFrameSplitOperator.IsNonEmptyArray(item.SubMenu)) //子菜单
135763
+ {
135764
+ var subRoot=document.createElement("div");
135765
+ subRoot.className="UMyChart_PopSubMenu";
135766
+
135767
+ var subTable=document.createElement("table");
135768
+ subTable.className="UMyChart_PopMenu_Table";
135769
+ subRoot.appendChild(subTable);
135770
+
135771
+ var subTbody=document.createElement("tbody");
135772
+ subTbody.className="UMyChart_PopMenu_TBody";
135773
+ subTable.appendChild(subTbody);
135774
+
135775
+ var subRootData={ Root:subRoot, TBody:subTbody, Table:subTable };
135776
+ var preTrDom=null;
135777
+ for(var i=0;i<item.SubMenu.length;++i)
135778
+ {
135779
+ var subItem=item.SubMenu[i];
135780
+ if (subItem.Name==JSPopMenu.SEPARATOR_LINE_NAME)
135781
+ {
135782
+ if (preTrDom) preTrDom.classList.add("border");
135783
+ continue;
135784
+ }
135785
+
135786
+ var subTrDom=this.CreateMenu(subRootData, subItem);
135787
+ preTrDom=subTrDom;
135788
+ subTbody.appendChild(subTrDom);
135789
+ }
135790
+
135791
+ trDom.onmouseover=(e)=>{ this.OnMouseOver(e, parentItem, trDom, subRoot); }
135792
+ document.body.appendChild(subRoot);
135793
+ this.ArySubRootDOM.push(subRoot);
135794
+ }
135795
+ else
135796
+ {
135797
+ trDom.onmousedown=(e)=> { this.OnClickMenu(e, item, false); }; //菜单点击
135798
+ trDom.onmouseover=(e)=>{ this.OnMouseOver(e, parentItem); }
135799
+ }
135800
+
135801
+ return trDom;
135802
+ }
135803
+
135804
+ //弹tab菜单
135805
+ this.PopupMenuByTab=function(rtTab)
135806
+ {
135807
+ if (!this.RootDOM) return;
135808
+ if (!rtTab) return;
135809
+
135810
+ var xLeft=rtTab.Left;
135811
+ var yTop=rtTab.Top-this.RootDOM.offsetHeight;
135812
+
135813
+ this.RootDOM.style.visibility='visible';
135814
+ this.RootDOM.style.top = yTop + "px";
135815
+ this.RootDOM.style.left = xLeft + "px";
135816
+ }
135817
+
135818
+ //弹右键菜单
135819
+ this.PopupMenuByRight=function(x,y)
135820
+ {
135821
+ if (!this.RootDOM) return;
135822
+ if (!IFrameSplitOperator.IsNumber(x) || !IFrameSplitOperator.IsNumber(y)) return;
135823
+
135824
+ this.RootDOM.style.visibility='visible';
135825
+ this.RootDOM.style.top = y + "px";
135826
+ this.RootDOM.style.left = x + "px";
135827
+ }
135828
+
135829
+ this.OnClickMenu=function(e, item, bSubMenu)
135830
+ {
135831
+ console.log("[JSPopMenu::OnClickMenu] e=, item=, bSubMenu", e, item, bSubMenu);
135832
+ if (!this.ClickCallback) return;
135833
+
135834
+ this.ClickCallback(item);
135835
+ }
135836
+
135837
+ this.OnMouseOver=function(e, parentItem, trDom, subMenu)
135838
+ {
135839
+ if (parentItem && parentItem.PopMenu && parentItem.PopMenu!=subMenu)
135840
+ {
135841
+ parentItem.PopMenu.style.visibility="hidden";
135842
+ parentItem.PopMenu=null;
135843
+ parentItem.PopRow=null;
135844
+ }
135845
+
135846
+ if (subMenu)
135847
+ {
135848
+ if (subMenu.style.visibility=="visible")
135849
+ {
135850
+
135851
+ }
135852
+ else
135853
+ {
135854
+ var rtParent=trDom.getBoundingClientRect();
135855
+ subMenu.style.left=`${rtParent.right}px`;
135856
+ subMenu.style.top=`${rtParent.top}px`;
135857
+
135858
+ /*
135859
+ if (this.Data.Position==JSPopMenu.POSITION_ID.TAB_MENU_ID)
135860
+ {
135861
+ var yButton=parentItem.Root.getBoundingClientRect().bottom;
135862
+ var ySubButton=subMenu.getBoundingClientRect().bottom;
135863
+ if (yButton<ySubButton)
135864
+ {
135865
+ var yOffset=yButton-ySubButton;
135866
+ subMenu.style.top=`${yOffset}px`;
135867
+ }
135868
+ }
135869
+ */
135870
+
135871
+ subMenu.style.visibility="visible";
135872
+ }
135873
+
135874
+ parentItem.PopMenu=subMenu;
135875
+ parentItem.PopRow=trDom;
135876
+ }
135877
+ }
135878
+
135879
+
135880
+
135881
+ this.OnWindowMouseDown=function(e)
135882
+ {
135883
+ if (!this.RootDOM) return;
135884
+
135885
+ console.log("[JSPopMenu::OnWindowMouseDown] e=", e);
135886
+
135887
+ this.Clear();
135888
+ }
135889
+ }
135890
+
135891
+
135892
+ JSPopMenu.POSITION_ID={ };
135893
+ JSPopMenu.POSITION_ID.RIGHT_MENU_ID=0;
135894
+ JSPopMenu.POSITION_ID.TAB_MENU_ID=1;
135895
+ JSPopMenu.SEPARATOR_LINE_NAME="MENU_SEPARATOR"; //分割线
134952
135896
  ///////////////////////////////////////////////////////////////////////////////////
134953
135897
  // 工作线程计算指标示例
134954
135898
  //
@@ -135070,7 +136014,7 @@ function HQChartScriptWorker()
135070
136014
 
135071
136015
 
135072
136016
 
135073
- var HQCHART_VERSION="1.1.13170";
136017
+ var HQCHART_VERSION="1.1.13181";
135074
136018
 
135075
136019
  function PrintHQChartVersion()
135076
136020
  {
@@ -135207,5 +136151,7 @@ export default {
135207
136151
 
135208
136152
 
135209
136153
  HQChartScriptWorker:HQChartScriptWorker, //计算工作线程
136154
+
136155
+ JSPopMenu:JSPopMenu, //弹出菜单
135210
136156
 
135211
136157
  }