Delphi7开发环境的配置
最近维护一个 Delphi 老程序, 是那种没有丝毫模块化概念的代码, 上千行的函数比比皆是, Unit 之前相互引用错综复杂. 光看代码就头大. 工欲善其事, 必先利其器, 这话真的不假. 尤其delphi 7是十多年前的产品了, 当时看是非常完美的IDE, 但放在现在看, 有很多东西缺失了, 比如代码折叠, outline和编辑器双向navigate.
我最终在几个插件的帮助下, 厘清了代码. 帮助最大的工具有:
1. 在dummzeuch版GExperts的Code Format 功能
2. CnPack的Procedure list 和Source Highlight 功能
3. Gexperts的 grep 功能
但凡我使用的工具, 一定要将它配的特别顺手才行. 下面是这次Delphi 7的插件配置.
Delphi7 Lite Full 版本(国人整理集成的优化版)地址 http://www.delphifans.com/SoftView/SoftView_2641.html ,该版本已包括Gexperts(已集成dummzeuch的code format)和CnPack和Delphi Speedup和DDevExtensions.
=================================
Delphi Speedup
=================================
功能: 提示Delphi 7的启动速度
下载: http://andy.jgknet.de/dspeedup
=================================
GExperts
=================================
GExperts原版:
http://www.gexperts.org
常用的功能:
Grep 搜索
Open file, 可代替Delphi自身的View Form/View Unit
**其他配置: 在GExperts Configuration/Code Editor中, 启用editor enhancement, 然后可以配置editor的toolbar, 将 Editor Experts(包含很多编辑增强功能) 加到toolbar上, 方便以后使用.
dummzeuch版GExperts: 增加了"全文代码格式化"功能
http://www.dummzeuch.de/delphi/gexperts/english.html
安装方法: 解压后, 将 preview.pas 和所有的.ini, 以及 editorexpert/GExpertsD7.dll 复制到 gexperts的安装目录中.
使用方法: 在gexperts的Editor Experts中, 能找到 Code formatter菜单项.
=================================
CnPack 插件
=================================
CnPack最有特点的功能是:
Code outline,
为Editor 加了行号,
Procedure list, 显示当前Unit中的class和procedure, 而且还会在Editor中, 加一个工具条, 能显示当前光标所在的类和函数, 这个非常赞, 比GExperts的Procedure List功能更强.
本人非常喜欢Notepad++的Highlight selected occurrences功能, 用其他IDE/Editor都要找到这个功能.
Delphi 方面找了很久, 只有CnPack Source Highlight插件有一个类似的功能, 高亮显示当前标识符, 需要打开 Enable Background Highlight Current Identifier at Cursor 选项. 另外, 关闭Enable background highlight current line
CnPack由于功能很多, 我仅仅启用如下几个插件, 以免显得杂乱
Form Design Wizard
Code Editor Wizard
Procedure List Wizard
IDE Main Form Enhancements
Editor Enhancements, 编辑器增加行号, tab头关闭其他文件
Source Highlight Enhancements, 高亮线条匹配begin-end,
IDE Enahancements Settings
Form Designer Enhancements
Messagebox visual designer
=================================
Delphi IDE Theme editor工具, 我仍选Obsidian
必须在cnpack/source highlight settings中, 关闭 Enable background highlight current line, 否则当前行看不清.
=================================
主页:http://code.google.com/p/delphi-ide-theme-editor/
网盘下载: http://www.everbox.com/f/97PQlnbm1o6sD8pCEWcqguAIPo
=================================
类库和控件列表
=================================
Delphi社区不太活跃了, 类库不太丰富, 和python社区简直差十万八千里, 下面是我常用到的类库.
必备库: RxLib(是并入JVCL前的版本): 有很多不错VCL组件, 另包含几个Util单元(RxShell/StrUtils/FileUtil/DateUtil)
http://sourceforge.net/projects/rxlib/
51delphi.com窑洞主人常用的控件包
http://www.cnblogs.com/xalion/archive/2012/01/09/2317246.html
TurboPower的几个库
ShellShock:Windows Shell的功能封装
SysTools:正则,条码,log, Expression 分析, 甚至包含二维条码控件
串口通讯组件包
http://www.bergsoft.net/en-us/product/next-grid/overview.htm
帮助文档: http://developer.bergsoft.net/topic.php?topic_id=vcl/6/tnextgrid6/addrow
http://www.2ccc.com/article.asp?articleid=5354
FastReport For Delphi7 通用安装方法
http://www.cnblogs.com/MaxWoods/archive/2010/03/07/1680297.html
FastReport使用经验
http://www.cnblogs.com/colincode/archive/2011/03/30/1999604.html
FastReport 组件属性介绍:
http://kabeiroy.blog.163.com/blog/static/95781451201032984637177/
FastReport报表中的memo, 有的memo会出现中文不显示, 只显示英文部分.
这个问题的原因是: FastReport会将widestrings属性以utf8格式保存至dfm文件中, 而delphi对于utf8支持度不好, 当FastReport要从dfm读取widestrings属性时可能已经拿不到完整的信息了.
解决方法即如何避免将report中的中文字符保存到dfm中, 最简单的方法有如下两个:
第一个是: 不要将report保存到dfm文件中, 而是保存到单独的fr文件中.
第二个是: 将report保存到dfm文件中, 但对中文memo的text属性进行动态赋值.
网上流传通过调整memo的字体名和字符集属性, 比如字体选雅黑,字符集选GB2312_CHARSET, 经我测试, 有时候并不管用.
Delphi 2007版以上, 很多组件: QDAC, QJson, QXml 组件: http://blog.qdac.cc/
一套Delphi代码稳定的IOS和Android两个平台的APP: http://www.orangeui.cn/index.php
SqlLite封装:
选择的是 Simple Delphi Wrapper
http://www.itwriting.com/blog/?page_id=659
下载非unicode那个版本(unicode版本仅适用于Delphi 2009以上)
特点:
1. 需要很应用程序一起发布sqlite3.dll,
2. delphi 项目中需要将wrapper的SQLite3.pas和SQLiteTable3.pas加进去.
3. 并不是vcl组件, 数据结果集不是data aware的.
因为Simple Delphi Wrapper并不是data aware组件, fastreport的dataset就不能和它连.
我的解决方法是: 使用使用开源的SQLite ODBC Driver(http://www.ch-werner.de/sqliteodbc/), 注意不管是32bit/64bit的windows, 我们都应该使用32bit的odbc驱动, 因为Delphi7开发出的程序一定是32bit的.
在Delphi中, 用TADOConnection连DB, TADOConnection 选择 Microsoft OLE DB Provider for ODBC Drivers 方式, 连接connectionString的写法是
SyncPragma=NORMAL;StepAPI=0;
这个方法的好处是: 不必使用odbc管理器dns, 同时TADOQuery是Data aware组件, 这就能和FastReport的 frxDBDataset相联了.
为什么使用SQLite+Delphi
=======================
单机程序选择数据库, Windows下无非是Access/SQLite/SQL Server compact. SQLite我有几年的使用经验, 另外, SQLite和delphi真是天作之合. 原因是:
delphi字符串使用单引号括起来, 标准SQL的字符串也是用单引号括起来, 这就带来一个问题, 即拼SQL时, 需要转义SQL字符串的单引号, 代码可读性极差.
SQLite SQL字符串可以是用双引号括着, 也就是说在Delphi源码中无需转义单引号了. 示例:
sql:=Format('Delete from parts where part_code="%s"' , [partCode]) ;
FDM_DataModule.ExecuteSQL(sql);
SQLite(快速上手版)笔记
=======================
http://www.cnblogs.com/codc-5117/archive/2012/09/06/2672855.html
SQLite通过值的表示法来判断其类型,下面就是SQLite的推理方法:
1.SQL语句中用单引号或双引号括起来的文字被指派为TEXT。
2.如果文字是未用引号括起来的数据,并且没有小数点和指数,被指派为INTEGER。
3.如果文字是未用引号括起来的数据,并且带有小数点或指数,被指派为REAL。
4.用NULL说明的值被指派为NULL存储类。
5.如果一个值的格式为X'ABCD',其中ABCD为16进制数字,则该值被指派为BLOB。X前缀大小写皆可。