精华内容
下载资源
问答
  • Delphi的TCanvas类可以实现各种复杂的图形输出功能,基于近期项目的需求,利用它实现了一个很炫的动态折线(模拟了资源管理器CPU使用率的折线),可以直观地展现出数值的实时变化情况。 这段代码里边有几个...

    Delphi的TCanvas类可以实现各种复杂的图形输出功能,基于近期项目的需求,利用它实现了一个很炫的动态折线图(模拟了资源管理器中CPU使用率的折线图),可以直观地展现出数值的实时变化情况。

    这段代码里边有几个核心的地方:

    • 首先是为了缓解刷新时画布闪烁,利用了双缓冲的原理;
    • 其次结合队列,保证了数据的顺序压入;
    • 还有就是一些简单的数组算法。

    最终的效果如下:

    单元代码如下:

    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls,Contnrs;
     
    const
      {* 网格间隔 *}
      GridSpace = 12;
      {* 移动步长(能够被间隔整除) *}
      MoveStep = 3;
      {* Y轴最大值(最大刻度) *}
      MaxY = 100;
     
    type
      TForm1 = class(TForm)
        Timer1: TTimer;
        Button1: TButton;
        Image1: TImage;
        procedure DrawPL(Shower:TImage);
        procedure Timer1Timer(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
    var
      Form1: TForm1;
      {* 网格竖线X坐标数组 *}
      GridXPArr: array of Integer;
      {* 点坐标数组 *}
      PointLst: array of TPoint;
      {* 数值队列 *}
      YPQueue: TQueue;
      {* 数值指针 *}
      PYValue: PInteger;
      {* 网格偏移量 *}
      X: Word;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      YValue:Integer;
    begin
      Randomize;
      YValue := Random(100);
      //新Y坐标点按顺序压入队列
      New(PYValue);
      PYValue^ := YValue;
      YPQueue.Push(PYValue);
    end;
     
    procedure TForm1.DrawPL(Shower:TImage);
    var
      Bit: TBitmap;
      i: Integer;
      PW,PH: Integer;
      YValue:Integer;
    begin
      //偏移量计算
      Inc(X);
      if X = GridSpace div MoveStep then
      X := 0;
      //初始化画布(双缓冲)
      Bit := TBitmap.Create;
      try
        PW := Shower.Width;
        PH := Shower.Height;
        Bit.Width := PW;
        Bit.Height := PH;
        //初始化网格竖线X坐标数组长度为宽/间隔+1
        SetLength(GridXPArr,PW div GridSpace + 1);
        with Bit.Canvas do
        begin
          Brush.Color := clBlack;
          Brush.Style := bsSolid;
          Rectangle(0,0,PW,PH);
          Pen.Color := $00408000;
          //画网格,根据偏移量实现动态效果
          for i := 0 to PW div GridSpace + 1 do
          begin
            GridXPArr[i] := GridSpace * i - X * MoveStep;
            MoveTo(GridXPArr[i],0);
            LineTo(GridXPArr[i],PH);
          end;
          for i := 0 to PH div GridSpace do
          begin
            MoveTo(0,GridSpace * i);
            LineTo(PW,GridSpace * i);
          end;
          //画折线
          Pen.Color := clLime;
          YValue := 0;
          //如果队列中有新的Y坐标点,则输出
          if YPQueue.Count > 0 then
          begin
            PYValue := YPQueue.Pop;
            YValue := PYValue^;
            Dispose(PYValue);
          end;
          //画笔移动到起点位置
          MoveTo(0,PH);
          //每执行一次函数,Y坐标向前移动一位,并连线各个点
          for i := 0 to Length(PointLst) - 2 do
          begin
            PointLst[i].Y := PointLst[i + 1].Y;
            LineTo(PointLst[i+1].X,PointLst[i+1].Y);
          end;
          //按比例更新最后一位坐标点
          PointLst[Length(PointLst)-1].X := PW;
          PointLst[Length(PointLst)-1].Y := PH - (YValue  * PH div MaxY);
          //打印信息(可根据需要调整显示位置和内容)
          Brush.Style:=bsClear;
          Font.Color:=clYellow;
          TextOut(10,10,'数值:'+inttostr(YValue));
        end;
        Shower.Canvas.Draw(0,0,Bit);
      finally
        Bit.Free;
      end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      i:Integer;
    begin
      YPQueue := TQueue.Create;
      //初始化坐标点个数为宽/步长+1
      SetLength(PointLst,Image1.Width div MoveStep + 1);
      //初始化坐标点为X轴基线位置
      for i := 0 to Length(PointLst) - 1 do
      begin
        PointLst[i].X := i*MoveStep;
        PointLst[i].Y := Image1.Height;
      end;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      YPQueue.Free;
    end;
     
    procedure TForm1.FormShow(Sender: TObject);
    begin
      DrawPL(Image1);
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      DrawPL(Image1);
    end;
     
    end.

     

    转载于:https://www.cnblogs.com/chenmfly/p/4818328.html

    展开全文
  • Delphi的TCanvas类可以实现各种复杂的图形输出功能,基于近期项目的需求,利用它实现了一个很炫的动态折线(模拟了资源管理器CPU使用率的折线),可以直观地展现出数值的实时变化情况。 这段代码里边有几个...

    Delphi的TCanvas类可以实现各种复杂的图形输出功能,基于近期项目的需求,利用它实现了一个很炫的动态折线图(模拟了资源管理器中CPU使用率的折线图),可以直观地展现出数值的实时变化情况。

    这段代码里边有几个核心的地方:

    1.首先是为了缓解刷新时画布闪烁,利用了双缓冲的原理;

    2.其次结合队列,保证了数据的顺序压入;

    3.还有就是一些简单的数组算法。

    最终的效果如下:

    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls,Contnrs;
     
    const
      {* 网格间隔 *}
      GridSpace = 12;
      {* 移动步长(能够被间隔整除) *}
      MoveStep = 3;
      {* Y轴最大值(最大刻度) *}
      MaxY = 100;
     
    type
      TForm1 = class(TForm)
        Timer1: TTimer;
        Button1: TButton;
        Image1: TImage;
        procedure DrawPL(Shower:TImage);
        procedure Timer1Timer(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
    var
      Form1: TForm1;
      {* 网格竖线X坐标数组 *}
      GridXPArr: array of Integer;
      {* 点坐标数组 *}
      PointLst: array of TPoint;
      {* 数值队列 *}
      YPQueue: TQueue;
      {* 数值指针 *}
      PYValue: PInteger;
      {* 网格偏移量 *}
      X: Word;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      YValue:Integer;
    begin
      Randomize;
      YValue := Random(100);
      //新Y坐标点按顺序压入队列
      New(PYValue);
      PYValue^ := YValue;
      YPQueue.Push(PYValue);
    end;
     
    procedure TForm1.DrawPL(Shower:TImage);
    var
      Bit: TBitmap;
      i: Integer;
      PW,PH: Integer;
      YValue:Integer;
    begin
      //偏移量计算
      Inc(X);
      if X = GridSpace div MoveStep then
      X := 0;
      //初始化画布(双缓冲)
      Bit := TBitmap.Create;
      try
        PW := Shower.Width;
        PH := Shower.Height;
        Bit.Width := PW;
        Bit.Height := PH;
        //初始化网格竖线X坐标数组长度为宽/间隔+1
        SetLength(GridXPArr,PW div GridSpace + 1);
        with Bit.Canvas do
        begin
          Brush.Color := clBlack;
          Brush.Style := bsSolid;
          Rectangle(0,0,PW,PH);
          Pen.Color := $00408000;
          //画网格,根据偏移量实现动态效果
          for i := 0 to PW div GridSpace + 1 do
          begin
            GridXPArr[i] := GridSpace * i - X * MoveStep;
            MoveTo(GridXPArr[i],0);
            LineTo(GridXPArr[i],PH);
          end;
          for i := 0 to PH div GridSpace do
          begin
            MoveTo(0,GridSpace * i);
            LineTo(PW,GridSpace * i);
          end;
          //画折线
          Pen.Color := clLime;
          YValue := 0;
          //如果队列中有新的Y坐标点,则输出
          if YPQueue.Count > 0 then
          begin
            PYValue := YPQueue.Pop;
            YValue := PYValue^;
            Dispose(PYValue);
          end;
          //画笔移动到起点位置
          MoveTo(0,PH);
          //每执行一次函数,Y坐标向前移动一位,并连线各个点
          for i := 0 to Length(PointLst) - 2 do
          begin
            PointLst[i].Y := PointLst[i + 1].Y;
            LineTo(PointLst[i+1].X,PointLst[i+1].Y);
          end;
          //按比例更新最后一位坐标点
          PointLst[Length(PointLst)-1].X := PW;
          PointLst[Length(PointLst)-1].Y := PH - (YValue  * PH div MaxY);
          //打印信息(可根据需要调整显示位置和内容)
          Brush.Style:=bsClear;
          Font.Color:=clYellow;
          TextOut(10,10,'数值:'+inttostr(YValue));
        end;
        Shower.Canvas.Draw(0,0,Bit);
      finally
        Bit.Free;
      end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      i:Integer;
    begin
      YPQueue := TQueue.Create;
      //初始化坐标点个数为宽/步长+1
      SetLength(PointLst,Image1.Width div MoveStep + 1);
      //初始化坐标点为X轴基线位置
      for i := 0 to Length(PointLst) - 1 do
      begin
        PointLst[i].X := i*MoveStep;
        PointLst[i].Y := Image1.Height;
      end;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      YPQueue.Free;
    end;
     
    procedure TForm1.FormShow(Sender: TObject);
    begin
      DrawPL(Image1);
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      DrawPL(Image1);
    end;
     
    end.

    展开全文
  • 接下来面临的问题: 1) CPU 内存 使用情况的图示化动态显示 2) 该种动态图示化信息添加到 listwidget中的方法。

     接下来面临的问题:

    1) CPU 内存 使用情况的图示化动态显示

    2) 该种动态图示化信息添加到 listwidget中的方法。

    目录

    1.chart模块的使用

    目录

    1.chart模块的使用

    1.1 采用控件graphic view

    1.2  提升Graphic view为类QChartView

    1.3 工程文件和源码文件增加相关配置

    1.4 代码实战

       原理分析

    1) 首先构造最小的数据,比如Series(即上图右侧的Series数据),实例

    2)创建数据的容器QChart的实例,即上图右侧部分

    3) 将数据和view进行关联

    官网资料


     

    1.chart模块的使用

    1.1 采用控件graphic view

    在designer的界面窗体中,拖入一个 graphic view,作为chart的显示控件。

     

    1.2  提升Graphic view为类QChartView

    右击 graphic view控件,选择 “提升为”,将QGraphicsView 提升为QChartView,这样后续可以使用QChartView中的类和方法对 graphic view控件进行操作了。

    此处的名称 QChartView 是固定的,不要随便填写。

    实际上qchartview.h这个文件在QT的安装目录,例如我的在此目录下(前提你在安装QT时选择了QChart 模块):

    1.3 工程文件和源码文件增加相关配置

     1)在工程的pro配置文件中,增加,以便工程可以引用相关的模块及头文件,否则会出现qchartview.h找不到的编译错误。

       QT += core gui

        QT += charts

    2) 在窗体对应的头文件中(例如我的窗体为cfg.ui,对应的头文件为ui_cfg.h)增加

    #include <QtCharts>
    using namespace QtCharts;

    由于刚才已经将graphic view提升为QChartView,因而在窗体的类定义中会使用类QChartView,不包含上面两行会报错。

    graphicsView = new QChartView(page);  //提升后graphicsView的实例有类QChartView实现了

    本质上,要保证工程中的源文件在引用QChartView的实例时要找到相关的接口声明,因而上述两行不一定放到ui_cfg.h中。例如

    在我的工程中,我放到cfg.h的头文件中,

    而在cfg.cpp中,其头文件的顺序是这样的,这就保证了ui_cfg.h中队QChartView引用时,可以找到相关类及接口

    1.4 代码实战

       原理分析

       在进行代码之前,先了解相关类之间的关系。QT使用了经典的model-view模式,而在Qchart中亦是如此。两个主要类的关系为

    其中QchartView负责显示,而Qchart则负责数据部分,具体的数据由坐标系、点坐标等构成。

    了解基本的结构,那我们

    1) 首先构造最小的数据,比如Series(即上图右侧的Series数据),实例

      QLineSeries* line1 = new QLineSeries();// 创建线的实例
    
      line1->append(1,2);  //添加数据。3个点的坐标
      line1->append(2,4);
      line1->append(3,2);

    2)创建数据的容器QChart的实例,即上图右侧部分

      

    QChart* c = new QChart();  //创建数据model的实例
    c->addSeries(line1);    // 添加具体的数据,此处添加一根线的数据

    3) 将数据和view进行关联

      ui->graphicsView->setChart(c);

    graphicsView在上面通过designer进行设计,并进行类的提升后已经创建。此处将model Qchart中的数据给它,View就可以显示出需要的数据了。

      效果图:

     

    资料搜索

    1)  官网资料 C:\Qt\Qt5.13.2\Examples\Qt-5.13.2\charts\dynamicspline  参考例子

    2) https://blog.csdn.net/LKZYnih/article/details/81915436  介绍了初级应用

     

    官网资料

    https://doc.qt.io/qt-5/qtcharts-module.html  介绍了各个chart类和基本的配置

    https://doc.qt.io/qt-5/qtcharts-overview.html  各种chart的使用示例

    https://doc.qt.io/qt-5/qchart.html     QChart类的定义。

    https://doc.qt.io/qt-5/qchartview.html  QChartView类的定义

    展开全文
  • 第二个问题,即CPU 内存等的利用率实时变化在listwidget 导航栏里也同步显示。

    目录

    自定义 listwidget item的显示

    自定义item的设计

    自定义item的引用


    第二个问题,即CPU 内存等的利用率实时变化在listwidget 导航栏里也同步显示。

    自定义 listwidget item的显示

    list widget中每个显示的条目为一个item。

    自定义item的设计

    显示的item为Widget。据此可以在designer 的窗体设计中增加一个Widget,并在其中增加所需的其他控件。

    示例:新增三个控件,其中QWidget属于容器类控件。

     

    设计完毕后,进行工程构建。

    自定义item的引用

      设计两个类 :Item 和Widget。widget为上述设计的窗体。

      

    QListWidgetItem *item=new QListWidgetItem;  //新创建一个item
    
    item->setSizeHint(QSize(10,100));
    ui->listWidget->addItem(item);  //将item添加到listWidget上。
    ui->listWidget->setItemWidget(item,ui->cpucompitem); //将刚才创建的三个控件的Widget关联到list的item上

     自定义item作为导航存在的问题

      使用自定义item后,在点击 自定义的item后,右侧stack widget没有切换。将自定义item中的graphic view 提升为QChartView即可以正常切换了。

    显示效果

     

    展开全文
  • CpuUsage(显示cpu利用动态曲线),获取CPU利用率,像任务管理器一样显示CPU利用率的曲线
  • 类似于windows的资源管理器,可动态显示,见2-1. 2-1 top命令 res表示内存占用。 该视图会自动刷新,按"P"按照cpu使用率倒排 按 "M"按照内存占用倒排。 2-2 top命令开头的几行 top...
  • 就像 Windows 的任务管理器 CPU 监控的动态曲线那样,曲线从左向右移动。 先分析一下这个问题: 接收数据:与设备有关,不同的设备接收数据的方式不一样,有的用串口,有的用 TCP,UPD 等,不过这不是本章的...
  • QChart绘制动态曲线

    2019-09-05 20:16:51
    基于Qt5.9,实现了Windows任务管理器性能CPU使用记录类似的动态曲线 基于Qt5.9,实现了Windows任务管理器性能CPU使用记录类似的动态曲线
  • 项目中难免遇到将数据绑定至图表,这时候就可以使用echarts控件。博主近期在项目中,需要将服务器CPU和内存使用率做成一张折线,要用到绑定动态数据,于是在网上查阅后发现echarts...实现的效果和任务管理器性能中...
  • 安卓动态曲线的绘制

    千次阅读 2015-11-20 17:58:24
    我们在安卓开发中,有时...但有时,我们需要动态绘制一些曲线,就像我们打开电脑的任务管理器,里面有一个CPU使用记录的动态变化的带网格的曲线,对于这一类的曲线绘制,安卓SDK自带的绘图模块貌似就不那么好用了。
  • Process Explorer 是一款免费的增强型任务管理器,是最好的进程管理器. 它能让使用者了解看不到的在后台执行的处理程序,可以使用它方便地管理你的程序进程. 能监视,挂起,重启,强行终止任何程序,包括系统级别的不允许...
  • Process Explorer 是一款免费的增强型任务管理器,是最好的进程管理器. 它能让使用者了解看不到的在后台执行的处理程序,可以使用它方便地管理你的程序进程. 能监视,挂起,重启,强行终止任何程序,包括系统级别的不允许...
  • Linux系统上的进程管理命令:查看进程: ps...pstree:树状的形式显示进程的创建关系top:和windows上的任务管理器相似 ,动态显示进程信息+系统资源(进程、CPU、内存、交换分区)的使用情况统计信息按f,进入: 
  • 反馈调度器动态调节CPU的处理速度,实现对CPU利用率的有效控制,从而提供了一种有效的能量管理机制。通过仿真实验与常规动态电压调整方法、传统方法以及理想情况进行比较,验证了该反馈调度方法的有效性。
  • 图书管理系统毕业设计+源码-java

    千次下载 热门讨论 2012-05-06 13:45:09
    第二节 设计任务   第三节 JAVA介绍 JAVA是INTERNET开发的一个强大的工具,它是一个C++的简化版本。JAVA是一门"简单的、面向对象的、强类型的、编译型的、结构无关的、多线程(multi-threaded)的、垃圾自动收集的...
  • 进程管理经典软件MFC

    2010-12-03 13:45:48
    Svchost.exe:这个进程要着重说明一下,有不少朋友都有这种错觉:若是在“任务管理器”中看到多个Svchost.exe在运行,就觉得是有病毒了。其实并不一定,系统启动的时候,Svchost.exe将检查注册表中的位置来创建需要...
  • 第4章 使用SQL*Plus和Oracle企业管理器 73 4.1 启动SQL*Plus会话 73 4.1.1 设置环境 73 4.1.2 从命令行启动SQL*Plus会话 74 4.1.3 用CONNECT命令进行连接 75 4.1.4 用/NOLOG的无连接SQL*Plus会话 76 ...
  • 6.11 ASM磁盘组的动态扩展能力 329 6.12 快速镜像同步(Fast Mirror Resync) 331 6.13 ASM的透明多版本支持 333 6.14 ASM的命令行管理工具asmcmd 334 6.15 通过EM管理ASM 334 6.16 ACFS(ASM Cluster File...
  • 任务管理页面按钮展示优化; 日志管理页面增加任务描述信息; JSON构建前端form表单不能缓存数据问题修复; HIVE JSON构建增加头尾选项参数; 备注: 2.1.1版本不建议升级,数据源信息加密方式变更会导致之前已加密...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    任务1 UML概述任务2 UML静态建模任务3 UML动态建模 任务1 UML概述 UML的概念 UML的发展 UML的主要内容 UML与OO(面向对象) UML的概念 UML的概念 UML Unified Modeling Language 统一建模语言 统一建模语言是...
  • hera系统本身严格的遵从主从架构模式,由主节点充当着任务调度触发与任务分发,从节点作为具体的任务执行.架构如下: hera 在 2.4 版本以上也支持了emr 集群,即允许任务执行在阿里云、亚马逊的 emr 机器之上...
  • 实例099 使用函数指针制作菜单管理器 实例100 使用指针实现数据交换 实例101 使用指针实现整数排序 实例102 指向结构体变量的指针 实例103 用指针实现逆序存放数组元素值 实例104 输出二维数组的有关值 实例...
  • 实例099 使用函数指针制作菜单管理器 实例100 使用指针实现数据交换 实例101 使用指针实现整数排序 实例102 指向结构体变量的指针 实例103 用指针实现逆序存放数组元素值 实例104 输出二维数组的有关值 实例...
  • 参数管理:对系统动态配置常用参数。 通知公告:系统通知公告信息发布维护。 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 登录日志:系统登录日志记录查询包含登录异常。 在线用户:当前...
  • 在线客房预订系统源码

    热门讨论 2011-09-02 16:12:16
    图片管理模块:无限分类,支持相册模式,支持远程图片上传,支持本地图片上传,支持GD模块生成缩略。 用户管理模块:用户分组管理,可以挂接任何mysql数据库的用户数据表,例如IPB,DISCUZ.. 栏目管理模块:可以添加...
  • 实例011 歌词编辑 31 实例012 自制录音机 34 实例013 实时在线广播 38 实例014 播放MIDI和WAV文件 40 实例015 利用sndPlaySound()函数播放音频文件 41 实例016 利用mciExecute()函数播放WAV文件 42 实例017 ...
  • 实例011 歌词编辑 31 实例012 自制录音机 34 实例013 实时在线广播 38 实例014 播放MIDI和WAV文件 40 实例015 利用sndPlaySound()函数播放音频文件 41 实例016 利用mciExecute()函数播放WAV文件 42 实例017 ...
  • 参数管理:对系统动态配置常用参数。 通知公告:系统通知公告信息发布维护。 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 登录日志:系统登录日志记录查询包含登录异常。 在线用户:当前...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 134
精华内容 53
关键字:

任务管理器cpu动态图