![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Delphi应用心得
爱编程的老五
学海无涯苦作舟,一入编程众人避
展开
-
Delphi - cxGrid多列头设计
cxGrid的多列头处理方式原创 2023-06-03 23:31:09 · 288 阅读 · 0 评论 -
Delphi-数据库应用的特定控件解耦设计
Delphi的UI与数据库操作控件的解耦设计原创 2023-04-12 10:10:53 · 192 阅读 · 0 评论 -
使用Delphi XE的Helper类实现链式编程风格
使用Delphi 的Helper类特性实现链式编程代码风格原创 2023-02-02 08:39:40 · 411 阅读 · 0 评论 -
cxGrid自适应列宽
cxGrid自适应列宽原创 2022-12-08 19:58:14 · 271 阅读 · 0 评论 -
DORM框架的第一个测试用例
因为很早前学习了Java的Hibernate(现在纳入Spring家族里作为JPA的唯一实现存在),对于对象持久化框架产生了浓厚的兴趣,甚至有一段时间尝试写一个Delphi版的ORM框架出来;写了一部分后因为不可言说的原因就放弃了。后来因为工作转向运维支持和其他开发语言,就没有再深入去了解Delphi的ORM框架。最近因为工作需要,再次回到Delphi上来,然后对ORM这个曾经投入了极大热情的东东也再次有了了解的兴趣。上网搜索了下“Delphi ORM框架”,找到几个ORM框架:EntityDac:原创 2021-10-31 21:31:44 · 420 阅读 · 0 评论 -
FireDAC连接SQL Server的设置
使用FDConnection控件连接数据库,在Params属性里设置Database:数据库名称DriverID:MSSQLPassword:连接数据库的用户密码Server:数据库服务器的名称或IP地址UserName:连接数据库的用户名也可以使用另外一种方式来连接数据库,就是使用FDManager来实现连接,使用FDManager还可以实现连接池的效果。具体实现方法是给FDManager的ConnectionDefs定义连接参数,例子如下:var Def: IFDSt.原创 2021-10-31 18:31:05 · 970 阅读 · 0 评论 -
应用程序自动更新的实现(delphi)
前段时间,在现场调试程序,因为系统已经投入运行,然后用户端有十几个。每次修改了bug后,都要跑到每个用户端去拷贝一次,实在忍受不了。就实现了应用程序版本检查及更新的功能。实现思路如下:1.下载更新使用单独的更新程序: 从服务端下载程序文件,然后覆盖旧版本。2. 主程序启动时检查版本(从服务端获取最新版本信息,比较自身版本信息),如果版本不一致则启动更新程序,并结束主程序的运行。因为我这个项目的服务端已经采用了ftp技术,因此只需要在服务端建立一个程序更新目录即可.更新程序的实现如..原创 2021-05-07 17:28:57 · 2074 阅读 · 4 评论 -
Delphi中使用Imageen控件将图像文件转换成PDF
因为项目客户要求,要将扫描产生的图像文件转存为PDF。Imageenio有一个方法savetopdf。这个方法可以生成一个PDF,不过生成的PDF文档体积比原来的图片文件大了10几倍,图像文件不到1M,产生的PDF却有接近20M。之所以这样是没有设置输出的PDF参数。Iamgeenio 有个params参数,这个参数里可以设置输出到PDF的压缩率,纸张大小等参数。调整后再次输出PDF,大小与原图像文件大小差不多。...原创 2021-04-20 18:07:31 · 2004 阅读 · 0 评论 -
idFtp操作时报错:Accept timed out
因为项目需要上传下载大量的文件,因此打算架设一个ftp服务器,然后客户端使用idFtp来操作。procedure TForm1.connect;begin IdFtp.Host := '127.0.0.1'; IdFtp.port := 21; IdFTP.Username := 'ftpuser'; IdFTP.Password := '123'; IdFtp.Connect;end;procedure TForm1.getList(dir: stri原创 2021-04-10 21:54:36 · 1519 阅读 · 0 评论 -
信息管理系统开发框架设计(九) - 程序运行框架
在前面我设计了读取系统配置信息的config模块,与DBMS交互的DBHelper模块,写日志的Logger模块,MVC模块,这些基本都是独立存在的积木块,我们需要搭建一个组装平台,例如我们如何指定运行的主程序界面?如何加载与管理各个业务模块,每个业务模块就是一个MVC的实例?如何方便的加入新的业务模块?我们可以参考下Delphi的Application的实现逻辑,在Project的source里,如果第一行调用Application.CreateForm...原创 2020-06-09 10:01:11 · 341 阅读 · 0 评论 -
信息管理系统开发框架设计(八) - MVC - 控制器
在MVC模式里controller处于一个核心的位置,它要负责接受从view发来的用户交互请求,将用户请求转发给商业对象进行处理,然后从商业对象获取处理结果,选择合适的视图呈现给用户。也即controller有监听view的用户操作并及时响应 调用model进行用户的交互信息处理,然后将处理结果以恰当的方式(对话框,或者新的视图等)呈现给用户。如何监听view的操作?在delphi的VCL控件里封装了很多的事件,我们需要在controller里处理这些事件,然后在创建view时,把事件方法赋值给原创 2020-05-23 20:14:51 · 241 阅读 · 0 评论 -
信息管理系统开发框架设计(七) - MVC框架 - View
在efframework中,view部分的实现其实就是一个delphi的form。分析信息管理的基础功能,界面可以分为2类型:信息列表界面: 提供一个信息列表(可以用一个表格呈现), 提供用户对信息进行操作的各种可视化功能组件(如菜单、按钮等)),基本功能有新增,修改,删除,查看。通过这些可视组件,用户发起操作请求,相应的controller监听到请求后,可能呈现信息编辑界面View给用户进行信息编辑/查阅,或者调用关联的model执行用户请求(如删除当前信息行)。 信息编辑界面: 提供用原创 2020-05-19 23:56:03 · 351 阅读 · 0 评论 -
信息管理系统开发框架设计(六) - MVC框架 - model设计
作为信息系统最关键的部分,model这个商业对象需要实现以下功能:1.通过数据库访问接口(即efframework的DBHelper)实现数据持久化(即保存到DBMS中)2. 从数据库从提取某个商业对象的持久化数据并映射到商业对象实例。3.实现商业逻辑,例如保存前的数据校验,其他model的关联更新等在delphi完全面向对象的设计里,我们可以很容易的实现以上逻辑。在面向业务层面,model需要提供以下几个操作接口:1.提供公共属性对应用户输入栏位,这些栏位与DBMS中的table对原创 2020-05-18 22:42:25 · 338 阅读 · 0 评论 -
信息管理系统开发框架设计(五) - MVC框架
MVC是很流行的的一种web开发模式。通过对不同功能的划分,可以分块开发,让前端设计人员专注于界面开发,让后端开发人员专注于业务对象的开发。为了将前端界面与后端业务对象解耦,于是引进了控制器来连接前端用户界面与后端业务对象。其实这种开发模式也可以运用到CS方案的开发中。让用户界面模块专注于界面的设计,至于对用户的请求做何种响应处理,那是业务对象干的事情,控制器负责监听操作界面的用户请求并转发给对应的业务对象,或者将业务对象的数据绑定到用户操作界面上。从头解释下MVC的概念及思路:M:即Model原创 2020-05-18 06:05:23 · 996 阅读 · 0 评论 -
信息管理系统开发框架设计(四) - 数据库访问模块
这个模块本质上就是一个TDataModule,我采用了 ado来作为访问数据库的组件。为了隔离其他模块对ado组件的依赖,我在其他实现模块中使用TClientDataSet来作为操作的数据集。实现了以下方法:execSql -执行一条更新SQL代码,不需要返回结果,如果有异常就自动抛出。getData - 执行一条select SQL代码,同时返回OleVariant类型的数据集,这个数据...原创 2020-05-10 10:11:05 · 655 阅读 · 0 评论 -
信息管理系统开发框架设计(三)- 日志管理
java中有一个log4j的日志管理包,可以很方便的实现对日志的管理。在delphi平台,作者没有发现类似的实现类,不过delphi中要实现类似的功能比较简单,封装下日志相关的逻辑规则即可。与日志管理相关的有如下几点:1.日志文件存放路径2.日志文件名称3.日志类型管理4.日志的可捕捉类型配置5.写日志6.调用接口关于日志文件名称、存放路径以及日志捕捉类型...原创 2020-05-10 09:22:23 · 529 阅读 · 0 评论 -
信息管理系统开发框架设计(二)- 配置文件管理模块
一个应用程序一般都会存在使用配置文件进行一些基础的动态配置信息,从而避免为每个客户编译不同版本的,从而增加应用程序的灵活性;比如在配置文件中存储访问数据库的一些信息(如连接字符串),或者配置系统捕捉日志的类型,日志文件的类型存放位置等等信息。因此配置文件的读取操作就较为普通。配置文件一般会采用ini/xml/json类型来做配置,当然这些文件基本都是文本文件类型,因此也可以根据需要自定义其他类...原创 2020-05-08 17:19:41 · 420 阅读 · 0 评论 -
信息管理系统开发框架设计(一)-efinfo framework
工作这么多年,基本都在信息管理系统的开发与实施里兜兜转转。工作时也写过一些框架性的东西,因为要结合旧代码,很少系统性的思考。因为这次疫情的影响,难道有这么多的空闲时间来回顾过往的工作经历。也就有了整理一个开发框架的想法。我本人使用的delphi居多,delphi的开源框架其实也不少,如cnpack,remobjects, 但很少有关于信息管理系统的整体架构性的开发框架。何谓整体架构性的开发框架...原创 2020-05-08 17:02:37 · 745 阅读 · 0 评论 -
DBGrid的输入焦点控制
在Delphi中,默认切换输入控件的输入焦点的按键是Tab,这个默认有点不符合输入习惯,大多数人习惯按Enter来切换到下一个输入单元。在dbgrid这个控件中,当前输入焦点列的设置是通过selectedIndex来控制的。如果我们想在用户按Enter后切换到下一列,可以在dbgrid的keypress事件里添加处理逻辑:if key = #13 thenbegin ifdbg...原创 2020-04-25 10:42:29 · 385 阅读 · 0 评论 -
delphi之comboBox的事件CloseUp与select
delphi的comboBox的事件里有CloseUp与select,这两个有什么区别?两者都是发生在comboBox下来列表点选之后。不过CloseUp事件发生在将选择的内容赋值给ComboBox.text之前,而select则是发生在ComboBox.text赋值之后。...原创 2020-04-04 15:35:26 · 1866 阅读 · 0 评论 -
加壳exe的方法--delphi实现
EXE文件加密器的原理:建立两个文件,一个用来添加资源到另外一个EXE文件里面,称为添加程序。另外一个被添加的EXE文件称为头文件。该程序的功能是把添加到自己里面的文件读出来。Windows下的EXE文件结构比较复杂,有的程序还有校验和,当发现自己被改变后会认为自己被病毒感染而拒绝执行。所以我们把文件添加到自己的程序里面,这样就不会改变原来的文件结构了。我们先写一个添加函数,该函数的功能是转载 2009-09-08 09:01:00 · 4341 阅读 · 0 评论 -
DELPHI中创建语言资源文档DLL的方法
A.定义RC文件, 格式: 资源串常量,"字符串" B.定义常量pas文件, 格式: 资源串常量=数值C.将RC编译成RES brcc32.exe 文件名.rcD.定义语言档项目dpr,将BC两项的pas,res包含进来E.编译DLL dcc32 enLang.dpr -B -U 注意:-U跟输出目录之间没有空格调用: API函数,LoadLibrary,LoadString原创 2008-10-20 16:52:00 · 1302 阅读 · 5 评论 -
DELPHI中ADOQUERY的传参数法与Oracle的GROUP BY子句
前段时间写一个程序,要同时适应MSSQL与ORACLE两个数据库下。在MSSQL下运行良好,但在ORACLE下却报“ORA-00979:not a GROUP BY express"错误。看SQL是一个普通的GROUP BY语句,在PL/SQL Developer下可以正常运行,百思不得其解,GOOGLE了许多也没有找到答案。无奈之下请教同事,曰:ORACLE数据库下ADOQUERY不支持参数传原创 2007-02-14 13:27:00 · 2756 阅读 · 3 评论 -
Delphi中的对象编程
几次参加面试的过程中,我对应聘的Delphi程序员均问了以下问题:”Pascal是第三代面向过程的编程语言,但从八十年代就转为面向对象了,你对Delphi目前的面向对象支持有什么样的看法?”.我相信很多资深的Delphi设计师者阅读了大量的Borland公司书写的Delphi源码.这些源码是这些设计师们的良师益友.我也看了很多程序员用Delphi书写的代码.他们写的代码与大学时教我Basic课程的原创 2004-12-13 16:46:00 · 1235 阅读 · 0 评论 -
感悟Delphi
从使用VFP到使用DELPHI,其间我经历了一个痛苦的转折.不知不觉,使用Delphi也已有了五年的历史.从最初对Delphi大名的敬而远之,再到慢慢地熟悉,直至溶入自己的编程思维.Delphi曾给了我莫大的惊喜,从读李维的三部头到深入体会Delphi的思想,再后来领会了Delphi目前的无奈.我在想,Delphi自他的架构师离开Borland的那一天,也就注定了今天的结局.虽然我仍在使用Delp原创 2004-12-13 16:20:00 · 1027 阅读 · 0 评论