当前位置:首页 > 技术分析 > 正文内容

使用Delphi开发echarts图表

ruisui884个月前 (03-09)技术分析15

采用DeWeb可以实现用Delphi开发echarts图表

DeWeb : Delphi开发者的Web解决方案!

DeWeb是一个可以直接将Delphi程序快速转换为网页应用的工具! 使用DeWeb, 开发者不需要学习HTML、JavaScript、Java、PHP、ASP、C#等新知识,用Delphi搞定一切。 DeWeb开发的网页支持所有客户端,包括手机、平板等。

网址:
https://gitee.com/xamh/dewebsdk

采用DeWeb可以非常方便开发echarts图表应用。

还不会DeWeb开发的朋友请参考相关文档

1 打开一个基本DeWeb应用

比如自带的hello例程

2 创建echarts控件

拖放一个TMemo控件,设置其HelpKeyword为echarts

3 配置echarts控件

(1)在echarts官网打开拟开发的图表例程,如

https://echarts.apache.org/examples/zh/editor.html?c=pie-nest

效果图如下:


(2)复制该网页左侧的JS代码,注意:只复制option后{....}及其中的内容

(3)打开Notepad++, 新建一个文件,粘贴进去, 再全选,然后复制;

这一步骤主要是保持原代码的换行符。直接复制到TMemo控件中会丢失,导致错误。

(4)打开Delphi中TMemo控件的Lines, 粘贴进去

即内容为

{
  tooltip: {
    trigger: 'item',
    formatter: '{a} 
{b}: {c} ({d}%)' }, legend: { data: [ 'Direct', 'Marketing', 'Search Engine', 'Email', 'Union Ads', 'Video Ads', 'Baidu', 'Google', 'Bing', 'Others' ] }, series: [ { name: 'Access From', type: 'pie', selectedMode: 'single', radius: [0, '30%'], label: { position: 'inner', fontSize: 14 }, labelLine: { show: false }, data: [ { value: 1548, name: 'Search Engine' }, { value: 775, name: 'Direct' }, { value: 679, name: 'Marketing', selected: true } ] }, { name: 'Access From', type: 'pie', radius: ['45%', '60%'], labelLine: { length: 30 }, label: { formatter: '{a|{a}}{abg|}\n{hr|}\n {b|{b}:}{c} {per|{d}%} ', backgroundColor: '#F6F8FC', borderColor: '#8C8D8E', borderWidth: 1, borderRadius: 4, rich: { a: { color: '#6E7079', lineHeight: 22, align: 'center' }, hr: { borderColor: '#8C8D8E', width: '100%', borderWidth: 1, height: 0 }, b: { color: '#4C5058', fontSize: 14, fontWeight: 'bold', lineHeight: 33 }, per: { color: '#fff', backgroundColor: '#4C5058', padding: [3, 4], borderRadius: 4 } } }, data: [ { value: 1048, name: 'Baidu' }, { value: 335, name: 'Direct' }, { value: 310, name: 'Email' }, { value: 251, name: 'Google' }, { value: 234, name: 'Union Ads' }, { value: 147, name: 'Bing' }, { value: 135, name: 'Video Ads' }, { value: 102, name: 'Others' } ] } ] }

在窗体的OnMouseDown事件中写入

dwEcharts(Memo1);

编译运行,即可得到


(5)更新数据。

执行到上一步,效果出来了,但会发现无法更新数据。

原因是代码中把数据(data部分)写成固定的了

先需要把TMemo的内容改成以下。注意"data:XXX"的变化

{
  tooltip: {
    trigger: 'item',
    formatter: '{a} 
{b}: {c} ({d}%)' }, legend: { data: [ 'Direct', 'Marketing', 'Search Engine', 'Email', 'Union Ads', 'Video Ads', 'Baidu', 'Google', 'Bing', 'Others' ] }, series: [ { name: 'Access From', type: 'pie', selectedMode: 'single', radius: [0, '30%'], label: { position: 'inner', fontSize: 14 }, labelLine: { show: false }, data: this.value0 }, { name: 'Access From', type: 'pie', radius: ['45%', '60%'], labelLine: { length: 30 }, label: { formatter: '{a|{a}}{abg|}\n{hr|}\n {b|{b}:}{c} {per|{d}%} ', backgroundColor: '#F6F8FC', borderColor: '#8C8D8E', borderWidth: 1, borderRadius: 4, rich: { a: { color: '#6E7079', lineHeight: 22, align: 'center' }, hr: { borderColor: '#8C8D8E', width: '100%', borderWidth: 1, height: 0 }, b: { color: '#4C5058', fontSize: 14, fontWeight: 'bold', lineHeight: 33 }, per: { color: '#fff', backgroundColor: '#4C5058', padding: [3, 4], borderRadius: 4 } } }, data: this.value1 } ] }

对应

this.value0应为
[
    { value: 1548, name: 'Search Engine' },
    { value: 775, name: 'Direct' },
    { value: 679, name: 'Marketing', selected: true }
]

this.value1应为
[
    { value: 1048, name: 'Baidu' },
    { value: 335, name: 'Direct' },
    { value: 310, name: 'Email' },
    { value: 251, name: 'Google' },
    { value: 234, name: 'Union Ads' },
    { value: 147, name: 'Bing' },
    { value: 135, name: 'Video Ads' },
    { value: 102, name: 'Others' }
]

在Delphi中的事件中组类似的字符串就可以了

具体做法是增加一个Timer, 时间设置为3000,代码如下:

procedure TForm1.Timer1Timer(Sender: TObject);
var
    sV0,sV1     : String;
    sJS         : String;
begin
    //value0
    //[
    //    { value: 1548, name: 'Search Engine' },
    //    { value: 775, name: 'Direct' },
    //    { value: 679, name: 'Marketing', selected: true }
    //]

    //value1
    //[
    //    { value: 1048, name: 'Baidu' },
    //    { value: 335, name: 'Direct' },
    //    { value: 310, name: 'Email' },
    //    { value: 251, name: 'Google' },
    //    { value: 234, name: 'Union Ads' },
    //    { value: 147, name: 'Bing' },
    //    { value: 135, name: 'Video Ads' },
    //    { value: 102, name: 'Others' }
    //]
    //

    //
    Randomize;

    //Get value0 string
    sV0 := 'this.value0=['
        +'{ value: %d, name: ''Search Engine'' },'
        +'{ value: %d, name: ''Direct'' },'
        +'{ value: %d, name: ''Marketing'', selected: true }'
    +'];';
    sV0 := Format(sV0,[Random(1500),Random(1000),Random(1000)]);

    //Get value1 string
    sV1 := 'this.value1=['
        +'{ value: %d, name: ''Baidu'' },'
        +'{ value: %d, name: ''Direct'' },'
        +'{ value: %d, name: ''Email'' },'
        +'{ value: %d, name: ''Google'' },'
        +'{ value: %d, name: ''Union Ads'' },'
        +'{ value: %d, name: ''Bing'' },'
        +'{ value: %d, name: ''Video Ads'' },'
        +'{ value: %d, name: ''Others'' }'
    +'];';
    sV1 := Format(sV1,[Random(1500),Random(1000),Random(1000),Random(1000),Random(1000),Random(1000),Random(1000),Random(1000)]);

    //
    dwRunJS(sV0+sV1,self);

    dwEcharts(Memo1);

end;

这样echarts图表就可以动态更新了。

关注我, 学习更多Delphi知识!

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2638.html

分享给朋友:

“使用Delphi开发echarts图表” 的相关文章

总结了Vue3的七种组件通信方式,别再说不会组件通信了

写在前面本篇文章是全部采用的<script setup>这种组合式API写法,相对于选项式来说,组合式API这种写法更加自由,具体可以参考Vue文档对两种方式的描述。本篇文章将介绍如下七种组件通信方式:propsemitv-modelrefsprovide/injecteventBusv...

Vue.js 组件通信的 3 大妙招

在 Vue.js 中,组件化是其核心概念之一,允许你将复杂的界面拆分成多个独立的、可复用的组件。在构建大型应用时,如何高效地在组件之间传递数据和触发事件是非常重要的。Vue.js 提供了多种方式来处理组件间的通信,下面是最常用的 3 种方式:1.父子组件通信:通过 Props 和 Events在 V...

30 个纯 HTML5 实现的游戏

浏览器和 JavaScript 的功能逐年不断的变强变大。曾几何时,任何类型的游戏都需要Flash。但随着 HTML5 发展,HTML5 + WebGL 游戏式就慢慢占领着这个舞台。以下是30款流行的游戏,它们可以在所有现代浏览器中运行,并且只使用web技术构建。1. HexGL地址:http://...

Vue2的16种传参通信方式

前言先直入主题列出有哪些传参方式,下面再通过事例一一讲解。props(父传子)$emit与v-on (子传父)EventBus (兄弟传参).sync与update: (父子双向)v-model (父子双向)ref$children与$parent$attrs与$listeners (爷孙双向)pr...

Vue中路由router的基本使用

??本文开始我们来给大家介绍在Vue中非常重要的一个内容,就是路由Router什么是路由后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特...

Alpine.js 如何火起来的!比 React/Vue 如何?

大家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!前言前端 JavaScript 框架的创新是这个时代最伟大的技术文化现象之一。Alpine 发音为 /??lpa?n/,中文为阿尔卑斯山、...