随笔分类 -  Delphi

DELPHI的原子世界
摘要:在使用DELPHI开发软件的过程中,我们就像草原上一群快乐牛羊,无忧无虑地享受着Object Pascal语言为我们带来的阳光和各种VCL控件提供的丰富的水草。抬头望望无边无际蔚蓝的天空,低头品尝大地上茂密的青草,谁会去想宇宙有多大,比分 子和原子更小的东西是什么?那是哲学家的事。而哲学家此时正坐在高高的山顶上,仰望宇宙星云变换,凝视地上小虫的爬行,蓦然回头,对我们这群吃草的牛羊点 头微笑。随手扯起一根小草,轻轻地含在嘴里,闭上眼睛细细品尝,不知道这根青草在哲学家的嘴里是什么味道?只是,他的脸上一直带着满意的微笑。 认识和了解DELPHI微观的原子世界,可以使我们彻底理解DELPHI的... 阅读全文

posted @ 2011-11-11 00:57 Handll 阅读(384) 评论(0) 推荐(0)

VCL 窗口函数注册机制研究手记,兼与 MFC 比较(转)
摘要:VCL 窗口函数注册机制研究手记 ,兼与 MFC 比较By 王捷 cheka@yeah.net ( 转载请保留此信息 ) 这个名字起的有些耸人听闻 ,无他意 ,只为吸引眼球而已 ,如果您对下列关键词有兴趣 ,希望不要错过本文 :1. VCL 可视组件在内存中的分页式管理 ;2. 让系统回调类的成员方法3. Delphi 中汇编指令的使用4. Hardcore5. 第 4 条是骗你的 我们知道 Windows 平台上的 GUI 程序都必须遵循 Windows 的消息响应机制 ,可以简单概括如下 ,所有的窗口控件都向系统注册自身的窗口函数 ,运行期间消息可被指派至特定窗口控件的窗口函数处理。对消息 阅读全文

posted @ 2011-11-11 00:56 Handll 阅读(289) 评论(0) 推荐(0)

Delphi的对象机制浅探
摘要:savetime2k@yahoo.com2004-1-3前几天开始阅读 VCL 源代码,可是几个基类的继承代码把我看得头大。在大富翁请教了几位仁兄后,我还是对Delphi对象的创建和方法调用原理不太清楚。最后只好临时啃了一下汇编,把Delphi对象操作的几个关键的方法勘察了一遍。你可以通过以下链接知道我为什么要做这件事:http://www.delphibbs.com/delphibbs/dispq.asp?lid=2385681这是我花费一个晚上的测试结果,更多的细节只能以后在学习中再去了解。主要测试项目为:⊙ 测试目标:查看 TObject.Create 的编译器实现⊙ 测试目标:查看 c 阅读全文

posted @ 2011-11-11 00:56 Handll 阅读(275) 评论(0) 推荐(0)

Delphi中的oldcreateorder属性
摘要:如果OldCreateOrder为False,则OnCreate将在所有构造函数执行完之后才执行。如果OldCreateOrder为True,则OnCreate在TCustomForm的构造函数执行完就执行。同时发现D7有这个属性而D5没有这个属性,D5没有此属性但创建顺序相当于OldCreateOrder为False(与D7的默认值是一样的)http://blog.csdn.net/linzhengqun/archive/2005/10/01/493746.aspx 阅读全文

posted @ 2011-11-11 00:55 Handll 阅读(483) 评论(0) 推荐(0)

如何让DbGrid支持鼠标滚轮滚动 转
摘要:在主窗体上加一个ApplicationEvents控件(控件在Additional面板中), 在它的OnMessage事件中加入下述代码,一切搞定~!procedure TFrm_main_usermanager.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); var hWnd: THandle; aName: array [0..255] of char;begin //给DBGrid加上鼠标滚轮 if Msg.message <> WM_MOUSEWHEEL then exit; ... 阅读全文

posted @ 2011-11-11 00:55 Handll 阅读(181) 评论(0) 推荐(0)

借用VCL数据库连接相关模块
摘要:uses AdoConEd ADOConEd.EditConnectionString(ADOConnection);将出现如下窗口:uses ADODB;procedure TForm1.Button2Click(Sender: TObject);var str:string;begin PromptDataSource(Handle,str);end;将出现如下窗口: 阅读全文

posted @ 2011-11-11 00:53 Handll 阅读(179) 评论(0) 推荐(0)

利用ScktSrvr打造多功能Socket服务器
摘要:Socket服务端编程中最重要的也是最难 处理的工作便是客户请求的处理和数据的接收和发送,如果每一个Socket服务器应用程序的开发都要从头到尾处理这些事情的话,人将会很累,也会浪费大量 时间。试想,如果有一个通用的程序把客户请求处理和数据的接收、发送都处理好了,程序员只需要在不同的应用中对接收到的数据进行不同的解析并生成返回的数 据包,再由这个通用程序将数据包传回客户端,这样,程序设计的工作将会轻松许多。 用Delphi进行过三层数据库应用开发的程序员一定对 Borland公司的Borland Socket Server(ScktSrvr.exe)不陌生。这是一个典型的Socket服... 阅读全文

posted @ 2011-11-11 00:50 Handll 阅读(593) 评论(0) 推荐(0)

多线程调用COM组件的体会(CoInitialize)
摘要:转自:http://www.cnblogs.com/manors/archive/2010/05/17/COM_Initialize_STA_MTA.html 调用任何COM组件之前,你必须首先初始化COM套件环境,即调用CoInitialize或CoInitializeEx。COM套件环境在线程 的生存周期内有效,线程退出前需要调用CoUninitialize释放COM套件。所谓COM套件,实际上是微软为了方便大家理解而起的一个名字,不过个人认为改名词很难理解。COM套件只指COM组件运行时的环境,其中包括 COM组件的数据、变量、线程调度方式。COM套件分为两种模式,单线程套件(STA)和 阅读全文

posted @ 2011-11-11 00:48 Handll 阅读(1828) 评论(0) 推荐(0)

Delphi中Stream到Variant的转化函数
摘要:procedure VariantToStream (const v : OleVariant; Stream : TMemoryStream); var p : pointer; begin Stream.Position := 0; Stream.Size := VarArrayHighBound (v, 1) - VarArrayLowBound (v, 1) + 1; p := VarArrayLock (v); Stream.Write (p^, Stream.Size); VarArrayUnlock (v); Stream.Position := 0; en... 阅读全文

posted @ 2011-11-11 00:47 Handll 阅读(230) 评论(0) 推荐(0)

【转】 delphi --- WinSocket应用
摘要:最终编辑 e__jin Socket 通信在Windows 中是排队的形式由操作系统处理,而且接收方和发送方相互协同工作,否则就会造成数据丢失。因此,不能用类似于for 语句的循环来实现对多组数据的发送,更不能用循环语句来接收数据。比如,你可以用for 语句来实型若干文件的复制,这很普遍也很正常,但在 Socket编程以及大多数网络应用编程中都是行不通的,因为网络通信的基本方式是请求和应答。另外,和所有的通信编程一样,Socket编程也遵循数据 分包传送这一基本规则。也就是说,在 Socket编程中,每次发送和接收一个包,以保证数据传输的安全性和稳定性,同时也不至于过多地占用系统资源。... 阅读全文

posted @ 2011-11-11 00:47 Handll 阅读(297) 评论(0) 推荐(0)

Delphi中Aarry of Const 与 Variant研究
摘要:为何要使用 Aarry of Const呢?由于 Aarry of Const是一种优化过的变体数组,我们让她来做传入参数,相当灵活和方便。 试想一下,如果三层客户端接口为:OpenQuery([ParamName1,ParamValue1,ParamName2......]),客户端 接口函数会显得非常简洁和一目了然,可以接受动态的参数名和参数值。当然,在传入参数,你还可以使用TParams做传入参数,处理起来也是很灵活和方 便。但我个人不太喜欢创建对象方式的传入参数。你还可以用字符串做传入参数,然后再解析,这种方式不是很严谨,而且敲代码的人会很累和容易导致人为录入错 误。 对比Aa... 阅读全文

posted @ 2011-11-11 00:47 Handll 阅读(361) 评论(0) 推荐(0)

【转】 delphi --- 用Indy组件开发Socket应用程序
摘要:最终编辑 e__jin Delphi 7中带有两套TCP Socket组件:Indy Socket组件(IdTCPClient和IdTCPServer)和Delphi原生的TCP Socket组件(ClientSocket和ServerSocket)。 但是,Borland已宣称ClientSocket和ServerSocket组件即将被废弃,建议用相应的Indy组件来代替。因此,笔者使用了 Indy。本文在对Indy进行简要介绍的基础上,创建了一组简单的TCP Socket数据传输应用来演示了Indy的使用方法。 开放源代码的Internet组件集——Int... 阅读全文

posted @ 2011-11-11 00:46 Handll 阅读(554) 评论(0) 推荐(0)

【转】 进程插入
摘要:最终编辑 e__jin { windows似乎只提供了一种启动进程的方法:即必须从一个可执行文件中加载并启动。 而下面这段代码就是提供一种可以直接从内存中启动一个exe的变通办法。 用途嘛, 也许可以用来保护你的exe,你可以对要保护的 exe 进行任意切分、加密、存储, 只要运行时能将exe的内容正确拼接到一块内存中,就可以直接从内存中启动,而不必不安全地去 生成一个临时文件再从临时文件启动进程。另外这段代码也提供了一种自己写exe外壳的简单途径, 如果能配合其它各种外壳技术就更好地保护你的exe文件。 原理很简单:就是“借尸还魂”,启动一个僵尸进程(NT下可以是自身程序启动的另一个进程.. 阅读全文

posted @ 2011-11-11 00:45 Handll 阅读(343) 评论(0) 推荐(0)

【转】 delphi 回调函数
摘要:最终编辑 e__jin “回调机制”是window 在执行某个API函数的过程中,调用指定的一个函数(回调函数)。 比如:你 有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好 了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回 叫,手机是我通知你的手段,它就是回叫函数,也叫回调函数(Callback Function)。 简单说就是,由程序员编写的,给windows系统(API)调用的函数。 也就是说,函数.. 阅读全文

posted @ 2011-11-10 20:59 Handll 阅读(302) 评论(0) 推荐(0)

【转】 在内存中直接运行EXE类型的资源文件
摘要:最终编辑 e__jin unit PE; interface uses windows; function MemExecute(const ABuffer; Len: Integer; CmdParam: string; var ProcessId: Cardinal): Cardinal; implementation type TImageSectionHeaders = array[0..0] of TImageSectionHeader; PImageSectionHeaders = ^TImageSectionHeaders; { 计算对齐后的大小 } function Get.. 阅读全文

posted @ 2011-11-10 20:58 Handll 阅读(441) 评论(0) 推荐(0)

【转】 勾子---delphi
摘要:最终编辑 e__jin 在Windows系统中,勾子(hook)是一种特殊的消息处理机制。勾 子可以监视系统或进程中的各种事件消息, 截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的勾子,监视系统中特定事件的发生,完成特定的功能, 比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。可见,利用勾子可以实现许多特殊而有用的功能。 勾子的类型 ----1. 按事件分类,有如下的几种常用类型 ----(1) 键盘勾子和低级键盘勾子可以监视各种键盘消息(WH_KEYBOARD)。 ----(2) 鼠标勾子和低级鼠标勾子可以监视各种鼠... 阅读全文

posted @ 2011-11-10 20:58 Handll 阅读(333) 评论(0) 推荐(0)

Delphi内存管理与内存泄漏探析
摘要:Delphi内存管理与内存泄漏探析 杨继宏,龚 晖,李 治 摘 要:综述了Delphi环境下动态内存分配与释放的方法,分析了内存泄漏的可能原因,并列举了开发“智能型远程作业系统”过程中出现的有关内存泄漏的几个实例。 关键词:内存分配;内存释放;内存泄漏;智能型远程作业系统 1 引 言 Delphi是Borland公司的划时代之作,以其功能强大且易学 好用而受到广大程序员的青睐。关于Delphi的文章很多,大多数是讨论其生产的高效率、各种应用的快速实现,却忽视了一个基本却非常重要的问题内存动态 分配与安全释放。Delphi应用程序开发的许多问题是由不正确的内... 阅读全文

posted @ 2011-11-10 20:56 Handll 阅读(569) 评论(0) 推荐(0)

cxGrid学习笔记1
摘要:2009年07月08日 星期三 00:45 DB Table可以和数据库连接的View,更一般的DBGrid类似 DB Banded Table 则可以实现和数据库连接的View 并且能实现多表头 和数据库相关的View先不深入研究,先研究了下非数据库连接的View:TcsGridTableView: 控制View的行数cxGrid1TableView1.DataController.RecordCount := 5; 比如行数为5则产生5行(不包括表头) 直接读写单元格(通过行号和列号)cxGrid1TableView1.DataController.Va... 阅读全文

posted @ 2011-11-10 20:55 Handll 阅读(238) 评论(0) 推荐(0)

Delphi 的消息机制浅探(转)
摘要:我从去年 12 月上旬开始等待李维的《Inside VCL》。我当时的计划是,在这本书的指导下深入学习 Delphi。到了 12 月底,书还没有出来,我不愿再等,开始阅读 VCL 源代码。在读完 TObject、TPersistant 和 TComponent 的代码之后,我发现还是不清楚 Delphi 对象到底是怎样被创建的。于是我查看 Delphi 生成的汇编代码,终于理解了对象创建的整个过程(这里要特别感谢 book523 的帮助)。此后我就开始学习 Delphi VCL 的消息处理机制。自从我写下《Delphi的对象机制浅探》,至今正好一个星期,我也基本上把 Delphi VC... 阅读全文

posted @ 2011-11-10 20:46 Handll 阅读(294) 评论(0) 推荐(0)

串口通讯的实现(SPCOMM教程)
摘要:Delphi 中串口通讯的实现   Delphi 是新一代可视化开发工具,它具有功能强大、简便易用和代码执行速度快等特点,是全球公认的快速应用开发工具技术的先驱者,它越来越在构架企业信息系统方面 发挥着重要作用。由于Delphi 这些显著特点,许多程序员选择Delphi作为开发工具编制各种应用程序。但是,令人惋惜的是Delphi没有自带串口通讯的控件,在它的帮助文档里也没 有提及串口通讯,这就给... 阅读全文

posted @ 2010-04-07 23:55 Handll 阅读(1021) 评论(0) 推荐(0)