hqchart 1.1.14564 → 1.1.14591

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.
@@ -289,6 +289,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
289
289
  if (IFrameSplitOperator.IsBool(option.EnableZoomIndexWindow)) chart.EnableZoomIndexWindow=option.EnableZoomIndexWindow;
290
290
  if (IFrameSplitOperator.IsBool(option.IsDrawPictureXY)) chart.IsDrawPictureXY=option.IsDrawPictureXY;
291
291
  if (IFrameSplitOperator.IsNumber(option.CtrlMoveStep)) chart.CtrlMoveStep=option.CtrlMoveStep;
292
+ if (IFrameSplitOperator.IsNumber(option.ShiftMoveStep)) chart.ShiftMoveStep=option.ShiftMoveStep;
292
293
  if (IFrameSplitOperator.IsBool(option.EnableIndexChartDrag)) chart.EnableIndexChartDrag=option.EnableIndexChartDrag;
293
294
  if (IFrameSplitOperator.IsBool(option.EnableVerifyRecvData)) chart.EnableVerifyRecvData=option.EnableVerifyRecvData;
294
295
 
@@ -440,6 +441,12 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
440
441
  if (IFrameSplitOperator.IsNumber(item.ZIndex)) zindex=item.ZIndex;
441
442
  if (item.Enable) this.CreateExtraCanvasElement(JSChart.RectDragCanvasKey, { ZIndex:zindex }); //创建独立的区间选择画布
442
443
  }
444
+
445
+ if (option.DragKLine)
446
+ {
447
+ var item=option.DragKLine;
448
+ if (IFrameSplitOperator.IsBool(item.EnableShfit)) chart.KLineDragConfig.EnableShfit=item.EnableShfit;
449
+ }
443
450
  }
444
451
 
445
452
  //创建子窗口
@@ -491,6 +498,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
491
498
  if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
492
499
  if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
493
500
  if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
501
+ if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
494
502
 
495
503
  if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
496
504
 
@@ -996,6 +1004,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
996
1004
  if (IFrameSplitOperator.IsNumber(item.HPenType)) chart.ChartCorssCursor.HPenType=item.HPenType;
997
1005
  if (IFrameSplitOperator.IsNumber(item.VPenType)) chart.ChartCorssCursor.VPenType=item.VPenType;
998
1006
  if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
1007
+ if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
999
1008
  if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
1000
1009
  if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
1001
1010
  }
@@ -2499,9 +2508,6 @@ JSChart.GetfloatPrecision=function(symbol)
2499
2508
  return GetfloatPrecision(symbol);
2500
2509
  }
2501
2510
 
2502
-
2503
-
2504
-
2505
2511
  var JSCHART_EVENT_ID=
2506
2512
  {
2507
2513
  //RECV_KLINE_MATCH:1, //接收到形态匹配
@@ -2897,10 +2903,14 @@ var JSCHART_MENU_ID=
2897
2903
  CMD_CORSS_ON_VAILD_TIME_ID:50, //超出当前时间的,X轴调整到当前最后的时间(分时图)
2898
2904
  CMD_CORSS_ON_KLINE_ID:51, //十字光标只能画在K线上
2899
2905
  CMD_CORSS_POINT_ID:52, //十字光标圆点
2906
+
2900
2907
 
2901
2908
  CMD_RBUTTON_SELECT_RECT_ID:53, //右键区间选择
2902
2909
  CMD_LBUTTON_SELECT_RECT_ID:54, //左键区间选择
2903
- CMD_ENABLE_XDRAG_BOTTOM_ID:55, //X轴拖动缩放
2910
+ CMD_ENABLE_XDRAG_BOTTOM_ID:55, //X轴拖动缩放
2911
+
2912
+ CMD_FULLSCREEN_SUMMARY_ID:56, //当前屏区间统计
2913
+ CMD_CORSS_DBCLICK_ID:57, //双击显示隐藏十字光标
2904
2914
 
2905
2915
 
2906
2916
 
@@ -3055,6 +3065,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3055
3065
  this.ZoomStepPixel=5; //放大缩小手势需要的最小像素
3056
3066
  this.TouchMoveMinAngle=70; //左右移动最小角度
3057
3067
  this.EnableAnimation=false; //是否开启动画
3068
+ this.ShiftUpDownStepPixel=1*GetDevicePixelRatio(); //Shift+(up/down) 移动十字光标
3058
3069
 
3059
3070
  //tooltip提示信息
3060
3071
  this.Tooltip=document.createElement("div");
@@ -3155,7 +3166,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3155
3166
 
3156
3167
  this.RestoreFocusTimer=null; //恢复焦点定时器
3157
3168
  this.PreventRightMenu={ Timer:null, Enable:false, Delay:2000 }; //阻止右键菜单
3158
-
3169
+
3170
+ //SecondKeyID 1=shiftKey 2=ctrlKey 3=altKey
3171
+ this.AryHotKey=[]; //热键 { KeyID:87, SecondKeyID:1, CMD:JSCHART_MENU_ID.CMD_FULLSCREEN_SUMMARY_ID, Args:null, Description:"Alt+W 全屏区间统计" },
3172
+
3159
3173
  this.RestoreFocus=function(delay)
3160
3174
  {
3161
3175
  var value=1000;
@@ -4190,6 +4204,17 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4190
4204
  document.oncontextmenu=(e)=> { this.DocContextMenu(e); }
4191
4205
  }
4192
4206
 
4207
+
4208
+ this.IsShfitDragKLine=function(e)
4209
+ {
4210
+ if (this.DragMode!=1) return false;
4211
+ if (!this.KLineDragConfig) return false;
4212
+ if (!this.KLineDragConfig.EnableShfit) return false;
4213
+ if (!e.shiftKey) return false;
4214
+
4215
+ return true;
4216
+ }
4217
+
4193
4218
  this.DocOnMouseMove=function(e)
4194
4219
  {
4195
4220
  //加载数据中,禁用鼠标事件
@@ -4205,6 +4230,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4205
4230
  var moveSetpY=Math.abs(drag.LastMove.Y-e.clientY);
4206
4231
  var isDragSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Index>=0);
4207
4232
  var isDragSubSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Type==4);
4233
+ var bShfitDragKLine=this.IsShfitDragKLine(e); //shift+鼠标移动K线
4208
4234
  if (drag.CurrentMove)
4209
4235
  {
4210
4236
  drag.CurrentMove.X=e.clientX;
@@ -4312,7 +4338,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4312
4338
  {
4313
4339
  this.OnDragXCoordinateZoom(drag, {X:moveSetp, Y:moveSetpY}, e);
4314
4340
  }
4315
- else if ((bLButtonSelectRect || bRButtonSelectRect) && !isDragSelectRect && !isDragSubSelectRect) //左右键区间选择
4341
+ else if ((bLButtonSelectRect || bRButtonSelectRect) && !isDragSelectRect && !isDragSubSelectRect && !bShfitDragKLine) //左右键区间选择
4316
4342
  {
4317
4343
  var yMoveSetp=Math.abs(drag.LastMove.Y-e.clientY);
4318
4344
 
@@ -4424,6 +4450,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4424
4450
  var isLeft=true;
4425
4451
  if (drag.LastMove.X<e.clientX) isLeft=false;//右移数据
4426
4452
 
4453
+ //按住shift才能移动K线
4454
+ if (this.KLineDragConfig && this.KLineDragConfig.EnableShfit && !e.shiftKey) return;
4455
+
4427
4456
  var cursorStatus="pointer";
4428
4457
  var oneStepWidth=this.GetMoveOneStepWidth();
4429
4458
  if (moveSetp<oneStepWidth)
@@ -4521,6 +4550,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4521
4550
  var isDragSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Index>=0);
4522
4551
  var isDragSubSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Type==4);
4523
4552
  var bClearDrawPicture=true;
4553
+ var bShfitDragKLine=this.IsShfitDragKLine(e);
4524
4554
  if (this.CurrentChartDrawPicture)
4525
4555
  {
4526
4556
  var drawPicture=this.CurrentChartDrawPicture;
@@ -4563,7 +4593,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4563
4593
  {
4564
4594
  if (this.OnMinuteSelectRectMouseUp) this.OnMinuteSelectRectMouseUp(e); //分时图区间选择
4565
4595
  }
4566
- else if (bLButtonSelectRect || bRButtonSelectRect) //K线图区间选择
4596
+ else if ((bLButtonSelectRect || bRButtonSelectRect) && !bShfitDragKLine) //K线图区间选择
4567
4597
  {
4568
4598
  var drag=this.MouseDrag;
4569
4599
  drag.LastMove.X=e.clientX;
@@ -5852,6 +5882,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5852
5882
  item.Draw();
5853
5883
  }
5854
5884
 
5885
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_5);
5886
+
5855
5887
  if (this.Frame.DrawOveraly)
5856
5888
  this.Frame.DrawOveraly(true); //画叠加指标
5857
5889
 
@@ -5875,9 +5907,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5875
5907
  item.Draw();
5876
5908
  }
5877
5909
 
5910
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_8);
5911
+
5878
5912
  if (this.Frame.DrawOveraly)
5879
5913
  this.Frame.DrawOveraly(false); //画叠加指标
5880
5914
 
5915
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_10);
5916
+
5917
+ /*
5881
5918
  //固定扩展图形
5882
5919
  for(var i=0;i<this.ExtendChartPaint.length;++i)
5883
5920
  {
@@ -5886,6 +5923,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5886
5923
  if (item.DrawAfterPicture) continue;
5887
5924
  if (!item.IsDynamic && item.IsAnimation==false) item.Draw();
5888
5925
  }
5926
+ */
5889
5927
 
5890
5928
  if (this.Frame.DrawInsideHorizontal) this.Frame.DrawInsideHorizontal();
5891
5929
  this.KLineIncreaseCustomHorizontal();
@@ -5914,6 +5952,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5914
5952
 
5915
5953
  var moveonPoint=null;
5916
5954
  if (this.LastMouseStatus && this.LastMouseStatus.MoveOnPoint) moveonPoint=this.LastMouseStatus.MoveOnPoint;
5955
+
5956
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20, { MoveonPoint:moveonPoint} );
5957
+
5958
+ /*
5917
5959
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
5918
5960
  {
5919
5961
  var item=this.ExtendChartPaint[i];
@@ -5925,6 +5967,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5925
5967
  if (item.DrawToolbar) item.DrawToolbar(moveonPoint);
5926
5968
  }
5927
5969
  }
5970
+ */
5928
5971
 
5929
5972
  for(var i=0;i<this.ChartDrawPicture.length;++i)
5930
5973
  {
@@ -6014,6 +6057,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6014
6057
  item.Draw(moveonPoint, this.LastMouseStatus);
6015
6058
  }
6016
6059
 
6060
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25);
6061
+ /*
6017
6062
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
6018
6063
  {
6019
6064
  var item=this.ExtendChartPaint[i];
@@ -6021,7 +6066,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6021
6066
  if (item.DrawAfterPicture) continue;
6022
6067
  if (item.IsDynamic && item.DrawAfterTitle===true && item.IsAnimation==false) item.Draw();
6023
6068
  }
6069
+ */
6070
+
6071
+ if (this.EnableAnimation) this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_30);
6024
6072
 
6073
+ /*
6025
6074
  if (this.EnableAnimation)
6026
6075
  {
6027
6076
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动画
@@ -6030,6 +6079,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6030
6079
  if (item.IsAnimation===true) item.Draw();
6031
6080
  }
6032
6081
  }
6082
+ */
6033
6083
 
6034
6084
  for(var i=0;i<this.ChartDrawPicture.length;++i)
6035
6085
  {
@@ -6048,12 +6098,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6048
6098
  this.CurrentChartDrawPicture.Draw();
6049
6099
  }
6050
6100
 
6101
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50);
6102
+ /*
6051
6103
  for(var i=0;i<this.ExtendChartPaint.length;++i) //画图工具绘制完成以后 动态扩展图形
6052
6104
  {
6053
6105
  var item=this.ExtendChartPaint[i];
6054
6106
  if (item.DrawAfterPicture)
6055
6107
  item.Draw();
6056
6108
  }
6109
+ */
6057
6110
 
6058
6111
  this.OffscreenToShowCanvas();
6059
6112
 
@@ -6082,6 +6135,45 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6082
6135
  ++this.TouchDrawCount;
6083
6136
  }
6084
6137
 
6138
+ this.DrawExtendChartPaint=function(level, option)
6139
+ {
6140
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.ExtendChartPaint)) return;
6141
+
6142
+ //扩展图形
6143
+ for(var i=0;i<this.ExtendChartPaint.length;++i)
6144
+ {
6145
+ var item=this.ExtendChartPaint[i];
6146
+ if (item.IsCallbackDraw) continue;
6147
+
6148
+ var value=item.GetPriority(); //绘图优先级
6149
+ if (value!=level) continue;
6150
+
6151
+ if (level==IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20)
6152
+ {
6153
+ item.Draw();
6154
+ if (item.DrawToolbar && option) item.DrawToolbar(option.MoveonPoint, option.LastMouseStatus);
6155
+ }
6156
+ else if (level==IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25 && option)
6157
+ {
6158
+ if (item.ClassName=='KLineTooltipPaint' && option)
6159
+ {
6160
+ if (option.Tooltip==false) continue;
6161
+ if (option.Point) item.LatestPoint=option.Point;
6162
+ }
6163
+ else if (item.ClassName=="MinuteTooltipPaint" && option)
6164
+ {
6165
+ if (option.Point) item.LatestPoint=option.Point;
6166
+ }
6167
+
6168
+ item.Draw(option.MoveonPoint, option.LastMouseStatus);
6169
+ }
6170
+ else
6171
+ {
6172
+ item.Draw();
6173
+ }
6174
+ }
6175
+ }
6176
+
6085
6177
  this.PtInButton=function(x, y)
6086
6178
  {
6087
6179
  var button=this.Frame.PtInButtons(x,y);
@@ -6394,6 +6486,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6394
6486
 
6395
6487
  var moveonPoint=null;
6396
6488
  if (this.LastMouseStatus && this.LastMouseStatus.MoveOnPoint) moveonPoint=this.LastMouseStatus.MoveOnPoint;
6489
+
6490
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20, { MoveonPoint:moveonPoint, LastMouseStatus:this.LastMouseStatus } );
6491
+
6492
+ /*
6397
6493
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
6398
6494
  {
6399
6495
  var item=this.ExtendChartPaint[i];
@@ -6405,6 +6501,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6405
6501
  if (item.DrawToolbar) item.DrawToolbar(moveonPoint, this.LastMouseStatus);
6406
6502
  }
6407
6503
  }
6504
+ */
6408
6505
 
6409
6506
  for(var i=0;i<this.ChartDrawPicture.length;++i)
6410
6507
  {
@@ -6503,6 +6600,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6503
6600
  item.Draw(moveonPoint, this.LastMouseStatus);
6504
6601
  }
6505
6602
 
6603
+
6604
+ var exChartOption={ MoveonPoint:moveonPoint, LastMouseStatus:this.LastMouseStatus };
6605
+ if (option)
6606
+ {
6607
+ exChartOption.Tooltip=option.Tooltip;
6608
+ exChartOption.Point=option.Point;
6609
+ }
6610
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25,exChartOption);
6611
+ /*
6506
6612
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形 在动态标题以后画
6507
6613
  {
6508
6614
  var item=this.ExtendChartPaint[i];
@@ -6520,7 +6626,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6520
6626
 
6521
6627
  if (item.IsDynamic && item.DrawAfterTitle===true) item.Draw(moveonPoint, this.LastMouseStatus);
6522
6628
  }
6629
+ */
6523
6630
 
6631
+ if (this.EnableAnimation) this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_30);
6632
+ /*
6524
6633
  if (this.EnableAnimation)
6525
6634
  {
6526
6635
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动画
@@ -6529,6 +6638,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6529
6638
  if (item.IsAnimation===true) item.Draw();
6530
6639
  }
6531
6640
  }
6641
+ */
6532
6642
 
6533
6643
  for(var i=0;i<this.ChartDrawPicture.length;++i)
6534
6644
  {
@@ -6550,12 +6660,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6550
6660
  this.CurrentChartDrawPicture.Draw();
6551
6661
  }
6552
6662
 
6663
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50);
6664
+ /*
6553
6665
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
6554
6666
  {
6555
6667
  var item=this.ExtendChartPaint[i];
6556
6668
  if (item.DrawAfterPicture)
6557
6669
  item.Draw();
6558
6670
  }
6671
+ */
6559
6672
 
6560
6673
  if (this.LastMouseStatus.MouseOnToolbar) //工具栏按钮提示信息
6561
6674
  {
@@ -6982,6 +7095,40 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6982
7095
  this.UIElement.style.cursor=obj.Cursor;
6983
7096
  }
6984
7097
 
7098
+ this.OnHotKeyDown=function(keyID, e) //热键触发
7099
+ {
7100
+ var item=this.FindHotKey(keyID,e);
7101
+ if (!item) return false;
7102
+
7103
+ this.ExecuteMenuCommand(item.CMD, item.Args);
7104
+ return true;
7105
+ }
7106
+
7107
+ this.FindHotKey=function(keyID, e)
7108
+ {
7109
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryHotKey)) return null;
7110
+
7111
+ for(var i=0;i<this.AryHotKey.length;++i)
7112
+ {
7113
+ var item=this.AryHotKey[i];
7114
+ if (keyID==item.KeyID)
7115
+ {
7116
+ //SecondKeyID 1=shiftKey 2=ctrlKey 3=altKey
7117
+ if ((item.SecondKeyID==1 && e.shiftKey) || (item.SecondKeyID==2 && e.ctrlKey) || (item.SecondKeyID==3 && e.altKey))
7118
+ return item;
7119
+ }
7120
+ }
7121
+
7122
+ return null;
7123
+ }
7124
+
7125
+ this.IsHotKey=function(keyID, e)
7126
+ {
7127
+ var item=this.FindHotKey(keyID,e);
7128
+ if (!item) return false;
7129
+ return true;
7130
+ }
7131
+
6985
7132
  this.OnKeyDown=function(e)
6986
7133
  {
6987
7134
  if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash == true) return;
@@ -6998,22 +7145,35 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6998
7145
  }
6999
7146
 
7000
7147
  var draw=false;
7001
- if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
7148
+ if (keyID==27 && this.PopMinuteChart && this.PopMinuteChart.IsShow())
7149
+ {
7150
+ this.PopMinuteChart.Close();
7151
+ draw=true;
7152
+ }
7153
+ else if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
7002
7154
  {
7003
7155
  var sendData={ e:e, KeyID:keyID, Draw:false, PreventDefault:false };
7004
7156
  this.ChartCorssCursor.OnKeyDown(sendData);
7005
7157
  draw=sendData.Draw;
7006
7158
  }
7007
7159
 
7160
+ if (this.OnHotKeyDown(keyID, e))
7161
+ {
7162
+ //不让滚动条滚动
7163
+ if(e.preventDefault) e.preventDefault();
7164
+ else e.returnValue = false;
7165
+ return;
7166
+ }
7167
+
7008
7168
  switch(keyID)
7009
7169
  {
7010
7170
  case 37: //left
7011
- if (e.ctrlKey && this.OnCustomKeyDown)
7171
+ if ((e.ctrlKey||e.shiftKey) && this.OnCustomKeyDown)
7012
7172
  {
7013
7173
  if (this.OnCustomKeyDown(keyID, e))
7014
7174
  break;
7015
7175
  }
7016
-
7176
+
7017
7177
  if (this.CursorIndex<=0.99999)
7018
7178
  {
7019
7179
  if (!this.DataMoveLeft())
@@ -7038,7 +7198,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7038
7198
  }
7039
7199
  break;
7040
7200
  case 39: //right
7041
- if (e.ctrlKey && this.OnCustomKeyDown)
7201
+ if ((e.ctrlKey|| e.shiftKey) && this.OnCustomKeyDown)
7042
7202
  {
7043
7203
  if (this.OnCustomKeyDown(keyID, e))
7044
7204
  break;
@@ -7074,8 +7234,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7074
7234
  }
7075
7235
  break;
7076
7236
  case 38: //up
7237
+ if ((e.ctrlKey||e.shiftKey) && this.OnCustomKeyDown)
7238
+ {
7239
+ if (this.OnCustomKeyDown(keyID, e))
7240
+ break;
7241
+ }
7077
7242
  if (this.EnableZoomUpDown && this.EnableZoomUpDown.Keyboard===false) break;
7078
7243
  var cursorIndex={ ZoomType:this.ZoomType, IsLockRight:this.IsZoomLockRight };
7244
+ if (e.ctrlKey) cursorIndex.ZoomType=1; //ctrl 十字中心缩放
7079
7245
  cursorIndex.Index=parseInt(Math.abs(this.CursorIndex-0.5).toFixed(0));
7080
7246
  if (!this.Frame.ZoomUp(cursorIndex)) break;
7081
7247
  this.CursorIndex=cursorIndex.Index;
@@ -7088,8 +7254,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7088
7254
  this.OnKLinePageChange("keydown");
7089
7255
  break;
7090
7256
  case 40: //down
7257
+ if ((e.ctrlKey||e.shiftKey) && this.OnCustomKeyDown)
7258
+ {
7259
+ if (this.OnCustomKeyDown(keyID, e))
7260
+ break;
7261
+ }
7091
7262
  if (this.EnableZoomUpDown && this.EnableZoomUpDown.Keyboard===false) break;
7092
7263
  var cursorIndex={ ZoomType:this.ZoomType ,IsLockRight:this.IsZoomLockRight };
7264
+ if (e.ctrlKey) cursorIndex.ZoomType=1; //ctrl 十字中心缩放
7093
7265
  cursorIndex.Index=parseInt(Math.abs(this.CursorIndex-0.5).toFixed(0));
7094
7266
  if (!this.Frame.ZoomDown(cursorIndex, { ZoomDownloadDataCallback:(requestData)=>{ this.ZoomDownloadData(requestData) } })) break;
7095
7267
 
@@ -7142,6 +7314,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7142
7314
  this.CurrentChartDrawPicture=null;
7143
7315
  }
7144
7316
  break;
7317
+ case 13: //回车
7318
+ if (this.OnCustomKeyDown) this.OnCustomKeyDown(keyID, e);
7319
+ break;
7145
7320
  default:
7146
7321
  return;
7147
7322
  }
@@ -7155,7 +7330,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7155
7330
 
7156
7331
  this.OnDoubleClick=function(x,y,e)
7157
7332
  {
7158
- //JSConsole.Chart.Log(e);
7333
+
7159
7334
  }
7160
7335
 
7161
7336
  this.ZoomIndexWindow=function(frameID, option) //最大化/最小化指标窗口
@@ -9100,6 +9275,43 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9100
9275
  return width;
9101
9276
  }
9102
9277
 
9278
+ this.GetChartPaintByClassName=function(name)
9279
+ {
9280
+ var aryData=[];
9281
+ for(var i=0;i<this.ChartPaint.length;++i)
9282
+ {
9283
+ var item=this.ChartPaint[i];
9284
+ if (item.ClassName==name)
9285
+ {
9286
+ var frameID=null;
9287
+ if (item.ChartFrame) frameID=item.ChartFrame.Identify;
9288
+ aryData.push({ IsOverlay:false, Chart:item, FrameID:frameID });
9289
+ }
9290
+ }
9291
+
9292
+ for(var i=0;i<this.Frame.SubFrame.length;++i)
9293
+ {
9294
+ var subItem=this.Frame.SubFrame[i];
9295
+ if (!subItem) continue;
9296
+ if (!IFrameSplitOperator.IsNonEmptyArray(subItem.OverlayIndex)) continue;
9297
+
9298
+ for(var j=0;j<subItem.OverlayIndex.length;++j)
9299
+ {
9300
+ var item=subItem.OverlayIndex[j];
9301
+ for(var k=0;k<item.ChartPaint.length;++k)
9302
+ {
9303
+ var chartItem=item.ChartPaint[k];
9304
+ if (chartItem.ClassName==name)
9305
+ {
9306
+ aryData.push({ IsOverlay:true, Chart:chartItem, FrameID:subItem.Frame.Identify, SubFrameID:j });
9307
+ }
9308
+ }
9309
+ }
9310
+ }
9311
+
9312
+ return aryData;
9313
+ }
9314
+
9103
9315
  //删除扩展画法
9104
9316
  this.DeleteExtendChart=function(data)
9105
9317
  {
@@ -10474,6 +10686,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10474
10686
  case JSCHART_MENU_ID.CMD_CORSS_POINT_ID:
10475
10687
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.CorssPointConfig.Enable=srcParam;
10476
10688
  break;
10689
+ case JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID:
10690
+ if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.EnableDBClick=srcParam;
10691
+ break;
10477
10692
  case JSCHART_MENU_ID.CMD_RBUTTON_SELECT_RECT_ID:
10478
10693
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartDragSelectRect) this.ChartDragSelectRect.EnableRButton=srcParam;
10479
10694
  break;
@@ -10483,6 +10698,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10483
10698
  case JSCHART_MENU_ID.CMD_ENABLE_XDRAG_BOTTOM_ID:
10484
10699
  if (IFrameSplitOperator.IsBool(srcParam)) this.EnableXDrag.Bottom=srcParam;
10485
10700
  break;
10701
+ case JSCHART_MENU_ID.CMD_FULLSCREEN_SUMMARY_ID:
10702
+ this.FullScreenSummary();
10703
+ break;
10486
10704
  }
10487
10705
  }
10488
10706
 
@@ -11039,6 +11257,63 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11039
11257
  this.Draw();
11040
11258
  }
11041
11259
  }
11260
+
11261
+ this.MoveCorssCursorUp=function(step)
11262
+ {
11263
+ if (!IFrameSplitOperator.IsNumber(this.LastPoint.Y)) return;
11264
+ var border=this.Frame.ChartBorder.GetBorder();
11265
+ var top=border.TopEx;
11266
+ if (this.LastPoint.Y-step<=top) return;
11267
+
11268
+ this.LastPoint.Y-=step;
11269
+ this.DrawDynamicInfo();
11270
+ }
11271
+
11272
+ this.MoveCorssCursorDown=function(step)
11273
+ {
11274
+ if (!IFrameSplitOperator.IsNumber(this.LastPoint.Y)) return;
11275
+ var border=this.Frame.ChartBorder.GetBorder();
11276
+ var border=this.Frame.ChartBorder.GetBorder();
11277
+ var bottom=border.BottomEx;
11278
+ if (this.LastPoint.Y+step>=bottom) return;
11279
+
11280
+ this.LastPoint.Y+=step;
11281
+ this.DrawDynamicInfo();
11282
+ }
11283
+
11284
+ //整屏区间统计
11285
+ this.FullScreenSummary=function()
11286
+ {
11287
+ var kData=this.GetKData();
11288
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
11289
+
11290
+ var paint=this.GetRectSelectPaint();
11291
+ if (!paint) return false;
11292
+
11293
+ var xPointcount=0;
11294
+ if (this.Frame.XPointCount) xPointcount=this.Frame.XPointCount;
11295
+ else xPointcount=this.Frame.SubFrame[0].Frame.XPointCount;
11296
+ if (!IFrameSplitOperator.IsPlusNumber(xPointcount)) return false;
11297
+
11298
+ var startIndex=kData.DataOffset;
11299
+ var endIndex=startIndex+xPointcount;
11300
+ this.UpdateSelectRect(startIndex, endIndex);
11301
+
11302
+ var selectData=paint.GetSelectRectData();
11303
+ var border=this.Frame.SubFrame[0].Frame.GetBorder();
11304
+
11305
+ var data=
11306
+ {
11307
+ X:border.ChartWidth/2, Y:border.ChartHeight/2,
11308
+ SelectData:selectData, //区间选择的数据
11309
+ RectSelectPaint:paint //区间选择背景
11310
+ }
11311
+
11312
+ var e={ data:data };
11313
+ if (this.DialogSelectRect) this.DrawSelectRectDialog(e);
11314
+
11315
+ return true;
11316
+ }
11042
11317
  }
11043
11318
 
11044
11319
  function GetDevicePixelRatio()
@@ -42686,7 +42961,7 @@ function ChartMultiSVGIconV2()
42686
42961
  if (IFrameSplitOperator.IsString(item.Value)) value=this.GetKValue(kItem,item.Value);
42687
42962
  if (!IFrameSplitOperator.IsNumber(value)) continue;
42688
42963
 
42689
- var y=this.ChartFrame.GetYFromData(item.Value,false);
42964
+ var y=this.ChartFrame.GetYFromData(value,false);
42690
42965
 
42691
42966
  if (item.Image)
42692
42967
  {
@@ -45096,12 +45371,34 @@ function IExtendChartPainting()
45096
45371
  this.IsCallbackDraw=false; //在回调函数里绘制, 不在Draw()中绘制
45097
45372
  this.ID=Guid();
45098
45373
 
45374
+ this.DrawPriority=null; //绘图优先级
45375
+
45099
45376
  //上下左右间距
45100
45377
  this.Left=5;
45101
45378
  this.Right=5;
45102
45379
  this.Top=5;
45103
45380
  this.Bottom=5;
45104
45381
 
45382
+
45383
+ this.GetPriority=function()
45384
+ {
45385
+ if (IFrameSplitOperator.IsNumber(this.DrawPriority)) return this.DrawPriority; //新版本
45386
+
45387
+ //老版本转换
45388
+
45389
+ if (!this.IsDynamic && !this.DrawAfterPicture) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_10;
45390
+
45391
+ if (this.DrawAfterTitle===false && this.IsAnimation==false) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20;
45392
+
45393
+ if (this.DrawAfterTitle===true) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
45394
+
45395
+ if (this.IsAnimation===true) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_35;
45396
+
45397
+ if (this.DrawAfterPicture===true) IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50;
45398
+
45399
+ return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50
45400
+ }
45401
+
45105
45402
  this.Draw=function()
45106
45403
  {
45107
45404
 
@@ -45138,6 +45435,23 @@ function IExtendChartPainting()
45138
45435
  }
45139
45436
  }
45140
45437
 
45438
+ //绘图优先级
45439
+ IExtendChartPainting.DRAW_PRIORITY_ID=
45440
+ {
45441
+ LEVEL_1:1,
45442
+ LEVEL_5:5, // 叠加指数图形前面 指标图形 IsDrawFirst=true
45443
+ LEVEL_8:8, // 叠加指数图形前面 指标图形 IsDrawFirst=false
45444
+ LEVEL_10:10, // IsDynamic=false
45445
+
45446
+ LEVEL_20:20, // IsDynamic=true
45447
+
45448
+ LEVEL_25:25, // DrawAfterTitle=true 标题栏绘制完成以后
45449
+
45450
+ LEVEL_35:35, // IsAnimation=true
45451
+
45452
+ LEVEL_50:50, // DrawAfterPicture=true; 是否在画图工具以后绘制
45453
+ }
45454
+
45141
45455
  //K线Tooltip, 显示在左边或右边
45142
45456
  function KLineTooltipPaint()
45143
45457
  {
@@ -45157,6 +45471,7 @@ function KLineTooltipPaint()
45157
45471
  this.AmountColor=g_JSChartResource.TooltipPaint.AmountColor; //成交金额
45158
45472
  this.LatestPoint; //手势位置
45159
45473
  this.ShowPosition=0; //显示位置 0=左 1=右
45474
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
45160
45475
 
45161
45476
  this.Left=1*GetDevicePixelRatio();
45162
45477
  this.Top=5*GetDevicePixelRatio();
@@ -45900,6 +46215,7 @@ function MinuteLeftTooltipPaint()
45900
46215
  this.IsDynamic=true;
45901
46216
  this.IsEraseBG=true;
45902
46217
  this.DrawAfterTitle=true;
46218
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
45903
46219
  this.ClassName='MinuteLeftTooltipPaint';
45904
46220
  this.BorderColor=g_JSChartResource.PCTooltipPaint.BorderColor; //边框颜色
45905
46221
  this.BGColor=g_JSChartResource.PCTooltipPaint.BGColor; //背景色
@@ -46310,6 +46626,7 @@ function StockChip()
46310
46626
  this.PixelRatio=GetDevicePixelRatio();
46311
46627
  this.ShowType=0; //0=所有筹码 1=周期前 2=周期内
46312
46628
  this.IsDynamic=true;
46629
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20;
46313
46630
  this.ClientRect={};
46314
46631
  this.Font=g_JSChartResource.StockChip.Font;
46315
46632
  this.InfoColor=g_JSChartResource.StockChip.InfoColor;
@@ -49989,6 +50306,7 @@ function FrameButtomToolbarPaint()
49989
50306
  this.FrameGuid=null;
49990
50307
  this.IsDynamic=true;
49991
50308
  this.DrawAfterTitle=true;
50309
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
49992
50310
 
49993
50311
  this.AryButton=[]; // { Title:, ID:, Data:数据, TooltipText:提示信息 }
49994
50312
  this.SelectedID=null; // 选中按钮ID
@@ -54134,6 +54452,7 @@ function ChartCorssCursor()
54134
54452
  this.CallAcutionXOperator;
54135
54453
 
54136
54454
  this.EnableKeyboard=false; //是否支持键盘隐藏显示
54455
+ this.EnableDBClick=false; //是否允许双击显示|隐藏十字光标
54137
54456
  this.OnChangeStatusCallback; //状态切换以后回调
54138
54457
 
54139
54458
 
@@ -55362,6 +55681,27 @@ function ChartCorssCursor()
55362
55681
  }
55363
55682
  }
55364
55683
 
55684
+ this.OnDBClick=function(data)
55685
+ {
55686
+ if (!this.EnableDBClick) return;
55687
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.Frame.SubFrame)) return;
55688
+
55689
+ //在主图框架内
55690
+ var frame=this.Frame.SubFrame[0].Frame;
55691
+ if (!frame) return;
55692
+
55693
+ var border=frame.GetBorder();
55694
+ var rtClient={ Left:border.Left, Top:border.Top, Bottom:border.Bottom, Right:border.Right };
55695
+ var x=data.X, y=data.Y;
55696
+ if (x>=rtClient.Left && x<=rtClient.Right && y>=rtClient.Top && y<=rtClient.Bottom)
55697
+ {
55698
+ this.IsShowCorss=!this.IsShowCorss
55699
+ data.Draw=true;
55700
+
55701
+ if (this.OnChangeStatusCallback) this.OnChangeStatusCallback({ Type:1, IsShowCorss:this.IsShowCorss }, this);
55702
+ }
55703
+ }
55704
+
55365
55705
 
55366
55706
  this.DrawCorssPoint=function(x,y)
55367
55707
  {
@@ -76121,7 +76461,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
76121
76461
  this.ChartDrawStorageCache=null; //首次需要创建的画图工具数据
76122
76462
  this.RightSpaceCount=0; //右侧空白个数
76123
76463
  this.SourceDataLimit=new Map(); //每个周期缓存数据最大个数 key=周期 value=最大个数
76124
- this.CtrlMoveStep=5; //Ctrl+(Left/Right) 移动数据个数
76464
+ this.CtrlMoveStep=5; //Ctrl+(Left/Right) 移动数据个数
76465
+ this.ShiftMoveStep=1; //Shift+(Left/Right) 移动K线
76125
76466
 
76126
76467
  this.CustomShow=null; //首先显示的K线的起始日期 { Date:日期, Time:时间, PageSize:, Callback:, Position:0=left 1=center }
76127
76468
  this.ZoomType=0; //缩放模式 0=最右边固定缩放, 1=十字光标两边缩放
@@ -76175,6 +76516,15 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
76175
76516
  this.ScrollBar=null; //横向滚动条
76176
76517
  this.IsAutoSyncDataOffset=true; //增量更新时,是否移动当前屏数据
76177
76518
 
76519
+ //热键
76520
+ this.AryHotKey=
76521
+ [
76522
+ //SecondKeyID 1=shiftKey 2=ctrlKey 3=altKey
76523
+ { KeyID:87, SecondKeyID:3, CMD:JSCHART_MENU_ID.CMD_FULLSCREEN_SUMMARY_ID, Args:null, Description:"Alt+W 全屏区间统计" },
76524
+ ]
76525
+
76526
+ this.KLineDragConfig={ EnableShfit:false }; //是否启动Shift+鼠标拖动K线
76527
+
76178
76528
  this.GetKLineCalulate=function()
76179
76529
  {
76180
76530
  var kLineDrawType=this.GetKLineDrawType();
@@ -77212,7 +77562,9 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
77212
77562
  this.PopMinuteChart.Show({ Date:date, Symbol:symbol, Data:data.Tooltip.Data, Chart:data.Tooltip.ChartPaint }, x/pixelRatio,y/pixelRatio);
77213
77563
  }
77214
77564
 
77215
-
77565
+ //Alt+W 区间统计
77566
+ //Alt+数字 切换多个窗口
77567
+ //Ctrl+I
77216
77568
  this.OnCustomKeyDown=function(keyID, e) //自定义键盘事件
77217
77569
  {
77218
77570
  if (keyID==37 && e.ctrlKey) //Ctrl+Left
@@ -77225,12 +77577,93 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
77225
77577
  this.MoveCorssCursorRight(this.CtrlMoveStep);
77226
77578
  return true;
77227
77579
  }
77580
+ else if (keyID==37 && e.shiftKey) //shift+Left 移动K线
77581
+ {
77582
+ this.MoveKLineLeft(this.ShiftMoveStep);
77583
+ return true;
77584
+ }
77585
+ else if (keyID==39 && e.shiftKey) //shift+Right 移动K线
77586
+ {
77587
+ this.MoveKLineRight(this.ShiftMoveStep);
77588
+ return true;
77589
+ }
77590
+ else if (keyID==38 && e.shiftKey) //shift+up 上移十字光标
77591
+ {
77592
+ this.MoveCorssCursorUp(this.ShiftUpDownStepPixel);
77593
+ return true;
77594
+ }
77595
+ else if (keyID==40 && e.shiftKey) //shift+down 下移十字光标
77596
+ {
77597
+ this.MoveCorssCursorDown(this.ShiftUpDownStepPixel);
77598
+ return true;
77599
+ }
77600
+ else if (keyID==13) //回车显示分时图
77601
+ {
77602
+ this.OnEnterKeyDown();
77603
+ }
77228
77604
  else
77229
77605
  {
77230
77606
  return false;
77231
77607
  }
77232
77608
  }
77233
77609
 
77610
+ this.MoveKLineLeft=function(value)
77611
+ {
77612
+ return this.MoveKLine(-value);
77613
+ }
77614
+
77615
+ this.MoveKLineRight=function(value)
77616
+ {
77617
+ return this.MoveKLine(value);
77618
+ }
77619
+
77620
+ this.MoveKLine=function(step)
77621
+ {
77622
+ if (step==0) return;
77623
+
77624
+ var oneStepWidth=this.GetMoveOneStepWidth();
77625
+ var moveSetp=step*oneStepWidth;
77626
+ var bLeft=true;
77627
+ if (step<0)
77628
+ {
77629
+ moveSetp=Math.abs(step)*oneStepWidth;
77630
+ bLeft=false;
77631
+ }
77632
+
77633
+ if(!this.DataMove(moveSetp,bLeft)) return;
77634
+
77635
+ this.UpdataDataoffset();
77636
+ this.RepairCursorIndex();
77637
+ this.UpdatePointByCursorIndex(); //推拽数据的时候不需要把鼠标位置更新到K线上
77638
+ this.UpdateFrameMaxMin();
77639
+ this.ResetFrameXYSplit();
77640
+ this.Draw();
77641
+ this.ShowTooltipByKeyDown();
77642
+ this.OnKLinePageChange("datamove");
77643
+ }
77644
+
77645
+ //修复 当前数据索引大于数据个数的请求
77646
+ this.RepairCursorIndex=function()
77647
+ {
77648
+ var kData=this.GetKData();
77649
+ if (!kData) return;
77650
+
77651
+ var xPointcount=0;
77652
+ if (this.Frame.XPointCount) xPointcount=this.Frame.XPointCount;
77653
+ else xPointcount=this.Frame.SubFrame[0].Frame.XPointCount;
77654
+ if (!IFrameSplitOperator.IsPlusNumber(xPointcount)) return;
77655
+
77656
+ if (this.CursorIndex<0) this.CursorIndex=0;
77657
+
77658
+ var index=this.CursorIndex;
77659
+ index=parseInt(index.toFixed(0));
77660
+
77661
+ if (index+kData.DataOffset>=kData.Data.length)
77662
+ {
77663
+ this.CursorIndex=kData.Data.length-1-kData.DataOffset;
77664
+ }
77665
+ }
77666
+
77234
77667
  this.MoveCorssCursorLeft=function(step)
77235
77668
  {
77236
77669
  var data=null;
@@ -77307,6 +77740,30 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
77307
77740
  this.ShowTooltipByKeyDown();
77308
77741
  }
77309
77742
 
77743
+ this.OnEnterKeyDown=function()
77744
+ {
77745
+ if (!this.PopMinuteChart) return false;
77746
+ if (!ChartData.IsDayPeriod(this.Period,true)) return false; //只支持日K
77747
+ if (!this.ChartCorssCursor || !this.ChartCorssCursor.IsShowCorss || this.ChartCorssCursor.ClientPos<0) return false;
77748
+ var index=this.ChartCorssCursor.CursorIndex;
77749
+ index=parseInt(index.toFixed(0));
77750
+ var kData=this.GetKData();
77751
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
77752
+ var dataIndex=kData.DataOffset+index;
77753
+ if (dataIndex<0 || dataIndex>=kData.Data.length) return false;
77754
+
77755
+ var kItem = kData.Data[dataIndex];
77756
+ if (!kItem) return false;
77757
+
77758
+ var frame=this.Frame.SubFrame[0].Frame;
77759
+ var x=frame.GetXFromIndex(index);
77760
+ var y=frame.GetYFromData(kItem.Close);
77761
+
77762
+ var data={ Chart:this, Tooltip:{ ChartPaint:this.ChartPaint[0], Data:kItem } };
77763
+
77764
+ this.ShowMinuteChartDialog(data, x, y);
77765
+ }
77766
+
77310
77767
  //获取K线图实例
77311
77768
  this.GetKLineChart=function()
77312
77769
  {
@@ -82064,12 +82521,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
82064
82521
  var bCorssDrawKLine=false;
82065
82522
  var bCorssDrawVaildTime=false;
82066
82523
  var bCorssDrawPoint=false;
82524
+ var bCorssBCClick=false;
82067
82525
  if (this.ChartCorssCursor)
82068
82526
  {
82069
82527
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
82070
82528
  bCorssDrawKLine=this.ChartCorssCursor.IsOnlyDrawKLine && this.ChartCorssCursor.IsShowClose;
82071
82529
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
82072
82530
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
82531
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
82073
82532
  }
82074
82533
 
82075
82534
  var bPopMinuteChart=false;
@@ -82255,6 +82714,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
82255
82714
  { Name:"显示在K线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_KLINE_ID, Args:[!bCorssDrawKLine]}, Checked:bCorssDrawKLine },
82256
82715
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
82257
82716
  { Name:"画圆点",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_POINT_ID, Args:[!bCorssDrawPoint]}, Checked:bCorssDrawPoint },
82717
+ { Name:"双击显示/隐藏", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID, Args:[!bCorssBCClick]}, Checked:bCorssBCClick },
82258
82718
  ]
82259
82719
  },
82260
82720
  {
@@ -82728,6 +83188,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
82728
83188
 
82729
83189
  this.OnDoubleClick=function(x,y,e)
82730
83190
  {
83191
+ var bDraw=false;
83192
+ if (this.ChartCorssCursor)
83193
+ {
83194
+ var data={ e:e, X:x, Y:y, Draw:false };
83195
+ this.ChartCorssCursor.OnDBClick(data);
83196
+ bDraw=data.Draw
83197
+ }
83198
+
82731
83199
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
82732
83200
  {
82733
83201
  var pixelTatio = GetDevicePixelRatio();
@@ -82764,6 +83232,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
82764
83232
  }
82765
83233
  }
82766
83234
 
83235
+ if (bDraw) this.Draw();
83236
+
82767
83237
  var tooltip=new TooltipData();
82768
83238
  if (!this.PtInChartPaintTooltip(x,y,tooltip))
82769
83239
  {
@@ -84550,6 +85020,13 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
84550
85020
  this.BaselineType=0; //基准线类型 0=最新昨收盘 1=多日前昨收盘
84551
85021
  this.EnableNightDayBG=false; //是否启动夜盘背景色
84552
85022
 
85023
+ //热键
85024
+ this.AryHotKey=
85025
+ [
85026
+ //SecondKeyID 1=shiftKey 2=ctrlKey 3=altKey
85027
+ { KeyID:87, SecondKeyID:3, CMD:JSCHART_MENU_ID.CMD_FULLSCREEN_SUMMARY_ID, Args:null, Description:"Alt+W 全屏区间统计" },
85028
+ ]
85029
+
84553
85030
  //集合竞价设置 obj={ Left:true/false, Right:true/false, MultiDay:{Left:, Right:} }
84554
85031
  this.SetCallCationDataBorder=function(obj)
84555
85032
  {
@@ -86054,6 +86531,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
86054
86531
  draw=sendData.Draw;
86055
86532
  }
86056
86533
 
86534
+ if (this.OnHotKeyDown(keyID, e))
86535
+ {
86536
+ //不让滚动条滚动
86537
+ if(e.preventDefault) e.preventDefault();
86538
+ else e.returnValue = false;
86539
+ return;
86540
+ }
86541
+
86057
86542
  switch(keyID)
86058
86543
  {
86059
86544
  case 37: //left
@@ -86167,6 +86652,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
86167
86652
  this.CurrentChartDrawPicture=null;
86168
86653
  }
86169
86654
  break;
86655
+ case 38:
86656
+ case 40:
86657
+ if ((e.ctrlKey||e.shiftKey) && this.OnCustomKeyDown)
86658
+ this.OnCustomKeyDown(keyID, e)
86659
+ break;
86170
86660
  default:
86171
86661
  return;
86172
86662
  }
@@ -86178,6 +86668,24 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
86178
86668
  else e.returnValue = false;
86179
86669
  }
86180
86670
 
86671
+ this.OnCustomKeyDown=function(keyID, e) //自定义键盘事件
86672
+ {
86673
+ if (keyID==38 && e.shiftKey) //shift+up 上移十字光标
86674
+ {
86675
+ this.MoveCorssCursorUp(this.ShiftUpDownStepPixel);
86676
+ return true;
86677
+ }
86678
+ else if (keyID==40 && e.shiftKey) //shift+down 下移十字光标
86679
+ {
86680
+ this.MoveCorssCursorDown(this.ShiftUpDownStepPixel);
86681
+ return true;
86682
+ }
86683
+ else
86684
+ {
86685
+ return false;
86686
+ }
86687
+ }
86688
+
86181
86689
  /*
86182
86690
  this.OnMarkRectSelect=function(e)
86183
86691
  {
@@ -86287,12 +86795,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
86287
86795
  var bCorssDrawCloseLine=false; //十字光标只能画在走势图价格线上
86288
86796
  var bCorssDrawVaildTime=false;
86289
86797
  var bCorssDrawPoint=false;
86798
+ var bCorssBCClick=false;
86290
86799
  if (this.ChartCorssCursor)
86291
86800
  {
86292
86801
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
86293
86802
  bCorssDrawCloseLine=this.ChartCorssCursor.IsOnlyDrawMinute;
86294
86803
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
86295
86804
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
86805
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
86296
86806
  }
86297
86807
 
86298
86808
  var bRButtonSelectRect=false,bLButtonSelectRect=false;
@@ -86389,6 +86899,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
86389
86899
  { Name:"画在价格线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_CLOSE_LINE_ID, Args:[!bCorssDrawCloseLine]}, Checked:bCorssDrawCloseLine },
86390
86900
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
86391
86901
  { Name:"画圆点",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_POINT_ID, Args:[!bCorssDrawPoint]}, Checked:bCorssDrawPoint },
86902
+ { Name:"双击显示/隐藏", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID, Args:[!bCorssBCClick]}, Checked:bCorssBCClick },
86392
86903
  ]
86393
86904
  },
86394
86905
 
@@ -86529,6 +87040,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
86529
87040
  {
86530
87041
  JSConsole.Chart.Log("[MinuteChartContainer::OnDoubleClick]", e);
86531
87042
 
87043
+ var bDraw=false;
87044
+ if (this.ChartCorssCursor)
87045
+ {
87046
+ var data={ e:e, X:x, Y:y, Draw:false };
87047
+ this.ChartCorssCursor.OnDBClick(data);
87048
+ bDraw=data.Draw
87049
+ }
87050
+
86532
87051
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
86533
87052
  {
86534
87053
  var pixelTatio = GetDevicePixelRatio();
@@ -86566,10 +87085,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
86566
87085
  if (this.ZoomIndexWindow(frameId, {X:x, Y:y}))
86567
87086
  {
86568
87087
  this.Frame.SetSizeChage(true);
86569
- this.Draw();
87088
+ bDraw=true;
86570
87089
  }
86571
87090
  }
86572
87091
  }
87092
+
87093
+ if (bDraw) this.Draw();
86573
87094
  }
86574
87095
 
86575
87096
  this.GetDataItem=function(pointInfo)