`
xfei6868
  • 浏览: 70739 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

要在读取文件的时候给个进度条

阅读更多

    “要在读取文件的时候添加一个进度条”,在老板看到我做的东西有麽样了以后,一个新的任务就来了。添加进度条的理由是让人在导入的时候能感觉到导入的进度,这样就不容易让使用者感觉不到什么时候完成,什么时候没有完成。
    想想这个功能的确很有用,恩!这个要做,做了感觉上就不一样了。哈哈!这时候突然发现自己的文件读取的地方就根本不在一个单独的类里,于是要把文件的读取专门的提取出来,这样才能让结构更清晰,更合理些。
    经过自己的一整天的努力,终于写成了这样一个文件的读取单元。



unit Unit_DXF_FileRead;

interface

uses
    SysUtils, StrUtils, ComCtrls;

type
    TDXF_FileRead = class
    private
        //文件
        F: Text;
        ReadedFileSize: Integer;
        wordLn1, wordLn2: String;
        Progress: TProgressBar;
        //获取本次读取的dxf 的组码
        function GetCode(): String;
        //获取本次读取的 dxf 的内容
        function GetCont(): String;
        //获取文件的大小
        function GetFileSize(const FileName: String): LongInt;

    public
        //参数分别是  filePath : 传入的文件全路径,  ImportProgressBar: 界面显示进度条。
        constructor Create(filePath: String; ImportProgressBar: TProgressBar);
        destructor Destroy; override;

        //每次读取两行,分别为dxf的组码和内容
        procedure ReadCodeAndCont();
        
        property ReadCode: String read GetCode;
        property ReadCont: String read GetCont;

    end;

implementation

constructor TDXF_FileRead.Create(filePath: String; ImportProgressBar: TProgressBar);
begin
    Progress := ImportProgressBar;
    Progress.Max := GetFileSize(filePath);

    AssignFile(F, filePath);
    Reset(F);

    if (Progress.Max > 20) then
    begin
        Progress.Step := Progress.Max div 20;
    end;
    ReadedFileSize := 0;
end;

destructor TDXF_FileRead.Destroy();
begin

    CloseFile(F);
    Progress := nil;
    inherited Destroy;
end;

function TDXF_FileRead.GetFileSize(const FileName: String): LongInt;
var
    SearchRec: TSearchRec;
begin
    if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then
        Result := SearchRec.Size
    else
        Result := -1;
end;

procedure TDXF_FileRead.ReadCodeAndCont();
begin
    Readln(F, wordLn1);
    Readln(F, wordLn2);
    Inc(ReadedFileSize, Length(wordln1));
    Inc(ReadedFileSize, Length(wordLn2));
    
    if ((ReadedFileSize div Progress.Step) > 0) then
    begin
        Progress.StepIt();
        Dec(ReadedFileSize, Progress.Step);
    end;

    if (Eof(F)) then
    begin
        wordLn1 := '0';
        wordLn2 := 'EOF';
    end;
end;

    //private
function TDXF_FileRead.GetCode(): String;
begin
    Result := Trim(wordLn1);
end;

function TDXF_FileRead.GetCont(): String;
begin
    Result := Trim(wordLn2);
end;

end.



   诚实而言,GetFileSize函数的实现和关于进度条步进策略都是在网上找到的,感觉都是很好的东西。前两天“师兄”(没有师傅 先这样称呼前来人)看我的这段代码的时候说,你这样做的进度条不精确的,应该在ReadCodeAndCont里用Progress.Position
也就是把

    Inc(ReadedFileSize, Length(wordln1));
    Inc(ReadedFileSize, Length(wordLn2));
    
    if ((ReadedFileSize div Progress.Step) > 0) then
    begin
        Progress.StepIt();
        Dec(ReadedFileSize, Progress.Step);
    end;


换成:

Progress.Position := Progress.Position + Length(wordln1);
Progress.Position := Progress.Position + Length(wordln2);



    他说这样实现的进度条,是非常精确的。想象也是,但是我改过后,看看效果也差不多啊!我决定改回去了,因为我发现速度慢了不少,自己通过比较发现原来4秒钟完成,现在变成了十几秒!我想了一下,在界面上显示的进度条总共才20个格子,而我设定了20步,效果上已经是足够了。我问他们在做导入protel的时候也是这样做的吗?他说是的。我就暗暗想:“难怪这么慢,而且动不动就假死!”。但是他们不会因为我的速度快而去改的,不知道为什么他们老是说不要改,不要改,出问题也是的,再通过一个什么高明的函数,在有问题的地方调用这个函数就是了,整个软件中不知道有多少这样高明的补丁函数了。但是软件还处在没有成熟的阶段
    delphi也是一个很好的面相对象的语言,可惜可以参考的权威的东西实在太少。看到网上说delphi调用类的Destroy的时候,不让直接用.Destroy,而是让用.free()或用FreeAndNil函数。我这样用了,被“师兄”要求改为.Destroy,很不解,但是后来有些明白了,我们的实现里面居然Destroy 都是非override的,虽然都调用了父类的Destroy 。不解中......

分享到:
评论

相关推荐

    apache-jmeter-5.6.3 带插件

    apache-jmeter-5.6.3 带插件

    第六章:Python tkinter 库入门与进阶:构建精美用户界面

    内置源程序供读者参考学习

    Java毕业设计-SpringBoot+Vue的校园台球厅人员与设备管理系统(附源码、数据库、教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    MATLAB设计的图像去雾设计(GUI界面设计).zip

    MATLAB设计的图像去雾设计(GUI界面设计)

    2023年江苏省计算机二级考试VB试题分类汇总及答案.pdf

    2023年江苏省计算机二级考试VB试题分类汇总及答案.pdf

    基于SpringBoot+Vue的线上买菜系统(Java毕业设计,包括源码、数据库、教程).zip

    Java 项目,仅供学习参考。 Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    基于SSM+JSP的美食推荐管理系统+数据库(Java毕业设计,包括源码,教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4

    2023年微型计算机原理试题库及答案.pdf

    2023年微型计算机原理试题库及答案.pdf

    联邦基金有效利率历史数据.xlsx

    美联储在2024年9月18日宣布将其调50个基点,降至4.75%至5.00%之间的水平。这是美联储自2020年3月以来首次降息,也是自2023年7月将利率水平调升至历史高位后的首次下调,标志着货币政策由紧缩周期向宽松周期的转向 数据名称:美国联邦基金有效利率、目标利率历史数据 样本数量:12667条 数据年份:1990.1-2024.9 数据说明:包括有效利率、目标利率 更新日期:2024年9月

    2023年专升本计算机基础习题答案.pdf

    2023年专升本计算机基础习题答案.pdf

    springboot基于SpringBoot的CSGO赛事管理系统 LW PPT.zip

    ava项目springboot基于springboot的课程设计,包含源码+数据库+毕业论文

    Java毕业设计-SpringBoot+Vue的校园疫情防控系统(附源码、数据库、教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    基于SpringBoot+Vue的医患档案管理系统(Java毕业设计,包括源码、数据库、教程).zip

    Java 项目,仅供学习参考。 Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    基于SpringBoot+Vue的在线考试(Java毕业设计,包括源码、数据库、教程).zip

    Java 项目,仅供学习参考。 Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    【工程项目】MATLAB教室人数统计(GUI框架,定位和分割人脸,计数).zip

    【工程项目】MATLAB教室人数统计(GUI框架,定位和分割人脸,计数)

    2023年山东专升本计算机真题及答案.pdf

    2023年山东专升本计算机真题及答案.pdf

    2023年计算机与通信网络实验报告.pdf

    2023年计算机与通信网络实验报告.pdf

    基于SSM+JSP的固定资产管理系统+数据库(Java毕业设计,包括源码,教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4

    Java毕业设计-SpringBoot+Vue的简历系统(附源码,数据库).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    英飞凌TC264代码-uart

    英飞凌TC264代码-uart

Global site tag (gtag.js) - Google Analytics