hqchart 1.1.13227 → 1.1.13238

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.
@@ -9214,6 +9214,12 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9214
9214
 
9215
9215
  //更新滚动条
9216
9216
  if (typeof(this.UpdateScrollBar)=='function') this.UpdateScrollBar();
9217
+
9218
+ if (this.LastMouseStatus.MouseOnToolbar) //工具栏按钮提示信息
9219
+ {
9220
+ var frame=this.LastMouseStatus.MouseOnToolbar.Frame;
9221
+ if (frame && frame.DrawToolbarTooltip) frame.DrawToolbarTooltip(this.LastMouseStatus.MouseOnToolbar);
9222
+ }
9217
9223
 
9218
9224
  //发送图形状态给外部
9219
9225
  if (this.mapEvent.has(JSCHART_EVENT_ID.CHART_STATUS))
@@ -14498,11 +14504,12 @@ function AverageWidthFrame()
14498
14504
 
14499
14505
  this.Canvas.font=this.ButtonTooltip.Font;
14500
14506
  this.Canvas.textAlign="left";
14501
- this.Canvas.textBaseline="middle";
14507
+ this.Canvas.textBaseline="bottom";
14502
14508
 
14503
- var textWidth=this.Canvas.measureText(text).width+8;
14509
+ var mergin= this.ButtonTooltip.Mergin;
14510
+ var textWidth=this.Canvas.measureText(text).width+mergin.Left+mergin.Right;
14504
14511
  var textHeight=this.GetFontHeight();
14505
- var bgHeight=textHeight+10;
14512
+ var bgHeight=textHeight+mergin.Top+mergin.Bottom;
14506
14513
  if (mouseOnToolbar.ID=="TitleButton")
14507
14514
  {
14508
14515
  var x=mouseOnToolbar.Point.X;
@@ -14528,14 +14535,33 @@ function AverageWidthFrame()
14528
14535
  if (y<0) y=border.TopEx+1;
14529
14536
  if (x+textWidth>border.ChartWidth) x=border.ChartWidth-textWidth-2;
14530
14537
  }
14531
-
14532
-
14533
14538
 
14534
- this.Canvas.fillStyle=this.ButtonTooltip.ColorBG;
14535
- this.Canvas.fillRect(x,y,textWidth,bgHeight); //画一个背景色, 不然是一个黑的背景
14539
+ if (IFrameSplitOperator.IsNumber(this.ButtonTooltip.BorderRadius)) //圆角
14540
+ {
14541
+ var roundRadius=this.ButtonTooltip.BorderRadius;
14542
+ this.Canvas.beginPath();
14543
+ this.Canvas.roundRect(ToFixedPoint(x), ToFixedPoint(y), ToFixedRect(textWidth), ToFixedRect(bgHeight), [roundRadius]);
14544
+ this.Canvas.closePath();
14536
14545
 
14537
- this.Canvas.fillStyle=this.ButtonTooltip.Color;
14538
- this.Canvas.fillText(text, x+4,y+bgHeight/2);
14546
+ this.Canvas.fillStyle=this.ButtonTooltip.ColorBG;
14547
+ this.Canvas.fill();
14548
+
14549
+ this.Canvas.strokeStyle=this.ButtonTooltip.ColorBorder;
14550
+ this.Canvas.stroke();
14551
+
14552
+ this.Canvas.fillStyle=this.ButtonTooltip.Color;
14553
+ this.Canvas.fillText(text, x+mergin.Left, y+bgHeight-mergin.Bottom);
14554
+ }
14555
+ else
14556
+ {
14557
+ this.Canvas.fillStyle=this.ButtonTooltip.ColorBG;
14558
+ this.Canvas.fillRect(x,y,textWidth,bgHeight); //画一个背景色, 不然是一个黑的背景
14559
+ this.Canvas.fillStyle=this.ButtonTooltip.Color;
14560
+ this.Canvas.fillText(text, x+mergin.Left,y+bgHeight-mergin.Bottom);
14561
+ }
14562
+
14563
+
14564
+
14539
14565
  }
14540
14566
 
14541
14567
  //isLimit 是否限制在当前坐标下
@@ -29729,6 +29755,10 @@ function ChartKLine()
29729
29755
 
29730
29756
  this.Draw=function()
29731
29757
  {
29758
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
29759
+ if (this.IsShowIndexTitleOnly()) return;
29760
+ if (this.IsHideScriptIndex()) return;
29761
+
29732
29762
  this.IsShowOrderText=false;
29733
29763
  this.TooltipRect=[];
29734
29764
  this.InfoTooltipRect=[];
@@ -35113,7 +35143,9 @@ function ChartPointDot()
35113
35143
 
35114
35144
  this.Draw=function()
35115
35145
  {
35116
- if (!this.IsShow || this.ChartFrame.IsMinSize) return;
35146
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
35147
+ if (this.IsShowIndexTitleOnly()) return;
35148
+ if (this.IsHideScriptIndex()) return;
35117
35149
 
35118
35150
  if (this.NotSupportMessage)
35119
35151
  {
@@ -35943,7 +35975,9 @@ function ChartStickLine()
35943
35975
 
35944
35976
  this.Draw=function()
35945
35977
  {
35946
- if (this.ChartFrame.IsMinSize) return;
35978
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
35979
+ if (this.IsShowIndexTitleOnly()) return;
35980
+ if (this.IsHideScriptIndex()) return;
35947
35981
 
35948
35982
  if (this.NotSupportMessage)
35949
35983
  {
@@ -39044,7 +39078,9 @@ function ChartBand()
39044
39078
 
39045
39079
  this.Draw=function()
39046
39080
  {
39047
- if (this.ChartFrame.IsMinSize) return;
39081
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
39082
+ if (this.IsShowIndexTitleOnly()) return;
39083
+ if (this.IsHideScriptIndex()) return;
39048
39084
 
39049
39085
  if (this.NotSupportMessage)
39050
39086
  {
@@ -53020,15 +53056,17 @@ function ChartCorssCursor()
53020
53056
  this.DrawRightButton=function(drawTop, drawRight, drawWidth, drawHeight, data)
53021
53057
  {
53022
53058
  this.Canvas.fillStyle=this.RightButton.BGColor;
53023
- var rtButtom={Left:drawRight-drawWidth, Top:drawTop, Width:drawWidth, Height:drawHeight };
53024
- this.RightButton.Rect=rtButtom;
53059
+ var rtButton={Left:drawRight-drawWidth, Top:drawTop, Width:drawWidth, Height:drawHeight };
53060
+ rtButton.Right=rtButton.Left+rtButton.Width;
53061
+ rtButton.Bottom=rtButton.Top+rtButton.Height;
53062
+ this.RightButton.Rect=rtButton;
53025
53063
  this.RightButton.Data=data;
53026
- this.Canvas.fillRect(ToFixedPoint(rtButtom.Left+1),ToFixedPoint(rtButtom.Top),ToFixedRect(rtButtom.Width),ToFixedRect(rtButtom.Height));
53064
+ this.Canvas.fillRect(ToFixedPoint(rtButton.Left+1),ToFixedPoint(rtButton.Top),ToFixedRect(rtButton.Width),ToFixedRect(rtButton.Height));
53027
53065
 
53028
53066
  var pixelRatio=GetDevicePixelRatio();
53029
53067
  var spaceWidth=3;
53030
- var yCenter=(rtButtom.Top+spaceWidth)+(rtButtom.Height-spaceWidth*2)/2;
53031
- var xCenter=(rtButtom.Left+spaceWidth)+(rtButtom.Width-spaceWidth*2)/2;
53068
+ var yCenter=(rtButton.Top+spaceWidth)+(rtButton.Height-spaceWidth*2)/2;
53069
+ var xCenter=(rtButton.Left+spaceWidth)+(rtButton.Width-spaceWidth*2)/2;
53032
53070
 
53033
53071
  if (this.RightButton.Icon)
53034
53072
  {
@@ -53049,10 +53087,10 @@ function ChartCorssCursor()
53049
53087
  this.Canvas.linewidth=1*pixelRatio;
53050
53088
  this.Canvas.beginPath();
53051
53089
  this.Canvas.moveTo(ToFixedPoint(x), ToFixedPoint(yCenter));
53052
- this.Canvas.lineTo(ToFixedPoint(x+rtButtom.Width-spaceWidth*2), ToFixedPoint(yCenter));
53090
+ this.Canvas.lineTo(ToFixedPoint(x+rtButton.Width-spaceWidth*2), ToFixedPoint(yCenter));
53053
53091
 
53054
53092
  this.Canvas.moveTo(ToFixedPoint(xCenter),ToFixedPoint(y));
53055
- this.Canvas.lineTo(ToFixedPoint(xCenter), ToFixedPoint(y+rtButtom.Height-spaceWidth*2));
53093
+ this.Canvas.lineTo(ToFixedPoint(xCenter), ToFixedPoint(y+rtButton.Height-spaceWidth*2));
53056
53094
 
53057
53095
  this.Canvas.stroke();
53058
53096
  this.Canvas.restore();
@@ -68666,10 +68704,12 @@ function JSChartResource()
68666
68704
 
68667
68705
  Tooltip:
68668
68706
  {
68669
- Font:14*GetDevicePixelRatio() +"px 微软雅黑",
68670
- Color:'rgb(255,255,255)',
68671
- ColorBG:'rgb(42,46,57)',
68672
- ColorBorder:'rgb(0,0,0)'
68707
+ Font:13*GetDevicePixelRatio() +"px 微软雅黑",
68708
+ Color:'rgb(71,71,71)',
68709
+ ColorBG:'rgb(255,255,255)',
68710
+ ColorBorder:'rgb(0,0,0)',
68711
+ BorderRadius:2,
68712
+ Mergin:{ Left:4, Right:4, Top:2, Bottom:3 },
68673
68713
  }
68674
68714
  }
68675
68715
 
@@ -69970,6 +70010,24 @@ function JSChartResource()
69970
70010
  T_SetButtonStyle(buttons.MaxMinWindow, this.Buttons.MaxMinWindow);
69971
70011
  T_SetButtonStyle(buttons.TitleWindow, this.Buttons.TitleWindow);
69972
70012
  T_SetButtonStyle(buttons.ExportData, this.Buttons.ExportData);
70013
+
70014
+ if (buttons.Tooltip)
70015
+ {
70016
+ var item=buttons.Tooltip;
70017
+ var src=this.Buttons.Tooltip;
70018
+ if (item.Font) src.Font=item.Font;
70019
+ if (item.Color) src.Color=item.Color;
70020
+ if (item.ColorBG) src.ColorBG=item.ColorBG;
70021
+ if (item.ColorBorder) src.ColorBorder=item.ColorBorder;
70022
+ if (item.BorderRadius) src.BorderRadius=item.BorderRadius;
70023
+ if (item.Margin)
70024
+ {
70025
+ if (IFrameSplitOperator.IsNumber(item.Margin.Left)) src.Margin.Left=item.Margin.Left;
70026
+ if (IFrameSplitOperator.IsNumber(item.Margin.Top)) src.Margin.Top=item.Margin.Top;
70027
+ if (IFrameSplitOperator.IsNumber(item.Margin.Bottom)) src.Margin.Bottom=item.Margin.Bottom;
70028
+ if (IFrameSplitOperator.IsNumber(item.Margin.Right)) src.Margin.Right=item.Margin.Right;
70029
+ }
70030
+ }
69973
70031
  }
69974
70032
 
69975
70033
  if (style.ChartDrawVolProfile)
@@ -71306,7 +71364,6 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
71306
71364
  this.TickApiUrl=g_JSChartResource.Domain+'/API/StockDetail'; //当天分笔数据
71307
71365
 
71308
71366
  this.MinuteDialog; //双击历史K线 弹出分钟走势图
71309
- this.RightMenu; //右键菜单
71310
71367
 
71311
71368
  this.BeforeBindMainData=null; //function(funcName) 在BindMainData() 调用前回调用
71312
71369
  this.AfterBindMainData=null; //function(funcName) 在BindMainData() 调用前后调用
@@ -76728,6 +76785,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
76728
76785
  {
76729
76786
  var windowCount=this.Frame.SubFrame.length; //窗口个数
76730
76787
  var klineChart=this.ChartPaint[0];
76788
+ var klineType=klineChart.DrawType;
76789
+ var bThinAKBar=klineChart.IsThinAKBar;
76731
76790
  var priceGap=klineChart.PriceGap; //缺口配置信息
76732
76791
  var coordinateType=null, yCoordinateType=null; //坐标类型
76733
76792
  var mainFrame=null;
@@ -76860,17 +76919,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
76860
76919
  Name:"主图线型",
76861
76920
  SubMenu:
76862
76921
  [
76863
- { Name:"K线(空心阳线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[3]} },
76864
- { Name:"K线(实心阳线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[0]} },
76865
- { Name:"美国线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[2, true, { IsThinAKBar:false }]} },
76866
- { Name:"美国线(细)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[2, true, { IsThinAKBar:true }]} },
76867
- { Name:"收盘线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[1]} },
76868
- { Name:"收盘面积", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[4]} },
76869
- { Name:"K线(空心阳线阴线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[6]} },
76870
- { Name:"Heikin Ashi", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[11]} },
76871
- { Name:"Line Break", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[12]} },
76872
- { Name:"High-low", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[13]} },
76873
- { Name:"HLC Area", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[15]} },
76922
+ { Name:"K线(空心阳线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[3]}, Checked:klineType==0 },
76923
+ { Name:"K线(实心阳线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[0]}, Checked:klineType==3 },
76924
+ { Name:"美国线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[2, true, { IsThinAKBar:false }]}, Checked:(klineType==2&&!bThinAKBar) },
76925
+ { Name:"美国线(细)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[2, true, { IsThinAKBar:true }]}, Checked:(klineType==2&&bThinAKBar) },
76926
+ { Name:"收盘线", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[1]}, Checked:klineType==1},
76927
+ { Name:"收盘面积", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[4]}, Checked:klineType==4 },
76928
+ { Name:"K线(空心阳线阴线)", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[6]}, Checked:klineType==6 },
76929
+ { Name:"Heikin Ashi", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[11]}, Checked:klineType==11 },
76930
+ { Name:"Line Break", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[12]}, Checked:klineType==12 },
76931
+ { Name:"High-low", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[13]}, Checked:klineType==13 },
76932
+ { Name:"HLC Area", Data:{ ID: JSCHART_MENU_ID.CMD_CHANGE_KLINE_TYPE_ID, Args:[15]}, Checked:klineType==15 },
76874
76933
  ]
76875
76934
  },
76876
76935
  {
@@ -105188,6 +105247,11 @@ function JSDraw(errorHandler,symbolData)
105188
105247
  return offset;
105189
105248
  }
105190
105249
 
105250
+ this.KLINETYPE=function(type)
105251
+ {
105252
+ return type;
105253
+ }
105254
+
105191
105255
  this.FIRSTDRAW=function(value)
105192
105256
  {
105193
105257
  return value;
@@ -111955,6 +112019,7 @@ function JSExecute(ast,option)
111955
112019
  var vLineConfig=null;
111956
112020
  var isFirstDraw=null;
111957
112021
  let xOffset=null, yOffset=null;
112022
+ var klineType=null;
111958
112023
  for(let j=0; j<item.Expression.Expression.length; ++j)
111959
112024
  {
111960
112025
  let itemExpression=item.Expression.Expression[j];
@@ -112112,6 +112177,10 @@ function JSExecute(ast,option)
112112
112177
  vLineConfig=itemExpression.Draw;
112113
112178
  varName=null;
112114
112179
  }
112180
+ else if (itemExpression.Callee.Name=="KLINETYPE")
112181
+ {
112182
+ klineType=itemExpression.Out;
112183
+ }
112115
112184
  }
112116
112185
  }
112117
112186
  else if (itemExpression.Type==Syntax.BinaryExpression)
@@ -112259,6 +112328,7 @@ function JSExecute(ast,option)
112259
112328
  if (IFrameSplitOperator.IsNumber(xOffset)) outVar.XOffset=xOffset;
112260
112329
  if (IFrameSplitOperator.IsNumber(yOffset)) outVar.YOffset=yOffset;
112261
112330
  if (IFrameSplitOperator.IsBool(isFirstDraw)) outVar.IsFirstDraw=isFirstDraw;
112331
+ if (IFrameSplitOperator.IsNumber(klineType)) outVar.KLineType=klineType;
112262
112332
  this.OutVarTable.push(outVar);
112263
112333
  }
112264
112334
  else if (varName)
@@ -112698,6 +112768,9 @@ function JSExecute(ast,option)
112698
112768
  node.Draw=this.Draw.DRAWKLINE_IF(args[0],args[1],args[2],args[3],args[4]);
112699
112769
  node.Out=[];
112700
112770
  break;
112771
+ case "KLINETYPE": //K线类型 和DRAWKLINE连用
112772
+ node.Out=this.Draw.KLINETYPE(args[0]);
112773
+ break;
112701
112774
  case "DRAWOVERLAYKLINE":
112702
112775
  node.Draw=this.Draw.DRAWOVERLAYKLINE(args[0],args[1],args[2],args[3]);
112703
112776
  node.Out=[];
@@ -115431,6 +115504,7 @@ function ScriptIndex(name,script,args,option)
115431
115504
 
115432
115505
  if (IFrameSplitOperator.IsBool(varItem.IsFirstDraw)) chart.IsDrawFirst=varItem.IsFirstDraw;
115433
115506
 
115507
+ this.SetChartIndexName(chart);
115434
115508
  hqChart.ChartPaint.push(chart);
115435
115509
  }
115436
115510
 
@@ -115497,10 +115571,12 @@ function ScriptIndex(name,script,args,option)
115497
115571
  chart.Data.Data=varItem.Draw.DrawData;
115498
115572
  chart.IsShowMaxMinPrice=false;
115499
115573
  chart.IsShowKTooltip=false;
115574
+ if (IFrameSplitOperator.IsNumber(varItem.KLineType)) chart.DrawType=varItem.KLineType;
115500
115575
 
115501
115576
  if (varItem.Color) //如果设置了颜色,使用外面设置的颜色
115502
115577
  chart.UnchagneColor=chart.DownColor=chart.UpColor=this.GetColor(varItem.Color);
115503
115578
 
115579
+ this.SetChartIndexName(chart);
115504
115580
  hqChart.ChartPaint.push(chart);
115505
115581
  }
115506
115582
 
@@ -117340,6 +117416,7 @@ function OverlayScriptIndex(name,script,args,option)
117340
117416
 
117341
117417
  if (IFrameSplitOperator.IsBool(varItem.IsFirstDraw)) chart.IsDrawFirst=varItem.IsFirstDraw;
117342
117418
 
117419
+ this.SetChartIndexName(chart);
117343
117420
  frame.ChartPaint.push(chart);
117344
117421
  }
117345
117422
 
@@ -120932,6 +121009,16 @@ function GetBlackStyle()
120932
121009
  {
120933
121010
  MoveOnColor:"rgb(255,255,255)",
120934
121011
  Color:"rgb(156,156,156)"
121012
+ },
121013
+
121014
+ Tooltip:
121015
+ {
121016
+ //Font:12*GetDevicePixelRatio() +"px 微软雅黑",
121017
+ Color:'rgb(204,204,204)',
121018
+ ColorBG:'rgb(32,32,32)',
121019
+ ColorBorder:'rgb(69,69,69)',
121020
+ //BorderRadius:4,
121021
+ //Mergin:{ Left:4, Right:4, Top:2, Bottom:4 },
120935
121022
  }
120936
121023
  },
120937
121024
 
@@ -134726,6 +134813,12 @@ function JSPopMenu()
134726
134813
  var yBottom=window.innerHeight-15;
134727
134814
  if (yMenuBottom>yBottom) yTop=rtButton.Top-menuHeight;
134728
134815
 
134816
+ if (this.Data.Position==JSPopMenu.POSITION_ID.DROPDOWN_RIGHT_MENU_ID)
134817
+ {
134818
+ var menuWidth=this.RootDOM.offsetWidth;
134819
+ xLeft=rtButton.Right-menuWidth;
134820
+ }
134821
+
134729
134822
  this.RootDOM.style.visibility='visible';
134730
134823
  this.RootDOM.style.top = yTop + "px";
134731
134824
  this.RootDOM.style.left = xLeft + "px";
@@ -134814,6 +134907,8 @@ function JSPopMenu()
134814
134907
  JSPopMenu.POSITION_ID={ };
134815
134908
  JSPopMenu.POSITION_ID.RIGHT_MENU_ID=0;
134816
134909
  JSPopMenu.POSITION_ID.TAB_MENU_ID=1;
134910
+ JSPopMenu.POSITION_ID.DROPDOWN_MENU_ID=2; //左对齐下拉
134911
+ JSPopMenu.POSITION_ID.DROPDOWN_RIGHT_MENU_ID=3; //右对齐下拉
134817
134912
  JSPopMenu.SEPARATOR_LINE_NAME="MENU_SEPARATOR"; //分割线
134818
134913
  ///////////////////////////////////////////////////////////////////////////////////
134819
134914
  // 工作线程计算指标示例
@@ -134936,7 +135031,7 @@ function HQChartScriptWorker()
134936
135031
 
134937
135032
 
134938
135033
 
134939
- var HQCHART_VERSION="1.1.13225";
135034
+ var HQCHART_VERSION="1.1.13237";
134940
135035
 
134941
135036
  function PrintHQChartVersion()
134942
135037
  {