四相交错并联同步整流Buck变换器PLECS仿真模型:低压大电流输入12VDC,实现均流输出的动态表现与特性探究。,四相交错并联同步整流Buck变换器PLECS仿真模型:低压大电流输入12VDC,实现单相电流均流输出与性能分析,四相交错并联同步整流Buck变器 PLECS仿真 低压大电流 输入:12VDC 输出:1V 100A 单相电流25A实现均流输出 仿真模型 ,四相交错并联同步整流Buck变换器; PLECS仿真; 低压大电流; 12VDC输入; 1V输出; 100A输出; 均流输出。,基于四相交错并联同步整流技术的Buck变换器:PLECS仿真模型与均流输出分析
2025-11-24 13:57:11 4.24MB
1
Maxwell电机,Maxwell电磁仿真分析与振动分析 1、Maxwell仿真建模基础 2、Maxwell电磁分析仿真理论与分析计算 3、Maxwell电磁模型导入workbench中计算模态及频响 4、电磁力耦合到结构场谐响应分析等 收到电机设计及电磁分析的,也可进行相关内容的沟通和交流;可交流电机设计电磁学理论基础知识以及电磁仿真多案例 Maxwell电机是基于Maxwell电磁理论设计的电机模型,其涉及到的Maxwell电磁仿真分析与振动分析是电机设计中的重要环节。Maxwell电磁仿真分析主要包含几个方面:首先是Maxwell仿真建模基础,这是进行电磁仿真分析的前提和基础,涉及到电机模型的构建,以及模型的参数化定义,确保仿真能够准确反映物理世界中的电磁特性。其次是Maxwell电磁分析仿真理论与分析计算,这部分深入探讨了如何根据Maxwell方程组进行仿真分析,以及如何进行相关的分析计算,以预测电机在实际运行中可能出现的电磁现象和特性。最后是Maxwell电磁模型导入workbench中计算模态及频响,这是将电磁仿真模型导入到通用仿真软件中进行更为复杂的机械振动分析,以及电机对不同频率信号的响应情况。 除了电磁分析,振动分析也是电机设计中不可缺少的一部分。振动分析主要是考察电机在运行过程中产生的振动,以及振动对电机性能的影响。通过振动分析可以识别和分析电机运行中可能出现的不正常振动,找到振动的来源,并通过设计优化减少或消除不良振动,从而提高电机的稳定性和可靠性。 此外,在电磁仿真分析与振动分析的过程中,还涉及到将电磁力耦合到结构场中的谐响应分析。这类分析旨在研究电磁力对电机结构产生的动态响应,即在电机工作频率范围内结构对力的响应情况。通过此类分析,工程师可以预测电机在受到动态电磁力作用时的响应特性,确保电机设计能够满足耐久性与性能要求。 电机设计和电磁分析是一个复杂的工程问题,需要结合电机学理论和仿真计算工具。Maxwell仿真软件是电机设计和电磁分析中常用的工具之一,它能够帮助工程师快速构建电机模型,进行电磁场分析,预测电机的性能指标。通过使用Maxwell仿真软件,可以实现从电机设计的初步概念到详细设计的全过程仿真验证,提高了设计的效率和准确性。 在电机电磁仿真分析与振动分析技术方面,还涉及到了多种案例的研究,每个案例都可能涉及到不同的电机类型、不同的工作环境、不同的性能要求。通过对这些案例的深入研究,工程师能够积累宝贵的经验,提升对电机设计和电磁仿真分析的理解,为未来的设计工作打下坚实的基础。 电机电磁仿真分析与振动分析的内容广泛,不仅包括理论知识的学习,还包括实践技能的掌握。工程师在进行电磁仿真分析时,需要熟悉仿真软件的使用,理解电磁场理论,掌握电机设计的基本原则和方法。同时,还需要关注电磁振动分析的最新进展,应用现代分析技术,如有限元分析(FEA),来解决复杂的工程问题。 电机电磁仿真分析与振动分析不仅是电机设计的核心环节,也是提高电机性能、降低开发成本、缩短研发周期的重要手段。通过这种分析手段,可以在电机制造之前预测和解决可能出现的问题,为制造出性能优良、可靠稳定的电机产品提供保障。 电机电磁仿真分析与振动分析是电机设计领域的重要组成部分,它涉及到电磁学、材料学、力学和计算机科学等多个学科的知识和技术。通过对电机进行仿真分析和振动分析,可以更深入地了解电机的运行状态,为电机的设计和优化提供理论依据和技术支持。电机设计者应当充分利用现代仿真分析工具,结合理论分析和实验验证,不断优化电机的设计,提高电机的整体性能。
2025-11-24 13:43:01 736KB gulp
1
《中国保险业保单登记管理信息平台(第三期)-数据模型和取数口径说明及要求(寿)》文档详细阐述了在中国保险业保单登记管理信息平台第三期建设中,针对人身险业务的数据模型设计和数据提取的具体规定。这份文档的修订历史反映了平台在不断发展和完善的过程,涉及到多个模块的新增、修改和优化。 1. 数据模型:文档中提到的数据模型是保险业务信息化的基础,它包括各种表结构和字段定义,用于存储和管理保险业务数据。例如,保单信息模块经历了多次修订,增加了个人保单信息模块、团体保单信息模块等,这些模块涵盖了保单的基本信息、险种责任项、保单交易记录等多个方面。 2. 取数口径:取数口径是指数据提取的标准和方法,确保不同保险公司提交的数据具有一致性和可比性。例如,健康状况字段由原先的VARCHAR2(5)调整为更宽的类型,可能是因为需要容纳更多的健康状况描述;受益比例字段改为非空,表明该信息必须提供;保单终止原因字段的长度扩大,可能是因为需要记录更复杂的终止原因。 3. 新增模块:随着时间的推移,平台逐步增加了如财务实付信息模块、付费明细表、理赔信息模块、销售信息模块、核保信息模块和客户黑名单信息模块等内容,以满足保险业务多元化的需求。这些模块包含了从佣金信息、理赔详情到核保决策和客户信用管理的全面数据。 4. 表格修订:例如,保单交易表中添加了新的字段如保全受理号码、保全批单号码等,这有助于跟踪保单的变更过程。个人保单表中增加了保单寄送标志,反映了保单交付给客户的情况。而个人险种表则新增了商业分保标志等字段,反映出保险风险的分散策略。 5. 报送规则:文档还详细规定了数据报送的要求,如保单交易表中对于“15-理赔”业务类型的个人保单号码报送规则的修改,这直接影响到理赔流程的规范性。 6. 其他信息:被保险人表中新增的异常告知标志和在职状态代码,反映了对被保险人的风险评估和健康管理的重视。 整体来看,这份文档体现了中国保险业在信息化建设中对数据规范化、精细化管理的追求,以及对客户服务和风险管理的不断提升。通过这样的规范,保险公司能够更好地进行数据分析,提高服务效率,降低风险,并为监管机构提供准确、完整的数据支持。
2025-11-24 11:37:04 3.43MB
1
Abaqus模拟双线盾构隧道:超精细模型展现软化模量与注浆技术,涵盖隧道联络通道综合研究,abaqus双线盾构隧道,含两侧隧道中间联络通道,超精细模型,含软化模量,盾构注浆等等 ,核心关键词:Abaqus; 双线盾构隧道; 两侧隧道; 中间联络通道; 超精细模型; 软化模量; 盾构注浆。,"Abaqus模拟双线盾构隧道工程:超精细模型构建与软化模量盾构注浆技术" 在地下隧道施工领域,双线盾构隧道技术是一项复杂而重要的施工方法,尤其在城市地下空间开发中占据着举足轻重的地位。这项技术涉及双线隧道的建造,即建设两条平行的隧道,并在适当的位置设置联络通道以实现两条隧道之间的互通。在该技术的应用中,Abaqus软件模拟技术的应用为工程提供了强大的计算支持,特别是对于超精细模型的构建和软化模量以及盾构注浆技术的深入研究。 超精细模型的构建是基于Abaqus软件的仿真模拟技术,其目的在于更精确地模拟隧道开挖和施工过程中的地质环境以及结构响应。在双线盾构隧道工程中,隧道周边的土体特性和受力状态极其复杂,超精细模型能够考虑到各种因素,如土体的软化模量变化、注浆压力分布、隧道衬砌和周围土体的相互作用等。 软化模量是指土体在受到加载后,其应力与应变关系出现软化现象的特性。在双线盾构隧道施工过程中,由于土体被扰动,其原有的力学性质会发生变化,特别是在隧道开挖面附近,土体的软化效应更加显著。软化模量对于评估隧道施工的安全性和稳定性具有重要意义,也是土体本构模型中的关键参数。 盾构注浆技术是盾构隧道施工过程中的关键步骤,它通过在隧道衬砌的外侧施加注浆来填充隧道和土体间的空隙,并通过浆液的固化形成新的承压层,以确保隧道结构的稳定性和防水性能。注浆的材料选择、注浆压力以及注浆时间等都需要根据具体的地质条件和工程需求进行精细设计和控制。 在双线盾构隧道的设计与施工中,联络通道的设置是为了安全和运营的需要。它不仅能够确保隧道内的紧急疏散,同时也为隧道的维护和检查提供了便捷。联络通道的结构设计和施工同样需要精确的模拟和计算,以确保其在复杂的土压力和水压力作用下的稳定性和可靠性。 Abaqus软件作为一款强大的仿真分析工具,在双线盾构隧道工程中的应用包括了从初步设计到施工监测的全过程。通过精确的数值模拟,Abaqus可以帮助工程师预测和分析隧道开挖对周围土体的影响,评估隧道衬砌结构的应力分布,优化注浆方案,以及预测可能出现的问题,从而为工程的顺利进行提供保障。 在本压缩包文件中,包含了与双线盾构隧道相关的多篇文档和图像资料。这些资料涵盖了双线盾构隧道的基本概念、技术分析以及超精细模型的构建方法。通过这些文件,我们可以更深入地了解双线盾构隧道的设计原则、施工技术和工程应用中的关键问题。文档中的内容从基础到深入,逐步展开,为读者提供了全面的学习和研究资料。 通过Abaqus模拟技术,工程师们可以对双线盾构隧道进行多方面的分析和研究,包括隧道结构在不同施工阶段的响应、土体与结构之间的相互作用、隧道内部的应力和变形情况等。这些模拟分析为隧道的设计优化、施工方案的制定以及风险评估提供了科学依据,极大地提高了工程的安全性和经济性。此外,通过对超精细模型的研究,工程师们可以更好地理解和掌握软化模量和盾构注浆技术在双线盾构隧道工程中的应用,为类似工程提供宝贵的经验和参考。
2025-11-23 11:01:57 993KB
1
如何使用高级工程模拟软件Abaqus构建双线盾构隧道及其联络通道的超精细模型。文中不仅涵盖模型的整体架构搭建,还包括软化模量和盾构注浆等关键技术的具体实现方法。通过Python脚本逐步展示了从创建隧道衬砌部件到设定材料属性,再到模拟盾构注浆的全过程。此外,还探讨了这些技术在控制地层变形和提升隧道稳定性的意义。 适合人群:从事隧道工程设计与研究的专业人士,尤其是熟悉Abaqus软件并希望深入了解盾构隧道建模的技术人员。 使用场景及目标:适用于需要进行盾构隧道工程力学行为研究的项目,旨在帮助工程师们掌握如何运用Abaqus进行复杂的地下结构仿真,从而更好地理解和解决实际施工过程中遇到的问题。 其他说明:虽然本文提供的案例相对简化,但它为更复杂的工程项目提供了宝贵的理论依据和技术指导。对于想要深入探索这一领域的读者而言,这是一个非常好的入门教程。
2025-11-23 10:48:54 1.54MB
1
支持向量机(SVM)是一种流行的监督学习算法,用于分类和回归任务。在Python的机器学习库scikit-learn(sklearn)中,SVM提供了多种实现,包括`SVC`、`NuSVC`和`LinearSVC`。 ### 1. SVC支持向量机分类模型 `SVC`(Support Vector Classifier)是基于最大间隔策略的分类器,它寻找一个超平面最大化类别之间的间隔。在示例代码中,`kernel='linear'`表示使用线性核函数,即数据可以直接线性分离的情况。`clf.fit(X, Y)`对数据进行训练,`clf.coef_`返回模型的权重向量`w`,`clf.intercept_`给出截距。通过这些参数可以绘制决策边界,例如,代码中计算了决策边界的斜率`a`并绘制了与支持向量平行的两条直线。 ### 2. NuSVC支持向量机分类模型 `NuSVC`(Nu Support Vector Classifier)是`SVC`的一个变体,它允许指定支持向量的数量(`nu`参数),从而对样本分布比例有所控制。在给定的代码示例中,创建了一个`NuSVC`实例并使用简单的二分类数据进行训练。`clf.predict`用于预测新样本的类别,`clf.support_`返回支持向量的索引,`clf.classes_`给出所有可能的类别。 ### 3. sklearn.svm.LinearSVC `LinearSVC`是另一种线性支持向量机实现,它主要优化了大规模数据集上的性能。与`SVC`不同,`LinearSVC`不使用`C`和`nu`参数,而是直接使用`C`来控制正则化强度。在鸢尾花数据集的例子中,`LinearSVC`被用来训练模型,并通过`score`方法评估模型在测试集上的表现,`predict`方法用于预测测试集的类别。 ### SVM关键概念: - **核函数**:当数据非线性可分时,SVM通过核函数将数据映射到高维空间,使得在高维空间中可以找到一个线性超平面进行分类。常见的核函数有线性核、多项式核、RBF(高斯核)等。 - **支持向量**:距离决策边界最近的样本点,它们决定了决策边界的形状。 - **间隔(Margin)**:支持向量到决策边界的距离,SVM的目标是最大化这个间隔。 - **C参数**:正则化参数,控制模型的复杂度,较大的C值允许更多的样本点落在决策边界上,较小的C值使模型更倾向于找到更大的间隔。 - **nu参数**:`NuSVC`中的参数,控制支持向量的上界和下界,同时也限制了分类错误的样本数量。 在实际应用中,选择哪种SVM模型取决于数据的特性,例如线性可分性、样本数量、内存限制以及是否需要控制支持向量的数量。对于线性可分数据,`LinearSVC`可能更快,而对于非线性数据,可以选择`SVC`或`NuSVC`并尝试不同的核函数。
2025-11-23 00:33:05 179KB 支持向量机 sklearn python 数据挖掘
1
内容概要:本文详细介绍了基于单周期控制的交错并联Boost PFC仿真模型的设计与实现。该模型采用两个相位相差180度的Boost电路并联,共享一个输出电容,利用单周期控制算法优化电感电流和输出电压的波形质量。文中提供了具体的MATLAB/Simulink代码实现,涵盖了单周期控制算法、PWM同步、电压环PI调节等关键技术点。仿真结果显示,该模型能够有效降低电流纹波,提高功率因数,满足IEC61000-3-2标准。此外,文章还分享了多个调试技巧和注意事项,如载波同步、积分器复位、仿真步长设置等。 适合人群:从事电力电子研究和技术开发的专业人士,尤其是对PFC技术和单周期控制感兴趣的工程师。 使用场景及目标:适用于需要进行高效率、低纹波电源设计的研究和开发项目。主要目标是通过仿真验证交错并联Boost PFC电路的有效性和优越性,为实际应用提供理论支持和技术指导。 其他说明:文章不仅提供了详细的理论分析和代码实现,还分享了许多实用的调试经验和仿真技巧,帮助读者更好地理解和掌握相关技术。
2025-11-22 22:25:52 515KB 电力电子 Boost PFC
1
内容概要:本文介绍了一个基于Java的电商网络用户购物行为分析与可视化平台的构建方案。项目通过收集用户的浏览、购物、搜索及评价等行为数据,利用机器学习、数据挖掘和自然语言处理技术进行深度分析,实现用户画像构建、智能推荐、舆情分析等功能,并通过图表、热力图等形式将分析结果可视化,帮助电商企业优化运营策略、提升用户体验。平台采用Java开发,结合数据库管理和前端可视化技术,具备高效性与稳定性,同时关注数据隐私与合规性。; 适合人群:具备一定Java编程基础,熟悉数据处理与分析技术,从事电商系统开发、数据分析或大数据应用研发的技术人员及研究人员。; 使用场景及目标:①用于电商平台用户行为数据的采集、存储与清洗;②实现用户画像构建、个性化推荐系统设计与舆情情感分析;③通过可视化手段辅助运营决策,提升营销精准度与品牌管理水平。; 阅读建议:此资源涵盖完整的技术流程与部分示例代码,建议结合实际项目需求进行代码调试与功能扩展,重点关注数据预处理、算法选型与系统集成的设计思路。
2025-11-22 16:12:04 30KB Java 数据挖掘 用户行为分析 可视化
1
本文介绍了使用Python对Fluent DPM模型计算出的颗粒沉积数据(.dpm格式)进行后处理的方法。通过二维圆柱绕流模型的示例,展示了如何将.dpm文件转换为.csv格式,并利用numpy、pandas和matplotlib等库进行数据处理和可视化。文章详细说明了数据提取、格式转换以及三维散点图绘制的步骤,为颗粒沉积分析提供了实用的技术参考。 Fluent DPM模型是流体力学仿真软件ANSYS Fluent中用于模拟颗粒两相流的技术,特别适合分析颗粒在流体中的运动和沉积情况。利用Python对Fluent DPM模型计算出的颗粒沉积数据进行后处理,是将仿真数据转化为直观、可操作信息的有效手段。本文详细介绍了这一过程,特别强调了后处理的技术细节和操作步骤。 涉及到将Fluent DPM模型输出的颗粒沉积数据文件(通常为.dpm格式)转换为通用的CSV格式。这一转换步骤使得数据更易于在各种数据处理软件和编程语言中进行处理和分析。文章中提到使用Python编程语言,这是因为Python具有强大的数据处理库,并且具有简洁的语法和庞大的社区支持,使得它成为处理此类数据的理想工具。 文章展示了如何使用numpy库来处理数据。numpy是一个专门用于数值计算的Python库,它提供了高性能的多维数组对象和这些数组的操作工具。在处理大量颗粒沉积数据时,numpy能够高效地进行数组计算,例如筛选、排序和计算统计信息等。 接下来,文章介绍了pandas库的使用。pandas是一个强大的数据分析和操作工具,它提供了DataFrame这一易于操作的数据结构,能够简化数据的导入、清洗、处理和分析过程。在将.dpm数据转换为CSV格式后,可以利用pandas读取数据,并进行更加复杂的操作,如分组、聚合、连接和合并等。 此外,matplotlib库在数据可视化方面扮演着关键角色。该库是Python中最著名的绘图库之一,能够创建各种静态、动态和交互式图表。文章中详细阐述了如何使用matplotlib绘制三维散点图,这种图表可以直观地展示颗粒在三维空间中的分布和沉积情况,对于理解颗粒的流动模式和沉积特性非常有帮助。 文章中还提到了一个二维圆柱绕流模型的示例,该示例通过模拟颗粒在圆柱周围的流动和沉积,展现了Fluent DPM模型后处理的整个流程。这种示例不仅为理解后处理步骤提供了实际的应用背景,也帮助读者更好地掌握了如何在实际项目中应用这些技术。 文章中对整个Fluent DPM模型后处理流程进行了细致的解说,使得读者能够跟随步骤完成从数据提取、格式转换到数据可视化整个过程。这不仅为颗粒沉积分析提供了实用的技术参考,也为从事相关领域工作的工程师和研究人员提供了宝贵的实践指南。
2025-11-21 23:31:21 451KB 软件开发 源码
1
VCLZip Native Delphi Zip/UnZip Component! (VCLZip Lite: Version 2.23 April 14th, 2002) (VCLZip Pro: Version 3.10 Buid 1 - November 25th, 2007) IMPORTANT: If installing the registered version, please be sure to always re-install/rebuild the components (VCLZip and VCLUnZip) to the component pallette (or rebuild the design time package) so that the ThisVersion property and any other new properties will be properly updated. If your application still does not run without the IDE, open up VCLZip's package, click on options and look at the Directories/Conditionals tab. If KPDEMO is defined, remove it and recompile the package. ***IMPORTANT: Please remember do not install these components into a package by the name of either VCLZip or VCLUnZip. You will receive an error if you do. PLEASE TAKE A LOOK AT THE "WHAT's NEW IN THIS VERSION" LINK IN THE HELP FILE AS IT HAS CONVENIENT LINKS TO ALL OF THE NEW TOPICS. ==================== Version 3.10 Build 1 - Several bug fixes. - Added support for Delphi 2006, 2007 - Added support for BCB 2006, 2007 - Improved memory performance when working with archives containing extremely high number of compressed files. ==================== Version 3.06 Build 2 Made Delphi 2005 compatible Other assorted fixes ==================== Version 3.05 Build 1 Fixed a lot of incompatabilities between VCLZip and WinZip Other assorted fixes ==================== Version 3.04 Build 1 New ZLib methods for optimized compression and decompression of single entities of data in standard ZLib format, without the overhead of the PKZip format. This is excellent for compression of data to be sent across the net, compressing web pages (http compliant compression), blobs, etc. - ZLibCompressStream - ZLibDecompressStream - ZLibCompressBuffer - ZLibDecompressBuffer - ZLibCompressString - ZLibDecompressString Overloaded TStream Methods for Delphi 4,5, BCB 4, and 5 - UnZipToStream - UnZipToStreamByIndex - ZipFromStream Special OnGetNextTStream Event for Delphi 4,5, BCB 4, and 5 - Allows zipping multiple TStreams in one process - More efficient than calling ZipFromStream multiple times Capability to use the latest version of ZLib 1.2.1. - VCLZip currently uses 1.4.1 by default. - By defining ZLIB121, VCLZip will use the latest version of ZLib which is included with the registered version. Some optimization improvements which should show some improvement in zipping and unzipping speed when using TkpStreams with D4, D5, BCB4, and BCB5. ============ Version 3.03 (VCLZip Pro) - Please test your application thoroughly with this new version of VCLZip Pro. While it has been tested and has even been used in at least two production applications for several months now prior to initial release, there are so many combinations of property settings, environment differences, and ways to use VCLZip that you should always test VCLZip completely in your application before deploying. *** New Zip64 capabilities, properties, methods and events: - Uncompressed, Compressed, and Archive file sizes can be up to 2^63-1 bytes in length. - You can compress up to 2147483647 files into an archive. This is compatible with PKZip's Zip64 format. - If a file does not extend beyond any of the original limitations (filesizes of 4 gig or 65535 files) then no Zip64 format information is included in the archive. - property isZip64 - tells you when you are working with a zip file that is using Zip64 format. Much faster processing due to linking to Zlib object files for compression and decompression routines. Blocked Zip Files (spanned zip archives split onto hard drive) - Now completely compatible with PKZip and WinZip split archives file naming format. - For backwards compatability you can tell VCLZip to use the old VCLZip filenaming format by using the BlockMode property. - New method OnFileNameForSplitPart called just before each split filepart is created. VCLZip supplies a default implementation of this method so for most purposes you won't need your own. - method DefaultFileNameForSplitPart - VCLZip calls this internally if you don't define your own OnFileNameForSplitPart. You can also call it from your own OnFileNameForSplitPart if you wish to add some processing to the default behavior. - property BlockMode - determines whether VCLZip uses PKZip/WinZip standard naming convention or VCLZip classic method. - method DefaultGetNextDisk - VCLZip calls this internally if you don't define your own OnGetNextDisk. You can also call it from your own OnGetNextDisk event if you wish to add some processing to the default behavior. - Properties for controlling which files are zipped... - IncludeHiddenFiles - default False; - IncludeSysFiles: - default False; - IncludeReadOnlyFiles: - default True; - IncludeArchiveFiles: - default True; - Event OnGetNextStream - Allows you to zip from multiple streams when using the ZipFromStream method. This improves performance since repeated calls to ZipFromStream causes the archive to be updated on each subsequent call. - property ThisBuild - Tells you the current build. See also ThisVersion - property OnHandleMessage - Handles interactive messages with VCLZip. There is a default, so you don't need to define your own unless you wish to eliminate interactive messages and handle them on your own. This is helpful if you are using VCLZip as a service or on a webserver for instance. ******** Upgrading existing applications that use VCLZip 2.X ********** For the most part, existing applications will work as-is. Just install VCLZip 3.X and recompile your code. Here are some things to be aware of though... 1) If your app currently creates mmBlock archives (spanned directly to hard drive) and you define your own OnGetNextDisk in VCLZip 2.X, you should move your code from this event that handles mmBlock events to the new event OnFileNameForSplitPart. However, if you simply rely on VCLZip's default OnGetNextDisk then you don't have to worry about this. 2) If your app creates mmBlock archives, the default naming convention has changed to match the PKZip/WinZip standard. If you wish to keep the same naming convention then set BlockMode := mbClassic. 3) OnGetNextDisk and OnPrepareNextDisk events are called for the 1st disk now. VCLZip 2.X only calls these events starting with the 2nd disk. 4) properties CompressedSize[Index], UncompressedSize[Index], ZipSize are now Int64 types. 5) Delphi 4, Delphi 5, BCB 4, and BCB5 are all capable of using the Zip64 format. However they use the TkpHugeStream decendants which act just like TStreams except they handle files/stream sizes larger than 2gig. There is a TkpHugeFileStream and a TkpHugeMemoryStream which should handle 99% of all necessary actions. If you currently work with VCLZip 2.X with TBlobStreams or some other type of streams, you can either define your own TkpBlobStream for instance which inherits from TkpHugeStream, or use the TkpHugeStream.CopyFrom(TStream, Count) and the TkpHugeStream.GetStream: TStream methods to give VCLZip your stream and get it back. Ofcourse when using regular TStream decendants in D4,4,BCB4,and 5, you cannot create Zip64 archives. If you use Delphi 6, 7, or BCB 6, you don't have to worry about any of this as the normal TSTream is used by VCLZip and handles large file/stream sizes. ============ Version 2.23 (VCLZip Lite) Added the OEMConvert property. Filenames stored in a PKZip compatible archive normally go through an OEM conversion to make them ascii compatible. When opening the zip file the conversion is undone. If you do not plan on having other zip utilities opening up your archives this conversion process is not really necessary. Setting this property to False will eliminate this process. The default value for this property is True for normal PKZip compatability. Added OnEncrypt and OnDecrypt events. These allow you to replace the standard pkzip encryption with your own. Data is passed to these events a buffer at a time. Use this with care as this is still somewhat experimental and I'm not sure how useful it is yet. You must make all changes within the buffer sent in to you. Treat the entire file as a stream. Byte for byte replacement only. No additional keys can be saved. Added OnRecursingFile event. Sometimes when using wildcards and recursing directories, there was no reporting of progress. This will be fired each time a file matches as the file list is being built while recursing directories. Added the EncryptBeforeCompress boolean property. The default for this property is False and if left like this VCLZip will behave like normal. If set to True, VCLZip will encrypt each buffer prior to compressing it instead of afterwards. This will cause files to not be decryptable by normal zip utilities thereby adding a bit of extra security. Bugs Fixed: IMPORTANT!!! Behavior of freeing the ArchiveStream (compressed stream) has been modified. VCLZip will now no longer try to free ArchiveStream, you must free it yourself. This was due to a problem where it would be freed automatically if there was a problem with the ArchiveStream when trying to open it as a zip file (possibly corrupt). Best practice is that ArchiveStream should always point toward a TMemoryStream that you create anyway. Modified the SFX code (the code used to create the SFX stub distributed with VCLZip) so that it handles filenames that have been run through an OEM Conversion. The SFX was losing accented characters. This modification means that if you are creating zip files to be used as SFX's you will want to leave the OEMConvert property mentioned above, set to it's default value of True. Modified so that when cursor is changed to hourglass by VCLZip, previous cursor is saved correctly instead of just changing it back to default cursor. Now saves Central Directory Extra Fields correctly. Fixed the SFX code so that it works properly if you use Copy /B to concatenate a zip file to the stub. Due to a Delphi strange behavior sometimes path names for directory only entries would become corrupted. Removed reference to QConsts, replaced with RTLConsts. Sometimes a GPF would result if a corrupt zip file was opened. Using a wildcard in pathname added to FilesList did not work. Using '*.*' as a wildcard in files added to FilesList now is the same as using '*'. VCLZip will now check for CancelTheOperation during initial building of the fileslist instead of just during compression processing. Added a final call to OnTotalPercentDone with 100% because this didn't always happen. Attributes were not getting set correctly for directory-only entries. Fixed a problem that was not allowing ZipComment's to be added correctly to spanned or blocked zip files. Not the same fix as in 2.22. Directories (directory-only entries) were not being restored properly unless DoAll was True. You were unable to delete a directory from which files were recursively zipped until exiting your application. ============ Version 2.22 Now Delphi 6 compatible. New event called {link=93,OnRecursingFile} which gets called as VCLZip recurses directories searching for files that match a wildcard that is entered in the FilesList. This gets called each time a file matches the wildcard. Fixed a bug which kept diskettes from being labeled when creating spanned zip files on WIN31. Fixed a bug which sometimes did not allow zip comments to be added to blocked zip sets. Fixed a bug which caused VCLZip to not properly handle the IncompleteZip exception on spanned zip sets unless you called ReadZip prior to calling UnZip. Version 2.21 (Changes are shown in the build stages as they were implemented) Pre-Release Build 5: When working with temporary files, VCLZip will now rename, instead of copy, the temp file if the destination is on the same drive. This will speed up the adding of files to an existing zip file when the resulting zip file is very large. Pre-Release Build 4: New event called OnPrepareNextDisk which is an event that will allow you, when creating spanned zip files across diskettes, to do things like format a diskette that has just been inserted, or to add or delete files from the diskette before continuing with the zipping process. Fixed a problem that was causing the CancelTheOperation Method to not work properly. Pre-Release Build 3: Fixed bug which caused VCLZip to miscalculate space needed for zfc file if wildcards are put into the FilesList. Fixed bug so you could have FilePercentDone without needing TotalPercentDone when creating spanned zip files Fixed so relative_offset set correctly for spanned zips. Side effect of removing needless write of header. Added code to read local fileheaders if exception thrown when reading a central fileheader. Fixed problem where directories couldn't be created from directory entries because the fullpath wasn't known yet. Result of having moved this code to earlier. Fixed typo in creation of LOC header values which could cause error if reading local headers. Changed so Zip Comment starting position is calculated based on end of central record instead of end of file. Pre-Release Build 2: IMPORTANT: Changed default for FileOpenMode back to fmShareDenyNone as it had been for all but version 2.20. Fixed a problem where drivepart (i.e. C:\) was not being stripped when saving relative paths. Added a BufferedStreamSize property which can increase the speed of creating zips to floppy (and other slow media) dramatically. The new default for this should increase the speed by as much as 3 times, but you can now tweak this especially for your application! Added an ImproperZip property which gets set when VCLZip detects an inconsistency with the zip. This can be useful for detecting when VCLZip was able to open the zip in spite of an inconsistency found. There was no way to know this in the past. Fixed a problem where zip comments in zfc files were not being read correctly. Added a setZipSignatures procedure which allows you to modify the signatures of your zip file. This will cause other zip utilities to not be able to recognize or read your zip files created with VCLZip. Useful if you want to add further security to your zip files. Pre-Release Build 1: Some zip files would not open correctly, throwing an incomplete zip file exception due to an erroneous "extra field length" identifier in headers of some compressed files. These zip files are rare, but a very few people seemed to have several of them. This problem would not affect zip files created by VCLZip, and this problem should only occur in VCLZip 2.20, not in any previous version. If you had Range Checking turned on, VCLZip would get a range check error when using a wildcard that ended with a * as in 'somefile.*'. Under certain circumstances, drive information would not be stripped from path information if zipping recursively (including subdirectories) "Retrying" to zip a file that could not be opened using the OnSkippingFile event would not always work correctly. Creating spanned zip set to floppy should be faster now due to removing a needless header write to disk for each file. VCLZip would not compile correctly with MAKESMALL defined. Added code to make VCLZip work with BCB5. Haven't tested this yet though since I don't have BCB5 myself yet. Added readonly boolean ImproperZip property which will be set to True when some sort of problem is found when opening the zip file, even if recoverable. This property will be enhanced and refined in the future. If KeepZipOpen is set to True, when putting in the wrong disk in a spanned zip set, VCLZip would not always properly close the file on the old diskette before trying to open the file on the next diskette. Added ECantWriteUCF exception which will be thrown if VCLZip runs out of room to write the uncompressed file when unzipping. Timestamp was not being set properly when unzipping readonly files. Moved setting of the timestamp to before the attributes get set. ============ Version 2.20 Changes have been made in the following areas: --Performance There are a few code optimizations that should speed up the zipping process slightly. --Spanned Zip Files A new feature, turned on with the SaveZipInfoOnFirstDisk allows VCLZip to create and read spanned zip files starting with the first disk instead of the normally required last disk of the spanned disk set by saving a Zip Configuration File on the first disk. This feature can be used even if creating the spanned zip file directly to your hard drive. A new property, SaveOnFirstDisk, allows you to save room on the first disk when creating a spanned zip file, to allow room for other files, such as setup programs, data files, or a Zip Configuration File. Spanned zip files can now be directed toward disks greater than 2 gig in size as long as you are using Delphi 5 or BCB 4. --UnZipping The new Selected indexed property offers another way to flag files to be unzipped. Files that have the Selected property set to True can be unzipped using the UnZipSelected method. The Selected property will be cleared (set to False) for each file as it is unzipped, but you can also call the ClearSelected method to clear them all. At anytime the NumSelected property can be checked to see how many files have been selected. Also, the UnZipToBufferByIndex and UnZipToStreamByIndex methods allow you to unzip files specified by their index instead of by name or wildcard. The BufferLength property allows buffered output (buffer smaller than the total uncompressed filesize) when unzipping directly to memory (see UnZipToBuffer and UnZipToBufferByIndex). This will cause the OnGetNextBuffer Event to be called everytime BufferLength bytes have been output by VCLZip. Modified to work in all ways with zip files that have "extra fields" in their headers. These tend to be quite rare, but they do show up from time to time. --Zipping Added a property called FileOpenMode which allows you to define the file open mode for files when they are opened to be zipped. Added a Retry parameter to the OnSkippingFile Event that can be used to re-attempt to open a file for zipping that is open by another process. This gives the chance to close the file and continue with the zipping process rather than having to start over again. Added a ENotEnoughRoom exception which will be thrown if there is not enough room to write to the archive, i.e. out of disk space. The new OnUpdate Event gets fired when updating or freshening an existing archive. It is triggered for each file that already exists in the archive as it is either replaced or kept in the updated archive. The AddDirEntriesOnRecurse will cause separate directory entries to be included in archives when doing recursive zips through subdirectories. --Integrity Checking A new method, CheckArchive, will perform an integrity check on all files in an archive. This is much faster than using FileIsOK on each file if testing all files in an archive with VERY MANY files. Further improved checking for corrupted zip files when opening zip files. --Encryption The following new properties and methods allow lower level work with password encrypted archives: DecryptHeader Gets the decryption header for a particular compressed file in an archive GetDecryptHeaderPtr Same as DecryptHeader but easier to use in BCB. DecryptHeaderByte Method Tests a password against the decryption header found in the DecryptHeader property. GetDecryptHeaderByteByPtr Same as DecryptHeaderByte but easier to use in BCB. --Self Extracting Executables Changes were made to the ZIPSFX32.BIN stub itself: - Modified to work with zip files containing "extra fields" in their headers. - Modified to change mouse cursor to an hour glass during processing. - Check for correct file size is now done automatically - Now uses the end of central and central headers to find the first local header. - Added a progress meter - Better checking for corrupted zip files. - Added an information window that can optionally be shown when the sfx is initially started up. - Added an AutoRun option to make the sfx stub run automatially when double clicked with no other interaction from the user. For the new modified sfx stub, ZIPSFX32.BIN, instead of using kpSFXOpt, you should now use the TSfxConfig component to set the options for the sfx stub. The new sfx can be found in the sfx\ subdirectory as usual and is called ZIPSFX32.BIN and the original sfx can be found in the same subdirectory except it is now called ORGSFX32.bin. Just rename it if you prefer that one (use KPSFXOPT instead of TSfxConfig with the old stub). --Miscellaneous The installation is now easier, atleast for first time installers of the source code. The .DPK files for Delphi and .CPP files for BCB are now included. Now these files simply have to be compiled and that's it. There is a separate option in the installation for installing to the different versions of Delphi and BCB. Added a property called FlushFilesOnClose which will cause all files opened for write by VCLZip to have their disk buffers flushed to disk when closed. Added the capability to delete Selected files from an archive using the DeleteEntries Method. The behavior of the OnInCompleteZip Event has been greatly improved. You can now use this event to ask the user to insert the last disk of a spanned disk set rather than having to handle this situation from outside VCLZip. The register procedures were changed so that the components now get installed to the "VCLZip" tab on the palette. I found that for all but Delphi 1 I had to actually manually move the components to the "VCLZip" tab. You may find that you have to do this too if you have already installed VCLZip before. The components now use new bitmaps in place of the old ones on the component palette. Separated many compiler defines into a new file called KPDEFS.INC. ==================================== Version 2.18: 1) Thanks to the hard work of a fellow registered user, added the capability to remove all dependencies on the Dialogs, Forms, Controls, and FileCtrl units by defining the conditional MAKESMALL, which results in a smaller footprint. This can be quite useful when putting VCLZip into a DLL for instance. In order to make this work, go into your Project | Options and select the Directories/Conditionals tab and enter MAKESMALL in the conditional defines text box. In Delphi you can add this conditinal define to the project options of your application that uses VCLZip and then do a "build all". In BCB you will have to add this to the project options of the package that contains VCLZip and then rebuild the package. If you define MAKESMALL, the only things you lose are: a) ZIP file open dialog box that appears when the ZipName is set to "?" b) Select Directory dialog box that appears when the DestDir is set to "?" c) Changing the cursor to an hour glass during some operations. d) No long filename support in Delphi 1 2) Made VCLZip completely BCB4 compatible. 3) Added some exception handling to KPUNZIPP and KPINFLT, mainly to handle unexpected situations when wrong passwords are entered. This fixes the problem with PRP, the password recovery program. 4) For Borland C++ Builder, changed any COMP types to double, getting rid of the compiler warnings for unsupported comp type. This affects the OnStartZipInfo and OnStartUnZipInfo events, so you'll have to change the comp parameter to double in these events if you use them (in both your header files and in the CPP files). 5) Modified OnStartUnZip event so that FName (the filename of the file that is about to be unzipped along with complete path) is now a VAR parameter and can be modified. This allows you to change the path and name of a file that is about to be unzipped. This is especially helpfull in applications like Install Programs. NOTE: You will need to change your current code to add the VAR to the event definition and implementation if you already use this event in your application. (In BCB, add a & just before the parameter instead of VAR) 6) Moved many type definitions to VCLUNZIP.PAS so that kpZipObj won't have to be included in your USES list. 7) Fixed bug that caused GPF when setting Zip Comment to '' (empty string). 8) Moved strings in VCLZip/VCLUnZip into a string table, making the code size a little smaller as well as making it much easier to localize string information. However you have the option of not using the new string table, for whatever reason, by defining NO_RES in your project options (in the conditional defines text box on the Directories/Conditionals tab). 9) Removed the need for several files. No longer included are kpstrm.res, kpstrm.rc, kpsconst.res, kpsconst.rc, kpstres.pas, and for Delphi 1, kpdrvs.pas. In some cases the need for these files was eliminated and in other cases just rolled into the newly included kpzcnst.rc, kpzcnst.pas, and kpzcnst.res. Definining NO_RES in your project options will elimiate the need for these new files but will make your code size slightly larger and you won't be able to localize your application without changing VCLZip source code. 10) Modified the OnFilePercentDone and OnTotalPercentDone progress events to work better when creating spanned disk sets and blocked zip sets. They no longer report 100% when the compressed file still has to be copied to disk. 11) Added the ReplaceReadOnly property. Setting this to true will allow files with the ReadOnly attribute to be replaced during the unzip process. 12) Added the ifNewer and ifOlder options to the OverwriteMode property. (This had somehow made it into the help file but not into VCLUnZip) 13) Added the SFXToZip method which will convert an SFX file to a regular zip file. The header pointers will be properly adjusted during the conversion. 14) Fixed a problem where the OnGetNextDisk event would always revert to the DefaultGetNextDisk method instead of what you entered into the Object Inspector each time your project was re-opened. 15) Fixed a bug that caused CRC errors when unzipping files from spanned disk sets if they were STORED (no compression) and spanned across disks. 16) Added the OnZipComplete and OnUnZipComplete events. If defined, these will fire at the very end of a zip or unzip operation (after all files have been processed, not after each file). These events will rarely be used since, normally you will be able to do the same thing at the point that the call to Zip or UnZip returns, but these events can be useful when using VCLZip in threads where in certain circumstances the return from the Zip or UnZip methods are not seen. 17) Creation of SFX files has never been easier!!! The addition of the MakeNewSFX method allows you to create Self Extracting Executables without the need to create a zip file first. The files that you specify in the FilesList property will be zipped, using all the normal VCLZip property settings, and the SFX will be created, all in one step! In addition, you can create configurable SFX files using this method, and you can do this especially easy by adding the new unit kpSFXOpt to your application's USES list and using the new 32bit SFX stub that is now distributed with VCLZip. This allows you to easily set things like SFX Dialog caption, default target extraction directory, file to launch after extraction, etc. 18) Fixed a memory leak that only affects applications using VCLZip that are compiled with Delphi 2, and that use wildcard specifications in the FilesList property. Version 2.17a: 1) Fixed a bug that was keeping VCLZip from reading truncated zip files or sfx files that did not have their headers adjusted. 2) Fixed a bug that was causing a directory to be created on the C drive when doing integrity checking with the FileIsOK property. 3) Added {$V-} to kpZipObj.PAS 4) Moved two AssignTo methods to public instead of private in kpZipObj.PAS Version 2.17: 1) Added Memory zipping and unzipping capabilities through the UnZipToBuffer and ZipFromBuffer methods. See the documentation for these methods in the Help File for more information. 2) New FileIsOK Property allows you to check for the integrity of individual files within an archive without actually unzipping the file. 3) Fixed a bug that kept checking of volume labels from working on WIN31 when working with spanned disk sets. 4) Removed all references to ChDirectory so that VCLZip will be more thread safe allowing separate instances of VCLZip in separate threads to be performing zip/unzip operations at the same time. 5) A new public property PreserveStubs allows you to make modifications to sfx archives and have the archive remain an SFX rather than revert back to a normal zip file. 6) Added a default OnGetNextDisk event. If one is not defined, then the default event will be called when the situation arises that a new disk is needed when zipping or unzipping a spanned or blocked zip archive. 7) Added more power to the wildcard capabilities. Now you can qualify the * wildcard character, for instance: * would satisfy any number of contiguous characters as long as they are all a thru e. * would satisfy any number of contiguous characters as long as none of them were a thru e. This allows you to do things like include files in specific direcories into your ExcludeList. For instance: VCLZip1.ExcludeList.Add('c:\test\*.txt') would exclude the zipping of all .txt files in the test directory but not in any subdirectories. 8) Fixed other minor bugs and made other code enhancements. Version 2.16: ***Please be aware that if you currently use the OnSkippingFile event in any of your applications, version 2.16 will require a small modification as this event has an added parameter and one of the current parameters is used a little differently when being called by the zip operation. Please see the help file for more information. 1) The OnSkippingFile Event has been changed slightly, adding a parameter for the filename. 2) OnSkippingFile is now called when a file to be zipped is skipped because it is locked by another application. See the Help File for more information. 3) Fixed a bug with the Exclude and NoCompressList where they were ignoring entries with anything before the extention (i.e. 'somefile.*' as opposed to '*.zip') if you were saving directory information. 4) Fixed a bug that caused an error if you added a wildcard with a non-existent directory to the FilesList. 5) A few other minor bug fixes. Modifications for 2.15 include: 1) PackLevel can now be set to 0 (zero) which means no compression at all (STORED only). 2) New property ExcludeList is a new stringlist that you can add filenames and wildcards to in order to specify files that you do not wish to be included in an archive. 3) New property NoCompressList is a new stringlist that you can add filenames and wildcards to in order to specify files that you wish to be STORED with a PackLevel of 0 (zero), no compression. 4) All compiler warnings and hints were removed. Modifications for 2.14 include: 1) Delphi 4 compatability. 2) Added ability to use complex wildcards when specifying which files are to be zipped. This includes wildcard characters not only in the filename but also in the pathname. This allows you to specify directories using wildcards, for instance: VCLZip1.FilesList.add('c:\test\w*\mycode*.pas'); would get all PAS files beginning with mycode in subdirectories under TEST that begin with the letter w. Wilcards may be much more complex than this. Please see the help file for more information. 3) Added the ability to override the RECURSE property setting when specifying files to be zipped. By adding the following characters to the beginning of the filenames being added, you can override whatever the current setting is for the RECURSE property: '>' will force recursion into subdirectories '|' will force NO-recursion For instance: VCLZip1.FilesList.add('>c:\windows\*.ini'); will get all .ini files in and below the windows directory reguardless of what the recurse property setting is. and: VCLZip1.FilesList.add('|c:\windows\sys*\*.dll'); will get all .dll files in subdirectories of the windows directories that start with 'sys' but will not recurse into any directories below the sys* directories. 4) The [ and ] characters previously used as special wildcard characters have been changed to < and > since [ and ] are valid filename characters. If you still need to use the previous characters for backward compatability, I can show registered users how to easily modify a couple of constants in the source code in order to go back to the old style. See "Using Wildcards" in the help file for more information. 5) A few bug fixes. Modifications for 2.13 include: 1) New property ResetArchiveBitOnZip causes each file's archive bit to be turned off after being zipped. 2) New Property SkipIfArchiveBitNotSet causes files who's archive bit is not set to be skipped during zipping operations. 3) A few modifications were made to allow more compatibility with BCB 1. 4) Cleaned up the Help File some. 5) KWF file now works for Delphi 1 and Delphi 2 again. Still can't get context sensitive help in Delphi 3. 6) Cleaned up some of the code that was causing compiler warnings and hints. Modifications for 2.12 include: 1) Added a TempPath property to allow the temporary files path to be different from the Windows default. 2) Modified VCLZip so that any temporary files that are created receive a unique temporary filename so as not to clash with any other files in the temporary directory. This also allows working with zip files residing in the temporary directory. 3) Fixed a bug in the relative path feature. 4) Fixed a bug that caused a "list out of bounds" error if a file in the FilesList did not actually exist. Modifications for 2.11 include: 1) Fixed password encryption bug for 16 bit. 2) Fixed "invalid pointer operation" when closing application bug. 3) Fixed path device truncation bug which caused inability to modify existing archives in 16 bit. 4) Fixed inability to cancel during wilcard expansion bug. 5) Added capability to better handle corrupted timestamps. 6) Added capability to open and work with SFX files that were created with the COPY/B method (header files not adjusted). 7) Other small bug fixes. I'm still working on a bug which causes a GPF when continually unzipping the same file thousands to millions of times. This mainly affects programs like the Password Recovery Program (PRP) which uses the brute force method of searching for an archive's password. Modifications for 2.10 include: 1) Capability for 16bit VCLZip to store long file/path names when running on a 32bit OS. 2) New property (Store83Names) which allows you to force DOS 8.3 file and path names to be stored. 3) Better UNC path support. 4) Fixed a bug to allow files to be added to an empty archive. Modifications for 2.03 include: 1) Volume labels now get written correctly to spanned disk sets in Delphi 1 for all versions of Windows. 2) Delphi 1 VCLZip now correctly recognizes when it is running on Windows NT. 3) Fixed a problem with zipping files in the root directory when StorePaths = True. 4) File and Zip Comments are now read correctly from spanned/blocked zip archives. 5) Fixed a buf that was causing "Duplicate Object" errors. Modifications for 2.02 include: 1) Fix for file comments which were supposed to be fixed in version 2.01 but weren't. 2) Fix for stream zipping. Version 2.01 would not create a new archive if using a stream. (The Stream Demo now allows creating new zip files to streams too) 3) A few other minor modifications to further solidify the code. 4) A modification to the Zip Utility Demo which allows unzipping from Blocked zip files as if they were single zip files. 5) Added a read-only, published ThisVersion property which reflects the version of the VCLZip/VCLUnZip that you are currently working with. Modifications for 2.01 include: 1) Fixes for exceptions that were caused when CANCELING a zip or unzip of a spanned zip file. 2) Fix for a possible problem when zipping or unzipping a spanned zip file when one or more of the compressed files resided on more than 2 of the spanned parts. 3) Fix for file comments which were broken in version 2.00. Additional features for version 2.00 include: 1) Modify/Add internal file details (filename, pathname, timestamp, comment) for any file while zipping, in the OnStartZip event. 2) Add an Archive Comment while zipping in the OnStartZipInfo event. 3) Delphi 1 compatiblity for VCLZip. 4) Stream to Stream Zipping - Archives themselves can now be TStreams! 5) New Relative Path Information option. 6) Unzip archives that weren't zipped with the Relative Path option turned on as if they had been by determining how much path information to use with the Rootpath property. 7) Modify timestamps for files in existing archives (you could already modify filenames and pathnames for files in existing archives) 8) The OnBadPassword event now allows you to supply a new password and try the same file again when unzipping. 9) Source code has been cleaned up so that it will compile under Borland C++ Builder with no modifications. Also some bugs were fixed, most importantly: 1) An empty file, that had been compressed into an archive would cause any file added to the archive to cause the archive to approximately double in size. Any archives containing empty files are not corrupted, they are OK. This was simply a fix to the way the archive was processed. 2) After creating an SFX file, you had to close the zip file before you could modify it in any way, otherwise a stream read error was encountered. See the Help file for more information on new features. This zip file is part of a self contained installation program. Just run it and the installation program will begin. Contact vclzip@bigfoot.com for further information Thanks! Kevin Boylan
2025-11-21 19:21:14 522KB 源码 系统相关 VclZip
1