Delphi应用手册
曹牧
从牙牙学语到灵活运用,风风雨雨
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Delphi:重命名单元
使用IDE的重构工具:Delphi IDE提供了重构工具,如“重命名符号”功能(快捷键通常是Shift+F6),这可以帮助自动更新所有引用。使用Delphi的“查找”功能(通常可以通过快捷键Ctrl+Shift+F打开),搜索整个项目中对旧单元的引用。返回之前搜索到的所有引用位置,并更新它们以反映新的单元名称。避免在多个地方同时进行重命名:最好先在一个地方完成重命名,然后编译并测试整个项目,以确保没有遗漏任何引用。打开重命名后的单元文件,在文件的顶部更新unit声明以匹配新的文件名。原创 2025-12-24 14:55:23 · 273 阅读 · 0 评论 -
Delphi:Access voilation at adrress
启用详细映射文件:在项目选项中设置 Project -> Options -> Linker -> Map file 选择 detailed。在.map文件中查找:使用文本编辑器打开.map文件,在 Line numbers for 部分查找最接近000300CB的地址对应的行号。在Delphi中进行内存操作时,申请的内存必须进行初始化,避免使用未初始化的内存导致访问违规。5、建议按照上述方法定位具体的出错代码行,然后检查相关对象的生命周期管理和内存访问逻辑。4、内存管理注意事项。原创 2025-10-29 12:27:38 · 131 阅读 · 0 评论 -
Delphi字段值含有空格
使用TStringList.DelimitedText处理字符串时,若原字符串包含空格,会被自动识别为分隔符导致分割结果出现空格字段。数据库或用户输入时可能包含不可见的空白字符(如全角空格、制表符等),这些字符在显示时看似空格但实际ASCII值不同。显式处理空格:使用Trim函数去除两端空格,或StringReplace清除中间空格。例如,字符串'aa,b b,cc'用逗号分隔后,'b b'中的空格会被保留。代码缩进或对齐时误插入空格(如制表符转空格)也可能导致字段值意外包含空格。原创 2025-10-08 12:27:26 · 204 阅读 · 0 评论 -
Delphi nvl
在Delphi中,NVL函数的功能通常通过NULL相关函数实现,其作用类似于MS SQL的ISNULL或Oracle的NVL,用于处理变量为NULL时的默认值替换。字符串处理:结合StrUtils单元的其他函数(如IfThen)可实现更复杂的条件替换逻辑。数据库操作:在数据库查询结果处理中,可直接调用上述NVL函数避免NULL值导致的异常。此函数会检查Value是否为NULL,是则返回Default,否则返回原值1。对于特定类型(如字符串或数字),可重载函数以提高类型安全性。原创 2025-10-08 11:29:04 · 383 阅读 · 0 评论 -
Delphi:TStinglst 存储为一个olevar
内存管理:OleVariant会自动释放内存,但需确保TStringList和中间对象(如TMemoryStream)手动释放2。若需更灵活的数据结构,可考虑使用TObjectList或泛型容器(如TList<T>),但需注意COM交互时仍需转换为OleVariant。类型兼容性:OleVariant仅支持OLE兼容类型(如字符串、数字),若TStringList包含对象需额外处理3。性能优化:频繁操作大数据量时,优先使用数组形式而非字符串拼接,减少内存碎片。2. 序列化为数组形式。原创 2025-09-25 10:54:42 · 354 阅读 · 0 评论 -
Delphi:olevar是一个变体数组
动态类型:可存储混合类型数据(如整数、字符串、日期等),但元素必须为COM支持的类型。数据库记录集:通过ADO返回的Recordset常存储为OleVariant数组。性能:频繁操作大数据量时,优先预分配数组大小(VarArrayCreate)。COM兼容性:专为跨进程/跨机器通信设计,严格遵循OLE自动化标准。特性 OleVariant数组 普通Variant数组。跨语言交互:与VB、C#等COM客户端交换数据。1. OleVariant数组的核心特性。原创 2025-09-25 10:35:33 · 308 阅读 · 0 评论 -
Delphi:OleVariant
VarIsNull检测变量是否包含明确的NULL值(已分配内存但值为NULL)。VarIsEmpty检测变量是否未初始化(未分配内存)ShowMessage('v为NULL值');该函数专门用于检测数据库字段等场景中的NULL值。ShowMessage('v未赋值');这两种方法都能正确释放变体类型占用的资源。2、该函数检测变量是否处于未初始化状态。原创 2025-09-19 12:32:02 · 309 阅读 · 0 评论 -
Delphi Assigned
在Delphi中,Assigned是一个用于检查指针或对象引用是否已分配内存的函数,判断参数是否为nil。未初始化变量:未赋值的指针变量可能随机指向内存地址,Assigned仍返回True,需显式初始化为nil。局限性:仅检查指针是否为nil,不验证内存内容是否有效。与Free的区别:Free仅释放对象内存,不修改指针值;适用场景:主要用于验证对象实例、动态分配的内存指针或过程引用是否有效。底层行为:实际等效于检查P <> nil,但编译器优化后效率更高3。原创 2025-09-19 12:29:17 · 191 阅读 · 0 评论 -
delphi 最大String
在 Delphi 中,最大字符串长度取决于你所使用的字符串类型。String和AnsiString。从 Delphi 2005 开始,引入了 Unicode 支持,引入了和WideString。原创 2025-09-17 16:58:45 · 304 阅读 · 0 评论 -
Delphi:ClientDataSet存储大字段
在多层系统中,通过TDataSetProvider的OnGetData事件控制BLOB字段的按需加载,降低网络负载。ClientDataSet通过Data属性存储当前数据视图,Delta属性记录增量变更,适用于大字段的版本控制。对于BLOB字段,建议采用Base64编码转换为字符串存储,避免。在Delphi中,ClientDataSet存储大字段(如BLOB类型数据)可通过Base64编码实现安全传输与持久化。动态字段支持运行时调整结构,适应不同大小的二进制数据。原创 2025-09-17 09:24:25 · 246 阅读 · 0 评论 -
Delphi6:ClientDataSet和Base64编码
ClientDataSet支持内存数据副本操作,无需BDE,可通过SaveToFile保存为XML或CDS格式。ClientDataSet支持内存中的动态索引和分组,无需物理服务器交互。处理自增字段或二进制数据时,可通过DataSetProvider事件同步更新。在Delphi 6中,结合ClientDataSet和Base64编码可实现二进制数据的本地存储与传输。>>将二进制字段编码为Base64字符串存储;Base64通过64个ASCII字符表示二进制数据,>> 读取时解码还原为二进制数据。原创 2025-09-17 09:20:43 · 433 阅读 · 0 评论 -
Delphi中FieldDefs
FieldDefs存储TFieldDef对象的集合,每个TFieldDef对应数据表的一个字段定义,包括字段名称(Name)、数据类型(DataType)、大小(Size)等属性。FieldDefs用于定义表结构(即使数据集关闭时也可访问),而Fields是运行时字段值的集合,需在数据集打开后使用。在IDE中可通过右键菜单选择Fields Editor或属性编辑器的FieldDefs按钮添加字段。2、对于复杂字段(如计算字段),需结合TField类进一步配置。3、运行时动态定义。原创 2025-09-16 14:40:53 · 254 阅读 · 0 评论 -
Delphi 中集成 PDFium 库
Delphi 中集成 PDFium 库可实现 PDF 文件的查看、编辑、转换等功能。原创 2025-09-16 13:44:00 · 704 阅读 · 0 评论 -
Delphi6中实现PDF文件打印功能
推荐使用TMS PDF Component或llPDFLib等商业库,提供完整的PDF处理API。安装组件后,通过创建实例、加载文件、设置打印参数(如页码范围/质量)并调用打印方法实现。对于稳定性要求高的场景,建议采用DELPHIPDF文件打印解决方案,该开源工具专门处理打印顺序异常问题,支持多版本Delphi环境。通过导入Adobe Acrobat的ActiveX控件,在窗体添加PDF阅读器组件。属性指向PDF路径,调用控件的打印方法即可输出,适合需要预览后打印的场景。需先获取打印机列表,再通过。原创 2025-09-16 09:04:52 · 611 阅读 · 0 评论 -
在Delphi中实现DBGridEh复选框
首先需要在数据库表中添加一个用于存储复选框状态的字段,SQL Server中使用bit类型,Oracle中使用char(1)类型。if trim(column.Title.Caption)='全选' then begin。if column.Index=0 then begin //验证是否第一列。设置KeyList属性为"0"和"1",对应数据库中的值1。column.Title.Caption:='全消';column.Title.Caption:='全选';// 其他设置代码...原创 2025-09-12 11:14:25 · 573 阅读 · 0 评论 -
Delphi:initialization
在Delphi中,initialization和finalization是单元文件中的两个特殊代码块,用于控制单元的初始化和清理过程。finalization代码块在单元卸载时执行(程序正常退出时),且执行顺序与initialization相反。启动时:Form1→Form2→Form3的initialization和OnCreate顺序执行。程序启动时,所有单元的initialization按uses子句中的顺序依次执行。程序退出时,finalization按initialization的逆序执行。原创 2025-09-11 09:25:33 · 244 阅读 · 0 评论 -
Delphi中生成重复字符串
语法:DupeString(const AText: string;// 结果:'ABCABCABCABCABC'语法:StringOfChar(Ch: Char;// 结果:'AAAAAAAAAA'性能:StringOfChar用汇编实现,重复字符时效率更高。功能:重复整个字符串生成新字符串。示例:生成10个'A'的字符串。功能:重复单个字符生成字符串。需引用StrUtils单元。原创 2025-09-09 15:02:46 · 323 阅读 · 0 评论 -
Delphi:@取址运算符
总结:@是Delphi中操作指针的基础工具,用于直接获取内存地址,需与指针声明(如^Type)结合使用。@受编译选项{$T-}影响(若关闭则返回通用指针),而Addr始终返回目标类型的指针。需预先声明指针类型(如^Integer),再通过@操作符获取地址。在Delphi中,@符号是取址运算符,用于获取变量、函数或过程的内存地址。// 获取I的地址并赋给指针P。// PS指向S的地址。此时P指向变量I的内存位置。2、与指针类型配合使用。3、与Addr的区别。1、 获取变量地址。原创 2025-09-08 14:01:56 · 259 阅读 · 0 评论 -
Delphi:TStringlist.indexof
/ 返回1,表示'1'位于第2个位置(索引从0开始)Find:仅适用于已排序的列表,通过二分查找快速定位字符串位置,若列表未排序则可能返回错误索引。IndexOf:不受列表排序限制,通过线性搜索确保准确性,适用于所有场景。该方法通过线性搜索遍历列表中的每个元素,返回目标字符串首次出现的索引(若存在)。TStringList 的IndexOf方法用于查找字符串在未排序列表中的位置,若未找到,则返回-1。原创 2025-09-04 10:46:46 · 224 阅读 · 0 评论 -
Delphi:IndexDefs
IndexDefs 是 Delphi 编程中用于管理数据库表索引定义的关键属性,主要功能包括:原创 2025-08-29 10:17:46 · 132 阅读 · 0 评论 -
Dephi 创建唯一码
在 Delphi 中生成唯一号的方法有多种原创 2025-06-19 14:34:29 · 220 阅读 · 0 评论 -
Delphi6中Tbutton设置快捷键
在Delphi 6 中为TButton设置快捷键原创 2025-06-09 10:46:58 · 482 阅读 · 0 评论 -
Delphi6中实现键值对(Key-Value)存储
在Delphi6中实现键值对(Key-Value)存储原创 2025-06-05 09:39:19 · 319 阅读 · 0 评论 -
Delphi6取当前时间
在Delphi 6中,获取当前时间可以通过使用Now函数或DateTime函数来实现。这两种方法都可以得到当前的日期和时间,但是它们返回的数据类型略有不同。原创 2025-06-05 09:30:46 · 377 阅读 · 0 评论 -
Delphi中实现批量插入数据
在Delphi中实现批量插入数据有多种方法原创 2025-06-04 09:48:52 · 536 阅读 · 0 评论 -
Delphi字符串操作的常用函数
Delphi语言提供了丰富的字符串处理函数,以下是常用的字符串操作函数分类总结:一、基础字符串操作 二、子字符串处理 三、类型转换函数 四、高级处理函数 五、特殊处理。原创 2025-06-03 16:55:06 · 536 阅读 · 0 评论 -
Delphi 导入excel
Delphi导入Excel的常见方法可分为两种主流方案:基于OLE自动化操作Excel原生接口和利用第三方组件库。原创 2025-05-29 10:05:24 · 1407 阅读 · 0 评论 -
Delphi #30005转汉字
在Delphi中,#30005这类Unicode编码可通过以下方法转换为汉字原创 2025-05-29 09:50:47 · 457 阅读 · 0 评论 -
在动态报表制作中巧用DBGRID
在动态报表制作中巧用DBGRID 作者:未知 时间:2005-08-07 20:59 出处:编程爱好者网 摘要:在动态报表制作中巧用DBGRID分析问题 首先可想到一种笨办法,就是在确定报表中需要显示的字段后,对每一个字段的宽度赋予一个初始值(比如80),对于需要调整的字段再通过编辑框进行输入修改。这样的确可以达到预期目的,但由于不直观,可能需要多次调整,影响了效率和方便原创 2005-10-13 15:45:00 · 1006 阅读 · 0 评论 -
系统错误代码大全
系统错误代码大全 注:本表内容仅供参考,详细的错误代码请联系Microsoft的技术人员。请按 ctrl+f 输入你的错误代码查找Windows 系统错误代码大全 0101 属于其他进程的专用标志。 0102 标志已经设置,无法关闭。 0103 无法再次设置该标志。 0104 中断时无法请求专用标志。 0105 此标志先前的所有权已终止。 0106 请将软盘插入驱动器 %1。 0107 后续软盘原创 2005-11-10 09:24:00 · 4875 阅读 · 1 评论 -
delphi 公共函数
让TDBNavigator变透明procedure TForm1.Button1Click(Sender: TObject);var i : Integer; x : Integer;begin for i := DBNavigator1.ControlCount - 1 downto 0 do begin x := DBNavigator1.Left + DBNaviga原创 2005-11-10 09:22:00 · 1549 阅读 · 0 评论 -
Delphi 快捷键列表
窗口类:1.Shift+F12 快速查找窗体并打开2.Ctrl+B Buffer List窗口3.F12 切换EDITOR,FORM4.Ctrl+F3 弹出Call Stack窗口5.Alt+鼠标左键 可以块选代码,用来删除对齐的重复代码非常有用6.Ctrl+Tab 在Inspector中切换Pr原创 2006-01-18 17:05:00 · 923 阅读 · 0 评论 -
ADO与ODBC的区别- -
有很多种使用数据库的方法,对大多数数据库来说,选择C++这种产品也许并不适宜。我们知道,像dBASE IV,FoxPro,Oracle和Access这样的产品是完全以数据库管理为中心的。事实上,这些产品非常善于创建数据库管理器,以至于它们确实并不善于做太多其它的工作。即使要用更通用化而非更专用化的数据库产品来执行一些类型的工作,在使程序设计更容易这一方面,像VisualBasic和Delphi这样原创 2006-01-18 17:19:00 · 950 阅读 · 0 评论 -
Delphi語法筆記
单元 程序头:uses(子句列出了那些链接到程序的单元),block(声明,命令语句) 一个程序包括: • 一个程序头(program heading) • 一个uses 子句(可选),和 • 一个包含声明和命令语句的块(block) 一个单元以单元头(unit heading)开始,后面跟interface、implementation、initialization 和finalization原创 2006-01-18 17:20:00 · 1238 阅读 · 0 评论 -
多维动态数组作为函数传递参数
var dMatrix:variant; //定义变体类型 dMatrix:=VarArrayCreate([0,n-1,0,n-1],varDouble); //创建二维double型数组并指定各维的长度定义过程(函数):Procedure TestArray(adMatrix:Variant);程序中调用过程(函数):TestArray(dMatrix);原创 2006-01-19 16:16:00 · 1378 阅读 · 0 评论 -
一名Delphi程序员的开发习惯
有关开发习惯的一些想法,如鲠在喉,不吐不快。究其发贴动机,当然不排除有骗取参与分的可能,但另一方面,也希望能给同行(念Xing)者提供一些建议,或者参考(希望不是误人子弟)。同时,也希望各位能够就我的这些陋习,发表一点看法,给出批评和指正的意见。谢谢。 一.建立工程目录 首先,第一步要做的,当然是给新项目建一个单独的目录(别笑)。目录名称与项目名称同名,或者另取一个也可,只要清楚、简练。然后,在此原创 2006-01-18 17:17:00 · 969 阅读 · 0 评论 -
New 和 GetMem 的不同之处
如果操作一个 record 指针中的字符串变量,会不会丢失 string 的内 存空间,造成内存泄漏? 结果是:使用 New() 分配的内存,会自动初始化 record 的内容,并且在 Dispose 时自动 清除所有已分配的内存,包括 string 或其他动态数组的内存。GetMem/FreeMem 没有这个 性质。事实上,New() 中调用了 GetMem,并且执行了一些初始化的操作。转载 2010-03-11 14:38:00 · 486 阅读 · 0 评论 -
Delphi中MVC模式的实现
一、 参考资料1、J2EE技术内幕(J2EE Unleashed) 机械工业出版社(SAMS) 二、 传统的应用开发模式 传统的应用开发是围绕着事件驱动用户界面来组织应用结构。在该模式中,开发人员创建界面,然后在界面的事件中编写相应的动作。对于小型,业务清晰,而且不用重复进行功能、业务修改的应用系统来说,这种模式明显很合适,不但直观,而且方便,开发与运行效率也很高。但对转载 2011-06-09 11:40:00 · 1027 阅读 · 0 评论 -
学生成绩单出炉啦
材料:(1)数据库,mysql(2)场景为打印学生成绩单1、创建数据表,学生表、课程表和分数表。学生成绩单出炉啦CREATE TABLE `student` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT,原创 2011-08-30 10:00:36 · 1041 阅读 · 0 评论 -
Delphi日期函数
1.Date 功能说明:返回当前的日期。 参考实例: procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption := 今天是: + DateToStr(Date); end; Label显示为:今天是2005年1月1日。 2.DateToStr 功能说明:将日期型转换为字符型。 参考原创 2005-10-08 15:56:00 · 2807 阅读 · 0 评论
分享