hqchart 1.1.13346 → 1.1.13355

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.
@@ -4270,13 +4270,22 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4270
4270
  if (IFrameSplitOperator.IsBool(item.IsShowKLineDivTooltip)) chart.IsShowKLineDivTooltip=item.IsShowKLineDivTooltip;
4271
4271
  if (option.KLine.MaxRequestMinuteDayCount>0) chart.MaxRequestMinuteDayCount=option.KLine.MaxRequestMinuteDayCount;
4272
4272
  if (option.KLine.DrawType) chart.KLineDrawType=option.KLine.DrawType;
4273
- if (option.KLine.FirstShowDate>19910101) chart.CustomShow={ Date:option.KLine.FirstShowDate, PageSize:option.KLine.PageSize };
4273
+ if (option.KLine.FirstShowDate>19910101) chart.CustomShow={ Date:option.KLine.FirstShowDate, PageSize:option.KLine.PageSize }; //!!已弃用 新的格式"CustomShow"
4274
4274
  if (option.KLine.RightSpaceCount>0) chart.RightSpaceCount=option.KLine.RightSpaceCount;
4275
4275
  if (option.KLine.ZoomType>0) chart.ZoomType=option.KLine.ZoomType;
4276
4276
  if (option.KLine.DataWidth>=1) chart.KLineSize={ DataWidth:option.KLine.DataWidth };
4277
4277
  if (IFrameSplitOperator.IsNumber(option.KLine.RightFormula)) chart.RightFormula=option.KLine.RightFormula;
4278
4278
  }
4279
4279
 
4280
+ //自定义显示位置
4281
+ if (option.CustomShow && IFrameSplitOperator.IsPlusNumber(option.CustomShow.Date))
4282
+ {
4283
+ var item=option.CustomShow;
4284
+ chart.CustomShow={ Date:item.Date };
4285
+ if (IFrameSplitOperator.IsNumber(item.Time)) chart.CustomShow.Time=item.Time;
4286
+ if (IFrameSplitOperator.IsPlusNumber(item.PageSize)) chart.CustomShow.PageSize=item.PageSize;
4287
+ }
4288
+
4280
4289
  if (option.EnableFlowCapital)
4281
4290
  {
4282
4291
  var item=option.EnableFlowCapital;
@@ -49352,6 +49361,51 @@ function IFrameSplitOperator()
49352
49361
  }
49353
49362
 
49354
49363
  this.SetOption=function(option) { }
49364
+
49365
+ //计算上下预留
49366
+ this.ReservedHeight=function(splitData)
49367
+ {
49368
+ if (!this.Frame) return;
49369
+ if (this.Frame.IsHScreen) return; //横屏以后再搞
49370
+
49371
+ var yReserved=this.Frame.HorizontalReserved;
49372
+ if (!yReserved) return;
49373
+
49374
+ var reservedHeight=0;
49375
+ if (IFrameSplitOperator.IsPlusNumber(yReserved.Top)) reservedHeight+=yReserved.Top;
49376
+ if (IFrameSplitOperator.IsPlusNumber(yReserved.Bottom)) reservedHeight+=yReserved.Bottom;
49377
+ if (reservedHeight<=0) return;
49378
+
49379
+ var border=this.Frame.GetBorder();
49380
+ var top=border.TopEx;
49381
+ var bottom=border.BottomEx;
49382
+ var srcHeight=bottom-top;
49383
+ if (srcHeight<reservedHeight) return;
49384
+
49385
+ var max=splitData.Max;
49386
+ var min=splitData.Min;
49387
+ if (IFrameSplitOperator.IsPlusNumber(yReserved.Top)) top-=yReserved.Top;
49388
+ if (IFrameSplitOperator.IsPlusNumber(yReserved.Bottom)) bottom+=yReserved.Bottom;
49389
+
49390
+ var value=(max-min)/(bottom-top); //1个像素点对应的数值
49391
+ if (IFrameSplitOperator.IsPlusNumber(yReserved.Top))
49392
+ {
49393
+ var topValue=value*yReserved.Top;
49394
+ max+=topValue;
49395
+ }
49396
+
49397
+ if (IFrameSplitOperator.IsPlusNumber(yReserved.Bottom))
49398
+ {
49399
+ var bottomValue=value*yReserved.Bottom;
49400
+ min-=bottomValue;
49401
+ }
49402
+
49403
+ splitData.Max=max;
49404
+ splitData.Min=min;
49405
+
49406
+ this.Frame.HorizontalMax=splitData.Max;
49407
+ this.Frame.HorizontalMin=splitData.Min;
49408
+ }
49355
49409
  }
49356
49410
 
49357
49411
  //字符串格式化 千分位分割
@@ -50004,6 +50058,8 @@ function FrameSplitKLinePriceY()
50004
50058
  }
50005
50059
  */
50006
50060
 
50061
+ this.ReservedHeight(splitData); //预留高度
50062
+
50007
50063
  JSConsole.Chart.Log(`[FrameSplitKLinePriceY::Operator] fixed . Max=${splitData.Max} Min=${splitData.Min} Count=${splitData.Count}`);
50008
50064
 
50009
50065
  if (this.GetEventCallback)
@@ -50842,50 +50898,6 @@ function FrameSplitY()
50842
50898
  }
50843
50899
  }
50844
50900
 
50845
- this.ReservedHeight=function(splitData)
50846
- {
50847
- if (this.Frame.IsHScreen) return; //横屏以后再搞
50848
-
50849
- var yReserved=this.Frame.HorizontalReserved;
50850
- if (!yReserved) return;
50851
-
50852
- var reservedHeight=0;
50853
- if (IFrameSplitOperator.IsPlusNumber(yReserved.Top)) reservedHeight+=yReserved.Top;
50854
- if (IFrameSplitOperator.IsPlusNumber(yReserved.Bottom)) reservedHeight+=yReserved.Bottom;
50855
- if (reservedHeight<=0) return;
50856
-
50857
- var border=this.Frame.GetBorder();
50858
- var top=border.TopEx;
50859
- var bottom=border.BottomEx;
50860
- var srcHeight=bottom-top;
50861
- if (srcHeight<reservedHeight) return;
50862
-
50863
- var max=splitData.Max;
50864
- var min=splitData.Min;
50865
- if (IFrameSplitOperator.IsPlusNumber(yReserved.Top)) top-=yReserved.Top;
50866
- if (IFrameSplitOperator.IsPlusNumber(yReserved.Bottom)) bottom+=yReserved.Bottom;
50867
-
50868
- var value=(max-min)/(bottom-top); //1个像素点对应的数值
50869
- if (IFrameSplitOperator.IsPlusNumber(yReserved.Top))
50870
- {
50871
- var topValue=value*yReserved.Top;
50872
- max+=topValue;
50873
- }
50874
-
50875
- if (IFrameSplitOperator.IsPlusNumber(yReserved.Bottom))
50876
- {
50877
- var bottomValue=value*yReserved.Bottom;
50878
- min-=bottomValue;
50879
- }
50880
-
50881
- splitData.Max=max;
50882
- splitData.Min=min;
50883
-
50884
- this.Frame.HorizontalMax=splitData.Max;
50885
- this.Frame.HorizontalMin=splitData.Min;
50886
- }
50887
-
50888
-
50889
50901
  this.FormatValueString=function(value)
50890
50902
  {
50891
50903
  var text;
@@ -59682,6 +59694,7 @@ IChartDrawPicture.ArrayDrawPricture=
59682
59694
  { Name:"PriceRange", ClassName:"ChartPriceRange", Create:function() { return new ChartPriceRange(); }},
59683
59695
  { Name:"DateRange", ClassName:"ChartDateRange", Create:function() { return new ChartDateRange(); }},
59684
59696
  { Name:"InfoLine", ClassName:"ChartInfoLine", Create:function() { return new ChartInfoLine(); }},
59697
+ { Name:"TrendAngle", ClassName:"ChartTrendAngle", Create:function() { return new ChartTrendAngle(); }}
59685
59698
  ];
59686
59699
 
59687
59700
  IChartDrawPicture.MapIonFont=new Map(
@@ -59846,6 +59859,103 @@ function ChartDrawPictureLine()
59846
59859
  }
59847
59860
  }
59848
59861
 
59862
+ //趋势线角度
59863
+ function ChartTrendAngle()
59864
+ {
59865
+ this.newMethod=ChartDrawPictureLine; //派生
59866
+ this.newMethod();
59867
+ delete this.newMethod;
59868
+
59869
+ this.ClassName='ChartTrendAngle';
59870
+ this.AngleLineLength=100;
59871
+ this.AngleLineDash=[3,3];
59872
+ this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
59873
+ this.Super_SetOption=this.SetOption; //父类函数
59874
+
59875
+ this.SetOption=function(option)
59876
+ {
59877
+ if (this.Super_SetOption) this.Super_SetOption(option);
59878
+ if (option)
59879
+ {
59880
+ if (IFrameSplitOperator.IsNumber(option.AngleLineLength)) this.AngleLineLength=option.AngleLineLength;
59881
+ if (option.Font) this.Font=option.Font;
59882
+ if (option.AngleLineDash) this.AngleLineDash=option.AngleLineDash;
59883
+ }
59884
+ }
59885
+
59886
+ this.Draw=function()
59887
+ {
59888
+ this.LinePoint=[];
59889
+ if (this.IsFrameMinSize()) return;
59890
+ if (!this.IsShow) return;
59891
+
59892
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:true, IsCheckY:false} );
59893
+ if (!drawPoint) return;
59894
+ if (drawPoint.length!=2) return;
59895
+
59896
+ this.ClipFrame();
59897
+
59898
+ var ptStart=drawPoint[0];
59899
+ var ptEnd=drawPoint[1];
59900
+
59901
+ this.SetLineWidth();
59902
+ this.Canvas.strokeStyle=this.LineColor;
59903
+ this.Canvas.beginPath();
59904
+ this.Canvas.moveTo(ptStart.X,ptStart.Y);
59905
+ this.Canvas.lineTo(ptEnd.X,ptEnd.Y);
59906
+ this.Canvas.stroke();
59907
+ this.RestoreLineWidth();
59908
+
59909
+ this.DrawAngle(ptStart, ptEnd);
59910
+
59911
+ var line={Start:ptStart, End:ptEnd};
59912
+ this.LinePoint.push(line);
59913
+
59914
+ this.DrawPoint(drawPoint); //画点
59915
+ this.Canvas.restore();
59916
+ }
59917
+
59918
+ this.DrawAngle=function(ptStart, ptEnd)
59919
+ {
59920
+ var pixelRatio=GetDevicePixelRatio();
59921
+ var angle=this.CalculateAngle(ptStart.X, ptStart.Y, ptEnd.X, ptEnd.Y); //角度
59922
+ var lineLength=this.AngleLineLength*pixelRatio; //角度线长度
59923
+ var ptRight={ X:ptStart.X+lineLength, Y:ptStart.Y };
59924
+
59925
+ if (this.AngleLineDash) this.Canvas.setLineDash(this.AngleLineDash); //画虚线
59926
+
59927
+ this.Canvas.lineWidth=1*GetDevicePixelRatio();
59928
+ this.Canvas.beginPath();
59929
+ this.Canvas.moveTo(ToFixedPoint(ptStart.X),ToFixedPoint(ptStart.Y));
59930
+ this.Canvas.lineTo(ToFixedPoint(ptRight.X),ToFixedPoint(ptRight.Y));
59931
+ this.Canvas.stroke();
59932
+
59933
+ this.Canvas.beginPath();
59934
+ if (angle<=180)
59935
+ {
59936
+ this.Canvas.arc(ptStart.X,ToFixedPoint(ptStart.Y),lineLength,0,(Math.PI / 180)*(360-angle), true);
59937
+ var text=`${angle.toFixed(0)}°`;
59938
+ }
59939
+ else
59940
+ {
59941
+ this.Canvas.arc(ptStart.X,ToFixedPoint(ptStart.Y),lineLength,0,(Math.PI / 180)*(360-angle), false);
59942
+ var text=`${(angle-360).toFixed(0)}°`;
59943
+ }
59944
+
59945
+ this.Canvas.stroke();
59946
+
59947
+ this.Canvas.textAlign="left";
59948
+ this.Canvas.textBaseline="middle";
59949
+ this.Canvas.font=this.Font;
59950
+ this.Canvas.fillStyle=this.LineColor;
59951
+
59952
+ if (this.AngleLineDash) this.Canvas.setLineDash([]);
59953
+
59954
+
59955
+ this.Canvas.fillText(text,ptRight.X+5,ptRight.Y);
59956
+ }
59957
+ }
59958
+
59849
59959
  //画图工具-涂鸦线段 Y轴关联数值, X轴不关联
59850
59960
  function ChartDrawGraffitiLine()
59851
59961
  {
@@ -72125,7 +72235,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72125
72235
  this.SourceDataLimit=new Map(); //每个周期缓存数据最大个数 key=周期 value=最大个数
72126
72236
  this.CtrlMoveStep=5; //Ctrl+(Left/Right) 移动数据个数
72127
72237
 
72128
- this.CustomShow=null; //首先显示的K线的起始日期 { Date:日期 PageSize:}
72238
+ this.CustomShow=null; //首先显示的K线的起始日期 { Date:日期, Time:时间, PageSize:}
72129
72239
  this.ZoomType=0; //缩放模式 0=最右边固定缩放, 1=十字光标两边缩放
72130
72240
  this.IsZoomLockRight=false;
72131
72241
  this.KLineSize=null; //{ DataWidth:, }
@@ -72711,47 +72821,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72711
72821
  var hisData=this.ChartOperator_Temp_GetHistroyData();
72712
72822
  if (!hisData) return; //数据还没有到达
72713
72823
 
72714
- var index=null;
72715
- if (ChartData.IsDayPeriod(this.Period,true))
72716
- {
72717
- for(var i=0;i<hisData.Data.length;++i)
72718
- {
72719
- var item=hisData.Data[i];
72720
- if (item.Date>=obj.Date)
72721
- {
72722
- index=i;
72723
- break;
72724
- }
72725
- }
72726
- }
72727
- else if (ChartData.IsMinutePeriod(this.Period,true))
72728
- {
72729
- let findTime=obj.Time;
72730
- if (IFrameSplitOperator.IsPlusNumber(findTime))
72731
- {
72732
- for(var i=0;i<hisData.Data.length;++i)
72733
- {
72734
- var item=hisData.Data[i];
72735
- if (item.Date>obj.Date || (item.Date==obj.Date && item.Time>=findTime))
72736
- {
72737
- index=i;
72738
- break;
72739
- }
72740
- }
72741
- }
72742
- else //只有日期
72743
- {
72744
- for(var i=0;i<hisData.Data.length;++i)
72745
- {
72746
- var item=hisData.Data[i];
72747
- if (item.Date>=obj.Date)
72748
- {
72749
- index=i;
72750
- break;
72751
- }
72752
- }
72753
- }
72754
- }
72824
+ var index=this.ChartOperator_GetIndex_ByDateTime(hisData, obj, this.Period, 0);
72755
72825
 
72756
72826
  if (index===null)
72757
72827
  {
@@ -72871,6 +72941,63 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72871
72941
  this.UpdatePointByCursorIndex(); //更新十字光标位子
72872
72942
  }
72873
72943
 
72944
+ //定位K线的索引
72945
+ //searchType 0模糊匹配 1=精确匹配
72946
+ this.ChartOperator_GetIndex_ByDateTime=function(hisData, dateTime, period, searchType)
72947
+ {
72948
+ if (!hisData) return null; //数据还没有到达
72949
+ if (!IFrameSplitOperator.IsNonEmptyArray(hisData.Data)) return null;
72950
+ if (!IFrameSplitOperator.IsPlusNumber(dateTime.Date) || dateTime.Date<19810101) return null;
72951
+
72952
+ if (ChartData.IsDayPeriod(period, true))
72953
+ {
72954
+ for(var i=0;i<hisData.Data.length;++i)
72955
+ {
72956
+ var item=hisData.Data[i];
72957
+ if (searchType==1)
72958
+ {
72959
+ if (item.Date==dateTime.Date) return i;
72960
+ }
72961
+ else
72962
+ {
72963
+ if (item.Date>=dateTime.Date) return i;
72964
+ }
72965
+ }
72966
+
72967
+ return null;
72968
+ }
72969
+
72970
+ if (ChartData.IsMinutePeriod(period,true) || ChartData.IsMilliSecondPeriod(period))
72971
+ {
72972
+ var findTime=null;
72973
+ if (IFrameSplitOperator.IsNumber(dateTime.Time)) findTime=dateTime.Time;
72974
+ for(var i=0;i<hisData.Data.length;++i)
72975
+ {
72976
+ var item=hisData.Data[i];
72977
+ if (searchType==1) //精确匹配
72978
+ {
72979
+ if (findTime==null) return null;
72980
+ if (item.Date==dateTime.Date && item.Time==findTime) return i;
72981
+ }
72982
+ else
72983
+ {
72984
+ if (findTime==null) //只有日期
72985
+ {
72986
+ if (item.Date>=dateTime.Date) return i;
72987
+ }
72988
+ else
72989
+ {
72990
+ if (item.Date>dateTime.Date || (item.Date==dateTime.Date && item.Time>=findTime)) return i;
72991
+ }
72992
+ }
72993
+ }
72994
+
72995
+ return null;
72996
+ }
72997
+
72998
+ return null;
72999
+ }
73000
+
72874
73001
  this.OnWheel=function(e)
72875
73002
  {
72876
73003
  JSConsole.Chart.Log('[KLineChartContainer::OnWheel]',e);
@@ -73489,37 +73616,21 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
73489
73616
 
73490
73617
  this.SetCustomShow=function(customShow,hisData)
73491
73618
  {
73492
- if (!customShow || !customShow.Date || customShow.Date<19910101) return;
73493
-
73494
- var firstDate=customShow.Date;
73495
- var index=null;
73496
- for(var i =0;i<hisData.Data.length;++i)
73497
- {
73498
- var item=hisData.Data[i];
73499
- if (item.Date>=firstDate)
73500
- {
73501
- index=i;
73502
- break;
73503
- }
73504
- }
73619
+ var index=this.ChartOperator_GetIndex_ByDateTime(hisData,customShow, this.Period, 0);
73505
73620
  if (index===null)
73506
73621
  {
73507
- JSConsole.Chart.Log(`[KLineChartContainer::SetCustomShow] Can't find first date=${firstDate}`);
73622
+ JSConsole.Chart.Log("[KLineChartContainer::SetCustomShow] Can't find index by customShow=",customShow);
73508
73623
  return;
73509
73624
  }
73510
73625
 
73511
- var count=hisData.Data.length-index;
73512
- if (customShow.PageSize>0) count=customShow.PageSize;
73513
-
73514
- var customShowCount=count;
73515
- var pageSize=this.GetMaxMinPageSize();
73516
- if (count>pageSize.Max) customShowCount=pageSize.Max;
73517
- else if (count<pageSize.Min) customShowCount=pageSize.Min;
73518
-
73519
- for(var i in this.Frame.SubFrame)
73626
+ if (IFrameSplitOperator.IsPlusNumber(customShow.PageSize)) //调整一屏显示个数 否则使用默认的
73520
73627
  {
73521
- var item =this.Frame.SubFrame[i].Frame;
73522
- item.XPointCount=customShowCount;
73628
+ var showCount=customShow.PageSize;
73629
+ for(var i=0;i<this.Frame.SubFrame.length; ++i)
73630
+ {
73631
+ var item =this.Frame.SubFrame[i].Frame;
73632
+ item.XPointCount=showCount;
73633
+ }
73523
73634
  }
73524
73635
 
73525
73636
  this.ChartPaint[0].Data.DataOffset=index;
@@ -75667,15 +75778,40 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
75667
75778
  }
75668
75779
  }
75669
75780
 
75781
+ this.SetFrameAttribute=function(windowIndex, attr)
75782
+ {
75783
+ if (!window || !this.Frame.SubFrame[windowIndex] || !this.Frame.SubFrame[windowIndex].Frame) return;
75784
+ if (!attr) return;
75785
+
75786
+ var frame=this.Frame.SubFrame[windowIndex].Frame;
75787
+
75788
+ if (!IFrameSplitOperator.IsUndefined(attr.HorizontalReserved)) frame.HorizontalReserved=attr.HorizontalReserved; //Y轴上下预留
75789
+ if (IFrameSplitOperator.IsNumber(attr.TitleHeight)) frame.ChartBorder.TitleHeight=attr.TitleHeight; //指标标题高度
75790
+ }
75791
+
75792
+ this.ResetFrameAttribute=function(windowIndex)
75793
+ {
75794
+ if (!window || !this.Frame.SubFrame[windowIndex] || !this.Frame.SubFrame[windowIndex].Frame) return;
75795
+ var frame=this.Frame.SubFrame[windowIndex].Frame;
75796
+
75797
+ frame.HorizontalReserved=null;
75798
+ }
75799
+
75800
+
75670
75801
  //切换成 脚本指标
75671
75802
  this.ChangeScriptIndex=function(windowIndex,indexData,option)
75672
75803
  {
75673
75804
  this.DeleteIndexPaint(windowIndex, true);
75674
75805
  this.WindowIndex[windowIndex]=new ScriptIndex(indexData.Name,indexData.Script,indexData.Args,indexData); //脚本执行
75806
+ this.ResetFrameAttribute(windowIndex);
75675
75807
 
75676
75808
  if (option)
75677
75809
  {
75678
- if (option.Window) this.SetFrameToolbar(windowIndex,option.Window);
75810
+ if (option.Window)
75811
+ {
75812
+ this.SetFrameToolbar(windowIndex,option.Window);
75813
+ this.SetFrameAttribute(windowIndex,option.Window); //窗口属性
75814
+ }
75679
75815
  }
75680
75816
 
75681
75817
  this.OnChangeIndexEvent(windowIndex, { ID:indexData.ID, Name:indexData.Name, FunctionName:"ChangeScriptIndex" });
@@ -75722,14 +75858,19 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
75722
75858
  //使用API挂接指标数据 API:{ Name:指标名字, Script:指标脚本可以为空, Args:参数可以为空, Url:指标执行地址 }
75723
75859
  var apiItem=indexData.API;
75724
75860
  this.WindowIndex[windowIndex]=new APIScriptIndex(apiItem.Name,apiItem.Script,apiItem.Args,indexData);
75861
+ this.ResetFrameAttribute(windowIndex);
75725
75862
 
75726
75863
  this.OnChangeIndexEvent(windowIndex, { ID:indexData.ID, Name:indexData.Name, FunctionName:"ChangeAPIIndex" });
75727
75864
 
75728
75865
  if (indexData)
75729
75866
  {
75730
- if (indexData.Window) this.SetFrameToolbar(windowIndex,indexData.Window);
75867
+ if (indexData.Window)
75868
+ {
75869
+ this.SetFrameToolbar(windowIndex,indexData.Window);
75870
+ this.SetFrameAttribute(windowIndex,indexData.Window); //窗口属性
75871
+ }
75731
75872
  }
75732
-
75873
+
75733
75874
  this.Frame.ClearUpDonwFrameYData({ Index:windowIndex });
75734
75875
  var bindData=this.ChartPaint[0].Data;
75735
75876
  this.BindIndexData(windowIndex,bindData); //执行脚本
@@ -76807,6 +76948,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
76807
76948
  }
76808
76949
  }
76809
76950
  }
76951
+
76952
+ if (option.CustomShow && IFrameSplitOperator.IsPlusNumber(option.CustomShow.Date))
76953
+ {
76954
+ var item=option.CustomShow;
76955
+ this.CustomShow={ Date:item.Date };
76956
+ if (IFrameSplitOperator.IsNumber(item.Time)) this.CustomShow.Time=item.Time;
76957
+ if (IFrameSplitOperator.IsPlusNumber(item.PageSize)) this.CustomShow.PageSize=item.PageSize;
76958
+ }
76810
76959
  }
76811
76960
 
76812
76961
  this.ReloadChartDrawPicture();
@@ -135965,6 +136114,7 @@ function JSDialogDrawTool()
135965
136114
  { Title: '线段', ClassName: 'hqchart_drawtool icon-draw_line', Type:0, Data:{ ID:"线段" } },
135966
136115
  { Title: '线段信息', ClassName: 'hqchart_drawtool icon-infoline', Type:0, Data:{ ID:"InfoLine" } },
135967
136116
  { Title: '射线', ClassName: 'hqchart_drawtool icon-draw_rays', Type:0, Data:{ ID:"射线" } },
136117
+ { Title: "趋势线角度", ClassName:"hqchart_drawtool icon-qushixianjiaodu", Type:0, Data:{ ID:"TrendAngle" }},
135968
136118
  { Title: '标价线', ClassName: 'hqchart_drawtool icon-price_line', Type:0, Data:{ ID:"标价线" } },
135969
136119
  { Title: '垂直线', ClassName: 'hqchart_drawtool icon-vertical_line', Type:0, Data:{ ID:"垂直线" } },
135970
136120
  { Title: '十字线', ClassName: 'hqchart_drawtool icon-tubiao_shizixian', Type:0, Data:{ ID:"十字线" } },
@@ -136080,7 +136230,7 @@ function JSDialogDrawTool()
136080
136230
  this.LineColorIndex=0;
136081
136231
  this.RandomLineColor=["rgb(255,69,0)", "rgb(0,191,255)", "rgb(255,0,255)", "rgb(255,105,180)"];
136082
136232
  this.LineWidth=1*GetDevicePixelRatio();
136083
- this.ColumnCount=4;
136233
+ this.ColumnCount=5
136084
136234
 
136085
136235
  this.DragTitle=null;
136086
136236
 
@@ -136849,7 +136999,8 @@ function JSDialogModifyDraw()
136849
136999
  this.DivDialog.style.left = left + 'px'
136850
137000
  this.DivDialog.style.top = top + 'px'
136851
137001
 
136852
- if(e.preventDefault) e.preventDefault();
137002
+ if (e.preventDefault) e.preventDefault();
137003
+ if (e.stopPropagation) e.stopPropagation();
136853
137004
  }
136854
137005
 
136855
137006
  this.DocOnMouseUpTitle=function(e)
@@ -136985,7 +137136,7 @@ function HQChartScriptWorker()
136985
137136
 
136986
137137
 
136987
137138
 
136988
- var HQCHART_VERSION="1.1.13345";
137139
+ var HQCHART_VERSION="1.1.13354";
136989
137140
 
136990
137141
  function PrintHQChartVersion()
136991
137142
  {