`

Delphi实现下载进程的动态显示

 
阅读更多

Delphi实现下载进程的动态显示


  许多知名的下载软件中都有下载管理器,用一个TListView来显示下载的进程,你可以清楚的看到已经下载了多少,还有多少内容仍需下载,这样的控件,Delphi自身并未提供,但我们可以在TListView的基础之上加入进度条控件(TProgressBar)来实现这一功能,这样就能既能满足我们的实际需求,又不用“牺牲”口袋里白花花的银子,还能增加我们对控件嵌套的认识,一箭三雕,何乐而不为呢?

  到底该怎么做呢?让我想想……好了让我们先从TListView的ViewStyle属性开始吧,这个属性我们常用,把TListView做为一个表格来显示各种数据时,我们常常把这个属性设置成vsReport,设置之后,最左边的列(Column)包含一个小的图标和数据,从第二列开始就是显示一个个字段的数据,这是我们最常见的TListView的样子,每天一打开Windows的资源管理器,我们就能看到它。(如图一)


  打开Delphi,新建一个工程,在自动生成的Form上,放置一个TListView控件,在它的Columns属性中定义两列,第一列放置数据项(Item),第二列用来存放Progress.(如图二)


    添加Item的代码如下:

  procedure TForm1.AddItemButtonClick(Sender: TObject);
const
  pbColumnIndex = 1;
  pbMax = 100;
var
  li : TListItem;
  lv : TListView;
  pb : TProgressBar;
  pbRect : TRect;
begin
  lv := ListViewEx1;
  //建立一个新的ListItem
  li := lv.Items.Add;
  li.Caption := ’Item ’ + IntToStr(lv.Items.Count);
  //建立一个ProgressBar,置入TListView的第二列中
  pb := TProgressBar.Create(nil);
  pb.Parent := lv;
  li.Data := pb;
  pbRect := li.DisplayRect(drBounds);
  pbRect.Left := pbRect.Left +
  lv.Columns[-1 + pbColumnIndex].Width;
  pbRect.Right := pbRect.Left +
  lv.Columns[pbColumnIndex].Width;
  pb.BoundsRect := pbRect;
end; //添加ItemButton事件

  上面的代码可以实现这样的功能:按下按钮之后,一个Progressbar被建立,一个对Progressbar的引用被加进ListItem的Data属性,最后,Progressbar被放置在由pbColumnIndex属性指定的列中。

  当想要将一个项(Item)从TListView中删除,你必须先判断添加进去的Progressbar的内存占用是否已经被释放,如果已经完成,就继续。

  删除Item的代码如下:

  procedure TForm1.RemoveItemButtonClick(Sender: TObject);
var
  lv : TListView;
  li : TListItem;
  i, idx : integer;
  pb : TProgressBar;
begin
  lv := ListViewEx1;
  li := lv.Selected;
  if li <> nil then
  begin
   idx := li.Index;
   TProgressBar(li.Data).Free;//先释放TProgressBar
   lv.Items.Delete(idx);
   //把行向上移动
   for i := idx to -1 + lv.Items.Count do
   begin
    li := lv.Items.Item[i];
    pb := TProgressBar(li.Data);
    pb.Top := pb.Top - (pb.BoundsRect.Bottom - pb.BoundsRect.Top);
   end;
  end;
end; //删除ItemButton事件

  完成之后,我们来测试一下,我们拖一个TTimer控件,然后在它的OnTime事件中填入下面的代码,模拟一下在一个真实的环境下,这个被我们美化过的TListView控件会有如何精彩表现,也让大伙一起体会一把写程序的小小成就感吧。(如图三)


  代码如下:

  procedure TForm1.Timer1Timer(Sender: TObject);
var
  idx : integer;
  pb: TProgressbar;
  lv : TListView;
begin
  lv := ListViewEx1;
  if lv.Items.Count = 0 then Exit;
  //随机生成一个数据项
  //根据生成的数据来控制TProgressBar的长度
  idx := Random(lv.Items.Count);
  pb := TProgressBar(lv.Items[idx].Data);
  if pb.Position < pb.Max then
   pb.StepIt
  else
   pb.Position := 0;
end;//Timer事件

  就是这样的简单,任何有名的软件都是由这样的一个个小知识点构成,只要细心体会知名软件的优势与长处,模仿然后改进说不定你能做出比它们都棒的软件!

  开发环境: WindowsXP SP2+Delphi7

分享到:
评论

相关推荐

    Delphi获取系统进程端口.rar

    Delphi获取系统进程端口,可检测发现TCP/UDP端口数量,并在网格控件中枚举显示出这些端口的进程信息,包括:本地、远程IP、连接状态、进程ID/可执行文件名等。程序实现主要通过iphlpapi.dll动态库的相关函数和接口。

    DELPHI专题--程序应用

    用Delphi编写DLL实现动态改变分辨率 在delphi中使用flash控件 在Delphi中运用QuickReport实现多栏列印 控制INI文件几法 转让控制权 得到执行程序的目录 打开已注册文件 得到Windows用户名和序列号 关闭外部...

    DELPHI专题文档-程序应用

    用Delphi编写DLL实现动态改变分辨率 在delphi中使用flash控件 在Delphi中运用QuickReport实现多栏列印 控制INI文件几法 转让控制权 得到执行程序的目录 打开已注册文件 得到Windows用户名和序列号 关闭外部...

    Delphi深度编程技术

    2.2.1 利用WM_COPYDATA消息实现进程间通讯 2.2.2 利用内存映射文件实现进程间通讯 2.3 TThread对象 2.3.1 线程的创建 2.3.2 线程的挂起和恢复 2.3.3 线程的终止 2.3.4 与VCL同步 2.4 线程同步 2.4.1 临界区...

    《Delphi 深度编程及其项目应用开发》PDF书及代码

    1.5 消息处理 1.6 消息过滤 第2章 进程与线程 2.1 进程与线程 2.1.1 进程概述 2.1.2 进程的直接创建 2.1.3 列举系统打开的进程 2.1.4 线程概述 2.2 进程间通讯(IPC) 2.2.1 利用WM_COPYDATA消息实现进程间通讯 ...

    DELPHI技巧集(集合各种开发源码)

    64 M_dbgrid.htm Delphi如何实现在一个Dbgrid中显示多数据库 2K 65 Makevcl.htm DELPHI构件制作方法 11K 66 Message.htm DELPHI中的消息处理机制 9K 67 More_page_find.htm Delphi中多库关联查询 3K 68 More...

    Delphi5开发人员指南

    8.1 TImage:Delphi的图像显示 167 8.2 存储图像 168 8.3 使用TCanvas的属性 169 8.3.1 画笔 170 8.3.2 使用TCanvas.Pixels属性 175 8.3.3 使用刷子 175 8.3.4 使用字体 180 8.3.5 使用CopyMode属性 181 8.3.6 其他...

    Delphi 5编程实例与技巧

    14.1 在DLL中实现对象 270 14.2 接口 274 14.2.1 对象的生存期 277 14.2.2 IUnknown 279 14.2.3 全局唯一标志符(GUID) 281 14.2.4 注册表 281 14.2.5 多个接口问题 281 14.2.6 Variant类型 284 14.2.7 TComObject ...

    Delphi开发范例宝典目录

    实例191 在DELPHI中控制Word 246 实例192 带日志的程序 247 实例193 获取窗口文本 248 实例194 判断文件是否正在被使用 250 实例195 提取文件中的图标资源 251 实例196 在程序中调用.HLP文件 253 实例...

    DELPHI 5编程实例与技巧

    本书共分三部分、16章,主要介绍Delphi 5集成开发环境,对象Pascal语言、组件、通用编程技术、动态链接库、多线程、多媒体编程、数据库编程、网络编程和Windows API编程等。 目 录 前言 第一部分 Delphi编程基础 ...

    Delphi 6集成开发环境

    第1 章 Delphi 集成开发环境..........1 1.1 Delphi 6.0 简介............................................ 1 1.2 Delphi 可视化开发环境简介...................... 2 1.2.1 对象编辑器(Object Inspector)....3 ...

    delphi 开发经验技巧宝典源码

    0237 如何实现一个应用程序只能打开一个进程 158 7.4 其他数据处理技术 159 0238 对计算结果四舍五入 159 0239 获取一个字符的ASCII值 159 0240 判断字符串中是否有文字符 160 0241 如何从字符串中提取...

    delphi 开发经验技巧宝典源码06

    0237 如何实现一个应用程序只能打开一个进程 158 7.4 其他数据处理技术 159 0238 对计算结果四舍五入 159 0239 获取一个字符的ASCII值 159 0240 判断字符串中是否有文字符 160 0241 如何从字符串中提取...

    Delphi 7应用编程150例

    第1章通过21个实例演示如何利用Delphi来美化应用程序的界面,主要内容包括透明窗体、多边形形状的窗体、能够显示图标的菜单、分割窗体、动态设置窗体光标、动画效果窗体等。通过本章的学习,可以轻松实现...

    动态加载EXE和DLL

    程序中加载了一个DLL文件,但生成的EXE在脱离了DLL文件后仍然可以 单独使用,这是动态加载DLL技术。即:调用资源中的DLL。 此技术的好处:EXE可以使用DLL中的函数,但不会...文件后,在Delphi中按F9重新编译运行即可。

    vc++ 开发实例源码包

    主要在MzfHipsDlg中,程序分析进程数据、驱动数据、注册表数据从而实现主动防御。 超级下载 不过不是c++源码 1:综合FTP下载和HTTP(网络蚂蚁)(多线程). 2:FTP下载支持多个站点同时下载一个文件(同时支持断点续传). 3...

    多个Powerbuild 调用API函数实例

    改变窗口的显示风格 -- ChangeWindow 使窗口的图片透明化 -- TransWindow 改变窗口的关闭形式 -- CloseStyle ... 使用Delphi开发动态链接库 -- SetScreen 使用Visual Basic开发ActiveX动态链接库 -- CPUInfo

    vc++ 应用源码包_1

    利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序流程。 tabcontrol_demo.zip tabcontrol_src.zip 自定义的标签控件对话框...

Global site tag (gtag.js) - Google Analytics