delphi技术
文章平均质量分 58
sun280
这个作者很懒,什么都没留下…
展开
-
谁能真正的实现将htm另存为mht文件
谁能真正的实现将htm另存为mht文件 本人的开发环境为D5。 在搜索中找到以下几种实现的方法。 1.来自ZSWang的 http://expert.csdn.net/Expert/topic/2634/2634699.xml?temp=.6191217 它解决了将图片的路径修正为全路径,但仍未能将图片打包到mht文件中。原创 2013-08-28 20:21:32 · 198 阅读 · 0 评论 -
两个非常有用的进程函数。
/// /// 根据程序名(全路径)获得进程ID(PID)/// /// 程序完整路径+文件名/// function GetPIDByProgramName(const APName: string): THandle;var isFound: boolean; AHandle, AhProcess: THandle; ProcessEntry32: TProcessEntry32; A原创 2013-08-28 20:13:43 · 208 阅读 · 0 评论 -
\t\t两个非常有用的进程函数。
/// /// 根据程序名(全路径)获得进程ID(PID)/// /// 程序完整路径+文件名/// function GetPIDByProgramName(const APName: string): THandle;var isFound: boolean; AHandle, AhProcess: THandle; ProcessEntry32: TProcessEntry32; A原创 2013-08-28 20:13:45 · 225 阅读 · 0 评论 -
\t\t一个多年前的压缩解压缩(VCLZIP)函数。
一个多年前的压缩解压缩DLL函数,支持ZIP类型。控件为VCLZIP3.X,使用了FastMM4。VCLZIP是一个非常不错的压缩控件。调用示例:1、压缩单个文件ZipFolder(sFilePath, '', True, ExtractFileName(sHtmlFileName), sFilePath + sZipFileName, '');2、压缩文件夹:ZipFolder(sFilePat原创 2013-08-28 20:13:49 · 223 阅读 · 0 评论 -
【原创】TClientDataSet研究之二:取得当前记录的数据包和刷新当前记录包
delphi本身并不提供当前记录的数据封包,但我们有一个途经可以获取,通过TDataSetProvieder的GetRecords获取。GetRecords虽然简单,但不能排除Blob字段、只取唯一主键字段等。通过研究CDS的RefreshRecord方法,提取了当前记录的封包。UsesDBClient,Variants,DSIntf;type TMyCDS = class(TCustomC原创 2013-08-28 20:13:52 · 169 阅读 · 0 评论 -
\t\tdelphi脚本解释器比较
Delphi由于RTTI功能有限因此,如果需要执一些动态脚本函数,比较麻烦(尽管D2009提供了一些反射功能)。由此催生了不少的第三方脚本解释器VCL控件。 比较出名的脚本解释器为TMS Scripter、FastScript(FastReport用到)、Remobjects PascalScript、PaxScripter。 下面比较上述脚本解释器的一些优点和缺点。原创 2013-08-28 20:14:01 · 273 阅读 · 0 评论 -
【原创】Delphi7下的TFlowPanel
TFlowPanel是一个很好的排版容器控件,支持上下左右的紧凑排版。但TFlowPanel是基于D2005之后的控件,D7并没有自带这个控件。我开始以为从D2007将这个控件扒下来很容易,但在编写过程中,发现TComponent这个基类,D7和D2007发生了很大不同,看来D2007的底层RTL发生了不少变化。后来边修改边测试,还是改成了D7版下的TFlowPanel。在设计期可能有点停滞感,但原创 2013-08-28 20:14:12 · 337 阅读 · 0 评论 -
Stream与Variant互转
Variant是一个极其包容的数据类型,但并没有包括对象类型,如Stream类型。当我们用Variant声明数据类型时候,遇到Stream,可将Stream转换为一维的Variant数组。反之亦然。//将变体转换为流Procedure VariantToStream(const v: Variant; Stream: TMemoryStream);var p: pointer;begin St原创 2013-08-28 20:14:14 · 139 阅读 · 0 评论 -
\t\tStream与Variant互转
Variant是一个极其包容的数据类型,但并没有包括对象类型,如Stream类型。当我们用Variant声明数据类型时候,遇到Stream,可将Stream转换为一维的Variant数组。反之亦然。//将变体转换为流Procedure VariantToStream(const v: Variant; Stream: TMemoryStream);var p: pointer;begin St原创 2013-08-28 20:14:16 · 176 阅读 · 0 评论 -
两个非常有用的进程函数。
/// /// 根据程序名(全路径)获得进程ID(PID)/// /// 程序完整路径+文件名/// function GetPIDByProgramName(const APName: string): THandle;var isFound: boolean; AHandle, AhProcess: THandle; ProcessEntry32: TProcessEntry32; A原创 2013-08-28 20:13:40 · 152 阅读 · 0 评论 -
D2009感受之一
周末装了D2009的预览版,虽说只有255天使用时间,但也够用了,仅仅试用而已。 我机器是AMD2500+,1G内存。装了几次没装上。卸载,NET framework也卸载不了,J#也卸载不了。后来才想起,是不是XP+SP3(雨林木风版本)的问题,然后,强制删除.NET framework 2.0 目录,重启系统。 官方网说安装安装速度有提升,大概只是将 ,NET SDK改原创 2013-08-28 20:13:38 · 144 阅读 · 0 评论 -
\t\tTClientDataSet研究之一:一个分组函数
TClientDataSet是一个非常不错的内存数据集,不仅拥有TDataSet通用的数据集功能,还拥有其独特的查询分组统计功能。为了表述方便,TClientDataSet简称为CDS。设置分组功能如下操作:1、首先,必须建立CDS.IndexDefs索引。直接使用CDS.IndexFieldnames是不行,原因是这种简单的建立索引方式无法使用GroupingLevel 属性。2、设置Aggre原创 2013-08-28 20:13:25 · 185 阅读 · 0 评论 -
Delphi实现Subst
Delphi实现Subst2008-10-24 16:49{2008-10-24 16:26 制作了等同于SUBST的:AskDriver('X:')NewDriver('X:','\??\d:');//如果对一个已经存在的设备进行这个操作,可能导致无法使用DelDriver('X:','\??\d:');U盘 \Device\Harddisk1\DP(1)0-0+7CDROM原创 2013-08-28 20:21:47 · 237 阅读 · 0 评论 -
Delphi实现Subst
Delphi实现Subst2008-10-24 16:49{2008-10-24 16:26 制作了等同于SUBST的:AskDriver('X:')NewDriver('X:','\??\d:');//如果对一个已经存在的设备进行这个操作,可能导致无法使用DelDriver('X:','\??\d:');U盘 \Device\Harddisk1\DP(1)0-0+7CDROM原创 2013-08-28 20:21:50 · 220 阅读 · 0 评论 -
FireMonkey 绘图
FMX 的 Canvas 在不同的系统上会分别使用:WinVista、Win7: D2D (FMX.Canvas.D2D.pas)WinXP: GDI+ (FMX.Canvas.GDIP.pas)Mac 系列: Core Graphics (FMX.Canvas.Mac.pas)和 HTML5 中的 Canvas 非常类似, 现在的 Canvas 模糊了 Pen 的概念:之前的 Canvas.Pe原创 2013-08-28 20:26:51 · 369 阅读 · 0 评论 -
Writing a DataSnap server and an iOS client in 10 minutes flat!
Writing a DataSnap server and an iOS client in 10 minutes flat! Abstract: This article shows you how you can easily create your first DataSnap server and connect to it from your iPhone or iPad. We w原创 2013-08-28 20:27:56 · 279 阅读 · 0 评论 -
Indy10手动安装示例
indy是一个很好开源的网络通讯套件,覆盖了TCP、HTTP、UDP、SNMP等协议,上百个控件左右。最近的版本为:10.2.3。Remobjects 在5.0.29后也加入了支持这个indy版本。 但要替换indy是非常麻烦,原因是,delphi自动携带了低版本的indy,如D7携带了Indy9.X的版本,D2007携带了Indy 10.1.X。我不喜欢用官方自带的安装程序来安装控件,原因是他们原创 2013-08-28 20:13:00 · 317 阅读 · 0 评论 -
\t\tJSON FOR VCL AND DEMO
这是一个开源的小类库,带有类库及其DEMO。让我们提前一起去把握D2009吧。http://www.torry.net/vcl/internet/html/lkJSON-1.04.zip原创 2013-08-28 20:13:14 · 191 阅读 · 0 评论 -
JSON FOR VCL AND DEMO
这是一个开源的小类库,带有类库及其DEMO。让我们提前一起去把握D2009吧。http://www.torry.net/vcl/internet/html/lkJSON-1.04.zip 评论这张原创 2013-08-28 20:13:18 · 203 阅读 · 0 评论 -
TClientDataSet研究之一:一个分组函数
TClientDataSet是一个非常不错的内存数据集,不仅拥有TDataSet通用的数据集功能,还拥有其独特的查询分组统计功能。为了表述方便,TClientDataSet简称为CDS。设置分组功能如下操作:1、首先,必须建立CDS.IndexDefs索引。直接使用CDS.IndexFieldnames是不行,原因是这种简单的建立索引方式无法使用GroupingLevel 属性。2、设置Aggre原创 2013-08-28 20:13:23 · 183 阅读 · 0 评论 -
【原创】Aarry of Const 与 Variant研究
Aarry of Const 声明的语法虽然有点怪异,但相信大家都使用过Format函数。Aarry of Const本质就是Array of TVarRec,是一种优化过的变体数组。 为何要使用 Aarry of Const呢?由于 Aarry of Const是一种优化过的变体数组,我们让她来做传入参数,相当灵活和方便。 试想一下,如果三层客户端接口为:OpenQuer原创 2013-08-28 20:14:18 · 184 阅读 · 0 评论 -
\t\tIndy10手动安装示例
indy是一个很好开源的网络通讯套件,覆盖了TCP、HTTP、UDP、SNMP等协议,上百个控件左右。最近的版本为:10.2.3。Remobjects 在5.0.29后也加入了支持这个indy版本。但要替换indy是非常麻烦,原因是,delphi自动携带了低版本的indy,如D7携带了Indy9.X的版本,D2007携带了Indy 10.1.X。我不喜欢用官方自带的安装程序来安装控件,原因是他们喜原创 2013-08-28 20:12:58 · 354 阅读 · 0 评论 -
解决Delphi2007 NewItem 丢失WebServices向导问题
如图所示,如果你的D2007的WebServices向导里没有后面三项内容,如,D2007 For lite 就没有。即没有 SOAP SERVER DATAMODULE、SOAP SERVER Interface、WSDL Importers,需要修改以下注册表内容:1、打开注册表以下目录HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Package Cac原创 2013-08-28 20:13:03 · 230 阅读 · 0 评论 -
\t\tEhlib系列文章之二:妙用TColunmnEh的OnGetCellParams事件
Ehlib比DBGrid提供更多灵活的属性和事件,尤其是TColunmnEh的属性和事件。GetCellParams是TColunmnEh重要的事件之一,用好了这个事件,可以达到妙笔生花的境界。1、与数据集的UpdateStatus搭配,派生出一列的行状态标记,一目了然,非常适用缓存提交方式。procedure TWinEhlibInfo.SetRecordStatus( Dat原创 2013-08-28 20:15:50 · 199 阅读 · 0 评论 -
\t\tDelphi2010发布日,请CSDN走开!!!
Delphi2010即将在8月25日发布,这是易博龙易主Borland以来拿出最有说服力的作品。之前的D2009,开发阶段进入了尾声,易博龙才收购了Borland整个开发产品线的作品,除了ECO。由于发行过于仓促,D2009直到打了第四个补丁才稳定下来。而D2010是在D2009的第四个补丁分支上开发,整个开发过程让全球开发人员参与beta版本测试与体验,产品日趋稳定,备受赞誉。 这么大好的原创 2013-08-28 20:16:01 · 216 阅读 · 0 评论 -
JSon SuperObject 研究
SuperObject是delphi不多的著名开源JSON开源类库,其作者的作品还有大名鼎鼎的DSPACK等许多著名的开源VCL类库。 至于SuperObject的详细用法,万一老师已经很描述很清楚。最新版的1.2.1,添加了currency属性,也支持D2010,包括最新的RTTI。 SuperObject看起来很容易上手,但有一些概念必须理解清楚,比如数组的创建和使用、空值原创 2013-08-28 20:16:30 · 208 阅读 · 0 评论 -
\t\tJSon SuperObject 研究
SuperObject是delphi不多的著名开源JSON开源类库,其作者的作品还有大名鼎鼎的DSPACK等许多著名的开源VCL类库。 至于SuperObject的详细用法,万一老师已经很描述很清楚。最新版的1.2.1,添加了currency属性,也支持D2010,包括最新的RTTI。 SuperObject看起来很容易上手,但有一些概念必须理解清楚,比如数组的创建和使用、空值原创 2013-08-28 20:16:32 · 200 阅读 · 0 评论 -
巧用Delphi 2010新 RTTI 管理常量(const)!
常量定义(const)在D7及D7之前的版本,一般只能在单元里,以全局方式声明和定义。自D7之后的新版本,常量可以放在一个类里声明,比如放在 类的 public或private里。 有那么一种常量,你希望常量的名称和真实的常量值一样,比如,用于作配置文件的常量。当然,如果你不觉得辛苦,一般来说,常量名和常量值逐个敲出来,也无可厚非。但是,如果你还在使用D2010作开发而不发挥新RTT原创 2013-08-28 20:16:45 · 205 阅读 · 0 评论 -
\t\tSQL SERVER 2005(2008)插入Blob(Image)字段范例
一般来说,插入Blob字段数据,多数以在前台程序以流的方式来执行,但有的时候,难免要写后台的SQL语句插入Blob字段数据。在 SQL Server 2000之前的版本,用SQL 插入Blob(TEXT)字段一直是麻烦问题,在SQL SERVER 2005(2008)之后的版本,终于有了极大简化,范例如下:INSERT INTO E_UserPhoto(UserID, CreateTime,Upd原创 2013-08-28 20:16:47 · 168 阅读 · 0 评论 -
解决“trying to modify read-only Field”问题!
后台使用SQL语句中,经常会关联自定义函数或视图,而CDS(TClientDataSet)对字段校验比较严格,涉及到的自定义函数或视图输出的字段,都会强制改为ReadOnly为True属性。当后台使用UniDAC+CDS,关联视图或自定义函数,为了数据一致性,有可能需要在前台界面上修改CDS相关的自定义函数输出的字段,即便是将 该字段设置为 readonly为false,或将其字段的 FieldD原创 2013-08-28 20:16:59 · 250 阅读 · 0 评论 -
\t\tOracle merge into ,需要注意的地方!
merge into 是特有的功能,相当于在 MSSQL中的if exists(...) update table else Insert into table.merge into 语法不仅没有if exists语法啰嗦,而且比if exists 还要高效很多。我经常用来在oracle之间同步数据库表。语法如下:MERGE INTO table_name alias1 USING (原创 2013-08-28 20:15:28 · 193 阅读 · 0 评论 -
\t\tBCP运行环境!
BCP是微软最出色的导入导出数据工具,一般导入导出速度在千条每秒以上,效果极佳。一般来说,用文本文件或Excel文件方式与MSSQL交互数据,BCP是最佳选择。BCP一般集成在MSSQL的客户端环境里,除非你真的是数据库开发人员,否则没有必要安装上百M的MSSQL客户端程序。因此,剥离出BCP运行环境还是有必要。在有安装MSSQL2K客户端机子上,进入:C:\Program Files\Micro原创 2013-08-28 20:15:05 · 305 阅读 · 0 评论 -
BCP运行环境!
BCP是微软最出色的导入导出数据工具,一般导入导出速度在千条每秒以上,效果极佳。一般来说,用文本文件或Excel文件方式与MSSQL交互数据,BCP是最佳选择。BCP一般集成在MSSQL的客户端环境里,除非你真的是数据库开发人员,否则没有必要安装上百M的MSSQL客户端程序。因此,剥离出BCP运行环境还是有必要。在有安装MSSQL2K客户端机子上,进入:C:\Program Files\Micro原创 2013-08-28 20:15:03 · 242 阅读 · 0 评论 -
\t\t解决Delphi2007 NewItem 丢失WebServices向导问题
如图所示,如果你的D2007的WebServices向导里没有后面三项内容,如,D2007 For lite 就没有。即没有 SOAP SERVER DATAMODULE、SOAP SERVER Interface、WSDL Importers,需要修改以下注册表内容:1、打开注册表以下目录HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Package Cac原创 2013-08-28 20:13:05 · 174 阅读 · 0 评论 -
JSON FOR VCL AND DEMO
这是一个开源的小类库,带有类库及其DEMO。让我们提前一起去把握D2009吧。http://www.torry.net/vcl/internet/html/lkJSON-1.04.zip 评论这张原创 2013-08-28 20:13:16 · 171 阅读 · 0 评论 -
TClientDataSet研究之一:一个分组函数
TClientDataSet是一个非常不错的内存数据集,不仅拥有TDataSet通用的数据集功能,还拥有其独特的查询分组统计功能。为了表述方便,TClientDataSet简称为CDS。设置分组功能如下操作:1、首先,必须建立CDS.IndexDefs索引。直接使用CDS.IndexFieldnames是不行,原因是这种简单的建立索引方式无法使用GroupingLevel 属性。2、设置Aggre原创 2013-08-28 20:13:20 · 215 阅读 · 0 评论 -
一个多年前的压缩解压缩(VCLZIP)函数。
一个多年前的压缩解压缩DLL函数,支持ZIP类型。控件为VCLZIP3.X,使用了FastMM4。VCLZIP是一个非常不错的压缩控件。调用示例:1、压缩单个文件ZipFolder(sFilePath, '', True, ExtractFileName(sHtmlFileName), sFilePath + sZipFileName, '');2、压缩文件夹:ZipFolder(sFilePat原创 2013-08-28 20:13:47 · 244 阅读 · 0 评论 -
\t\t【原创】TClientDataSet研究之二:取得当前记录的数据包和刷新当前记录包
delphi本身并不提供当前记录的数据封包,但我们有一个途经可以获取,通过TDataSetProvieder的GetRecords获取。GetRecords虽然简单,但不能排除Blob字段、只取唯一主键字段等。通过研究CDS的RefreshRecord方法,提取了当前记录的封包。UsesDBClient,Variants,DSIntf;type TMyCDS = class(TCustomC原创 2013-08-28 20:13:54 · 212 阅读 · 0 评论 -
delphi脚本解释器比较
Delphi由于RTTI功能有限因此,如果需要执一些动态脚本函数,比较麻烦(尽管D2009提供了一些反射功能)。由此催生了不少的第三方脚本解释器VCL控件。 比较出名的脚本解释器为TMS Scripter、FastScript(FastReport用到)、Remobjects PascalScript、PaxScripter。 下面比较上述脚本解释器的一些优点和缺点。原创 2013-08-28 20:14:03 · 251 阅读 · 0 评论 -
UniDAC 2.0 手动安装指导!
用过ODAC,SDAC,MyDAC,IBDAC,PgDAC(分别支持Oracle、MSSQL、MYSQL、IB/FB、PostgreSQL)等都知道,Corelab公司的数据集驱动非常不错,取数非常快,性能稳定。Corelab的DBX驱动也是做的非常不错。相反,Borland的DBX除了IB驱动做的可以之外,其他的DBX驱动BUG不断,尤其是oracle的驱动。但ODAC,SDAC,IBDAC这些原创 2013-08-28 20:14:38 · 221 阅读 · 0 评论