笨办法,先保存用着

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  7. Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, DBAccess, Vcl.Menus,
  8. System.Actions, Vcl.ActnList, Vcl.StdCtrls, Vcl.OleCtrls, SHDocVw, Vcl.AppEvnts,
  9. Uni;
  10.  
  11. type
  12. TForm1 = class(TForm)
  13. WebBrowser1: TWebBrowser;
  14. btnShowEcharts: TButton;
  15. ApplicationEvents1: TApplicationEvents;
  16. procedure btnShowEchartsClick(Sender: TObject);
  17. procedure WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);
  18. procedure ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
  19. private
  20. { Private declarations }
  21. public
  22. { Public declarations }
  23. end;
  24.  
  25. var
  26. Form1: TForm1;
  27.  
  28. implementation
  29.  
  30. uses
  31. DataModule;
  32.  
  33. {$R *.dfm}
  34. var
  35. PathStr: string;
  36.  
  37. //屏蔽右键
  38. procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
  39. begin
  40. with Msg do
  41. begin
  42. if not IsChild(WebBrowser1.Handle, hwnd) then
  43. Exit;
  44. Handled := (message = WM_RBUTTONDOWN) or (message = WM_RBUTTONUP) or (message = WM_CONTEXTMENU);
  45. end;
  46. end;
  47.  
  48. //生成并显示图表
  49. procedure TForm1.btnShowEchartsClick(Sender: TObject);
  50. var
  51. str, strSql: TStringList;
  52. strSPMC, strSL: string;
  53. qryDT: TUniQuery;
  54. i: Integer;
  55. begin
  56. str := TStringList.Create;
  57. strSql := TStringList.Create;
  58. qryDT := TUniQuery.Create(Self);
  59.  
  60. try
  61. if DataModule2.UniConnection1.Connected then
  62. qryDT.Connection := DataModule2.UniConnection1;
  63. strSql.Add('SELECT s.SPMC,SUM(SL)SL FROM QDDBDMX AS q ');
  64. strSql.Add('LEFT JOIN SHANGPIN AS s ON s.SPDM=q.SPDM ');
  65. strSql.Add('WHERE s.BYZD8=''2019''');
  66. strSql.Add('GROUP BY s.SPMC');
  67.  
  68. with qryDT do
  69. begin
  70. Close;
  71. SQL.text := strSql.Text;
  72. Open;
  73. end;
  74.  
  75. qryDT.First;
  76.  
  77. for i := to qryDT.RecordCount - do
  78. begin
  79. strSPMC := strSPMC + '"' + qryDT.FieldByName('SPMC').Value + '"';
  80. strSL := strSL + IntToStr(qryDT.FieldByName('SL').Value);
  81. if i = qryDT.RecordCount - then
  82. begin
  83. strSPMC := strSPMC;
  84. strSL := strSL;
  85. end
  86. else
  87. begin
  88. strSPMC := strSPMC + ',';
  89. strSL := strSL + ',';
  90. end;
  91. qryDT.Next;
  92. end;
  93.  
  94. str.add('<!DOCTYPE html> ');
  95. str.add('<html> ');
  96. str.add('<head> ');
  97. str.add(' <meta http-equiv="content-type" content="text/html;charset=gb2312"> ');
  98. str.add(' <title>ECharts</title> ');
  99. str.add(' <!-- 引入 echarts.js --> ');
  100. str.add(' <script src="https://cdn.bootcss.com/echarts/4.1.0-release/echarts.min.js"></script> ');
  101. str.add('</head> ');
  102. str.add('<body> ');
  103. str.add(' <!-- 为ECharts准备一个具备大小(宽高)的Dom --> ');
  104. str.add(' <div id="main" style="width: 1000px;height:400px;"></div> ');
  105. str.add(' <script type="text/javascript"> ');
  106. str.add(' // 基于准备好的dom,初始化echarts实例 ');
  107. str.add(' var myChart = echarts.init(document.getElementById(''main'')); ');
  108. str.add(' ');
  109. str.add(' // 指定图表的配置项和数据 ');
  110. str.add(' var option = { ');
  111. str.add(' title: { ');
  112. str.add(' text: ''类别销售对比''');
  113. str.add(' }, ');
  114. str.add(' tooltip: {}, ');
  115. str.add(' legend: { ');
  116. str.add(' data:[''销量'']');
  117. str.add(' }, ');
  118. str.add(' xAxis: { ');
  119. str.add(' data: [' + strSPMC + '] ');
  120. str.add(' }, ');
  121. str.add(' yAxis: {}, ');
  122. str.add(' series: [{ ');
  123. str.add(' name: ''品类'', ');
  124. str.add(' type: ''bar'', ');
  125. str.add(' data: [' + strSL + '] ');
  126. str.add(' }] ');
  127. str.add(' }; ');
  128. str.add(' ');
  129. str.add(' // 使用刚指定的配置项和数据显示图表。 ');
  130. str.add(' myChart.setOption(option); ');
  131. str.add(' </script> ');
  132. str.add('</body> ');
  133. str.add('</html>');
  134.  
  135. //生成并保存网页
  136. PathStr := ExtractFilePath(Application.ExeName) + 'index.html';
  137. str.SaveToFile(PathStr);
  138. //加载本地网页
  139. WebBrowser1.Navigate(ExtractFileDir(ParamStr()) + '\index.html');
  140. finally
  141. str.Free;
  142. strSql.Free;
  143. qryDT.Free;
  144. end;
  145. end;
  146.  
  147. //网页加载完毕
  148. procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);
  149. begin
  150. //隐藏滚动条
  151. WebBrowser1.oleobject.Document.body.Scroll := 'no';
  152. WebBrowser1.oleobject.Document.documentElement.style.overflow := 'hidden';
  153. //删除文件
  154. DeleteFile(PathStr);
  155. end;
  156.  
  157. end.

效果

Delphi窗体显示Echarts图表的更多相关文章

  1. ECharts图表tooltip显示时超出canvas图层解决方法

    我们在做ECharts图表的时候可能会遇到tooltip显示时超出了canvas图层范围,并且被其它z-index较高的div容器遮盖,这是悬浮展示信息就看不全,我们根据官网文档的配置项查询发现con ...

  2. ECharts图表插件(4.x版本)使用(一、关系图force节点显示为自定义图像/图片,带分类选择)

    导读 ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safar ...

  3. echarts之bootstrap选项卡不能显示其他标签echarts图表

    在echarts跟bootstrap选项卡整合的时候,默认第一个选中选项卡可以正常加载echarts图表,但是切换其他选项的时候不能渲染出其他选项卡echarts图表. 解决方法: 在js中添加代码: ...

  4. C#WinForm应用程序中嵌入ECharts图表

    C#WinForm应用程序中嵌入ECharts图表 程序运行效果: 下载ECharts: 官网下载ECharts :http://echarts.baidu.com/download.html 或者直 ...

  5. echarts图表第一个案例

    1.action中获取到数据 @Override public String execute() throws Exception { List<Student> find = echar ...

  6. echarts图表标签(axisLabel)折行

    在项目中遇到了一个echarts图表标签过长需折行的需求,so引出这篇总结,啦啦啦有帮助就多多支持啦,撒花撒花撒花~~~~ 在此不对echarts其他用法做解释,详细见echarts文档(点击前往) ...

  7. ECharts图表中级入门之formatter:夜谈关于ECharts图表内的数据格式化方法

    来源于:http://www.ithao123.cn/content-3751220.html 格式化之所以存在,主要是因为我们想把一些不够人性化的内容通过某种处理让其变得人性化,便于用户更好地理解内 ...

  8. Echarts图表控件使用总结2(Line,Bar)—问题篇

    Echarts图表控件使用总结1(Line,Bar):http://www.cnblogs.com/hanyinglong/p/Echarts.html 1.前言 a.前两天简单写了一篇在MVC中如何 ...

  9. Delphi窗体创建释放过程及单元文件小结(转)

    Delphi窗体创建释放过程及单元文件小结 Delphi中的窗体,有模式窗体与非模式窗体两种.两种窗体的调用方式不同,模式窗体使用ShowModal显示,非模式窗体使用Show显示.当显示模式窗体的时 ...

随机推荐

  1. chromerdriver下载地址:xpath_help

    chrome下载地址 http://npm.taobao.org/mirrors/chromedriver xpath_help https://blog.csdn.net/Cayny/article ...

  2. linux下Flask框架搭建简单网页

    开始安装FLASK需要创建一个虚拟环境,虚拟环境可以不干扰正在使用的系统环境,避免影响,并且也不需要完全的root权限,更加安全可靠. 搭建环境 Python3.4 进入到microblog目录下创建 ...

  3. 金蝶KIS&K3助记码SQL数据库批量刷新

    金蝶KIS&K3助记码SQL数据库批量刷新 用的次数不多,就没有写入存储过程或者触发里面了,可以自行实现. 第一步选择对应账套的数据库,执行下面的命令,这个是一个函数. go if exist ...

  4. A tuple is defined as a function

    In James Munkres "Topology", the concept for a tuple, which can be \(m\)-tuple, \(\omega\) ...

  5. Python_paramiko模块

    paramiko模块安装:pip3 install paramiko paramiko模块(模拟SSH),是基于SSH(网络安全协议)用于连接远程服务器并执行相关操作. ssh: 基于口令的安全验证 ...

  6. call、apply、bind

    ***call,apply,bind 替换this 何时: 只要this不是想要的都可用call,apply,bind替换 选择: call/apply: *调用*函数,在调用时,*临时*替换函数中的 ...

  7. bootstrap弹窗、弹出层、modal

    bootstrap弹窗.弹出层.modal 引入bootstrap的js文件    如下div代码 <div class="modal fade" id="myMo ...

  8. Mybatis内批量插入Oracle

    <insert id="insertManagerInfoBatch" parameterType="java.util.List"> <se ...

  9. rem实现移动端自适应页面

    一.把px转换成rem方案 1.cssrem插件 2.css预处理器 3.rem-unit插件 4.px2rem插件 rem就是相对于根元素的font-size来做计算,设置好根结点字体大小,子节点用 ...

  10. YII2 用 in查询的时候出现无结果, 删除某些值后查询有结果 提前sort数组即可

    YII2 用 in查询的时候出现无结果, 删除某些值后查询有结果, 在数组前用了一个 array_merge 合并了2个数组. 排查发现是 数组中键值没有挨着从0开始 另外没有从小到大, 没观察室哪个 ...