delphi基础相关
文章平均质量分 56
金卯刀
擅长Windows应用研发,熟悉C#,WPF,Winfom,Delphi。专注CAD、BIM技术领域。
展开
-
Delphi中的匿名方法和闭包
来源于此链接:http://interactiveasp.net/blogs/spgilmore/archive/2010/06/17/anonymous-methods-and-closures-in-delphi-2010.aspxWhat are anonymous methods? Anonymous methods are a new language feature int转载 2015-09-08 10:53:29 · 3041 阅读 · 0 评论 -
GetFullPathName和GetLongPathName
这两个都是kernal32.dll提供的API。 参考MSDN说明: GetFullPathName: 用于获取某文件的全路径和文件名称;不推荐在多线程应用中使用;该函数不检查返回的路径是否合法或存在;也用于计算路径中的部分值(比如取父目录)。 GetLongPathName: 转换指定路径为长路径格式(相对短路径ShortPath : dos格式而言);在多数原创 2012-11-27 15:15:46 · 6534 阅读 · 0 评论 -
delphi中一个TLabel显示样式问题(Transparent)的探寻
昨天,一位同事在处理某产品软件时,碰到此类状况:某控件自带的进度提示窗体上的TLabel背景不透明,而查看源码,实际上TransParent是为True的。 问题看起来很奇怪,因为同样控件在其它类产品软件,使用状况良好。 后来,我通过debug dcu跟踪VCL源码,发现:此软件在加载控件阶段,处理TLabel.Transparent相关设定(ControlSt原创 2012-05-22 10:45:26 · 2057 阅读 · 0 评论 -
Class RTTI
(ZT) Class RTTIOriginal URL: http://davidglassborow.blogspot.com/2006/05/class-rtti.htmlClass RTTI This post follows up my previous one about RTTI in Delphi, inspired by Hallvard's 2 pos转载 2012-04-20 12:24:07 · 845 阅读 · 0 评论 -
delphi实现数字签名
上周,另一部门需要支援解决数字签名问题。但因为之前也没做过,现学现卖。此方面可参考的中文资料较少,特作分享,方便查阅。 有关数字签名的概念、原理,这里就不做介绍了,请自行google或百度。 利用证书对文件进行签名,从证书来源看,可分为两种:1、软证书:就是将*.pfx文件导入到系统中,这意味着,只要登录到PC中的用户,均可以使用该证书;2、硬证书:通常原创 2012-03-19 10:23:57 · 9446 阅读 · 1 评论 -
Alpha Blended Splash Screen in Delphi - Part 2
In this the second, and concluding, part of our experiments with Alpha Blended forms in Delphi, I will modify the demo application to use a compressed alpha transparent PNG image instead of a BMP. I w转载 2012-03-13 17:39:59 · 2298 阅读 · 0 评论 -
Alpha Blended Splash Screen in Delphi
In this first of two articles, I will demonstrate how to easily create an alpha blended translucent splash screen using Delphi.Although I use Delphi 2007 and PhotoShophere, the techniques apply eq转载 2012-03-13 17:31:00 · 2686 阅读 · 0 评论 -
一个关于多线程同步问题的分析
设有 主线程M_T,子线程:S_T1、S_T2、S_T3。子线程的任务是执行数据统计,并将统计进度反馈给主线程。 这里涉及到主线程的UI操作。很多人可能会考虑采用synchronize。但是,在我目前的程序中,主线程更多的工作是画图及数据生成的作业,特别是画图方面,不希望线程过于忙碌;也不希望子线程也一直卡在sychronize,而影响统计效率。 所以,这里采用原创 2011-12-23 15:26:21 · 831 阅读 · 0 评论 -
Graphic32下创建倾斜字体问题
示例代码如下: Buffer: TBitmap32;beginif GetObject(Buffer.Font.Handle, ...) then ... hf:= CreateFontIndirect(...); if hf <>0 then begin Buffer.font.Handle:= hf; Buffer.TextOut(.原创 2011-12-06 12:20:19 · 816 阅读 · 0 评论 -
delphi中控件位置及自动排版的问题
1、autosize设置为true,搭配align,自行调整窗体布局。 窗体高度老是算不对——因为子控件高度是动态变化的。 ——最后只能取消autosize,自行计算。2、form在invisible状况下,子控件即使align设置为alclient,其高度与所在窗体的高度仍然不一致。除非窗体要显示出来。这或许是delphi特意这样处理。所以任何依赖控件heigh原创 2011-12-06 10:33:31 · 6812 阅读 · 0 评论 -
程序中GDI资源占用与泄漏的初步分析
从占用上看,1、程序中是否存在较多的imagelist存放图标;2、程序的可视化控件是否存在过多的DoubleBuffer; 从泄漏角度看程序中的GDI API调用是否符合规范,及时释放句柄;GDI资源是否都得到正确维护; 泄漏分析工具: AQTime 虽然有这个工具,但只能确认是否存在泄漏。离定位“问题代码”,还有很长路要走,毕竟是要在几十万行代码中寻找原创 2011-12-06 12:36:02 · 1088 阅读 · 0 评论 -
GetFileAttributes与相对路径
今天收到反馈:某个界面功能在用户机器上表现异常。翻阅代码,初步定位在读取文件——因为该界面功能依据此文件设定。但是在公司任何机器上测试并无问题。所以,先断定是客户机器上的OS环境问题。 尝试跟踪了加载文件的代码,发现:在调用FileExisits时,传入的是相对路径(因为是在单元初始化是进行,业务对象根路径还没有初始化;业务对象路径目前是应用程序路径),FileExisits又调原创 2011-11-14 16:33:12 · 2416 阅读 · 0 评论 -
编写DPK时的注意点
今天在给程序分包时,编译某dpk碰到了些问题。 1、编译该dpk,出现大量的warning,这些warning基本上是关于某某单元被隐式引用进来; 2、在编译该dpk,出现错误:E2213: Bad packaged unit format: %s.%s (Delphi) 其中问题1,也会导致安装失败,因为某单元可能已被包含在其它bpl中,所以dpk必须显式引用对原创 2012-11-21 10:29:36 · 1693 阅读 · 0 评论 -
资料重温——自定义对话框(来源于torryPages)
{ Sometimes we need to replace some text or something other in standard Windows Open/Save dialogs. Unfortunately, Delphi's dialogs components don't provide the access to all controls placed on转载 2013-01-16 15:46:15 · 793 阅读 · 0 评论 -
一个小项目的技术选型
帮人做一个小小的在线登陆验证模块。 需求背景:大约有200人在线的状况,客户端有个登陆界面。 很简单的一个项目,主要分:通讯模块和服务模块。 客户端采用Delphi开发,通讯方面考虑:Midas技术或Webservice。webservice效率上相比midas要低;抛开WEB防火墙的苛刻要求,midas中的SocketConnection不论原创 2015-06-15 14:36:54 · 1124 阅读 · 0 评论 -
D2009下Indy发送邮件中文乱码问题
发现问题,试着在网上原创 2014-09-03 10:04:47 · 2905 阅读 · 1 评论 -
如何在指定的终端会话中启动程序
First we obtain the user’s primary access token with the WtsQueryUserToken API call. To call this function successfully, the calling application must be running within the context of the LocalSyste转载 2014-07-29 09:26:38 · 2440 阅读 · 4 评论 -
几个DataSet数据导出到XML Word Excel TXT HTML的函数
procedure ExpXML(DataSet : TDataSet; Arq : string);var i: integer; xml: TXMLDocument; reg, campo: IXMLNode;begin xml := TXMLDocument.Create(nil); try xml.Active := True; D原创 2014-04-25 14:30:17 · 1950 阅读 · 0 评论 -
关于OOD的两点总结
OOD对现在的程序员来说并不陌生,甚至在不知不觉中使用着。 OOD,面向对象设计,关键在于对象的“设计”。一个对象,通常是数据+方法的封装,public对外接口,private或protect内部实现细节,必要情况下public出ReadOnly内存成员状态。 对象设计的过程,会碰到各种场景、问题。从而总结出各种“设计模式”。对于具体的各种设计模式和对象设计原则原创 2014-01-13 11:04:33 · 857 阅读 · 0 评论 -
监视网卡状态
基础单元unit uAdapterInfo;interfaceuses Classes, SysUtils;const MAX_INTERFACE_NAME_LEN = $100; ERROR_SUCCESS = 0; MAXLEN_IFDESCR = $100; MAXLEN_PHYSADDR = 8; MIB_IF_OPER_STATUS_N原创 2013-12-04 15:04:38 · 3378 阅读 · 2 评论 -
Addressing pointers
很好的一份文档,值得一读,原文链接:http://rvelthuis.de/articles/articles-pointers.html______________________________________________________Pointers are like jumps, leading wildly from one part of the data structu转载 2013-11-26 11:23:11 · 1888 阅读 · 0 评论 -
IDE环境中的系统变量
最近在研究IDE开发环境的快速配置的工具。因很多情况下,一个项目的开发环境带有多种第三方控件以及自身的开发库,而每当环境或系统崩溃时,面临着耗时的开发环境重建过程。这就是要给开发组内配备的一个工具。 环境配置,其中关键的一环是,控件路径的统一。但是有时每台机器,控件或开发库所在盘不同。这就需要系统变量来隔离绝对路径的变化。以下是老外对系统变量的详细说明,还不错: 原文链接:htt翻译 2013-09-05 13:59:38 · 1347 阅读 · 0 评论 -
解决:卸载Delphi2009出现错误,错误代号为2343
今天碰到此问题,在CodeGear找到解决问题的方法:http://support.codegear.com/article/39559Abstract: You receive the Error 2343 while trying to uninstall/repair an installation of RAD Studio 2009 on a 64-bit version of Wi翻译 2013-07-29 19:25:07 · 2418 阅读 · 0 评论 -
使用远程调式器追踪源码
很多时候,程序在客户机或测试工程师机器上,运行会出现错误,但是换个环境就无法重现。delphi引入的Remote Debugger替我们很好地解决此问题。Using the Remote Debugger with Delphi 2010 EditDelphi 2010 is not able to load debug informations from remote转载 2013-07-30 12:16:38 · 1138 阅读 · 0 评论 -
TStringList性能调优
改进目标是针对IndexOf效率,主要有两面: 1、设置Sorted属性 当Sorted= true,那么IndexOf则会调用Find二分查找法;当Sorted=False,则会从头比到尾,直至找到。 显然,Sorted = True可以取得较好的性能。 2、改进Find方法 IndexOf依赖于Find,原创 2013-04-26 16:12:12 · 1365 阅读 · 0 评论 -
一个关于combobox中的下拉框问题
今天在查“窗体自动隐藏时,若下拉框状态是下拉,那么这个下拉框不会消失,凭空显示在那!”问题。原本意图是,combobox若属于这个窗体并且处于下拉状态,是不应自动隐藏的,也就是,若鼠标在这窗体的任何控件上,则不自动隐藏。 通过API:windowFromPoint检测,combobox的dropdownlist是有handle。但是通过GetParent无法获取到combobox原创 2011-11-09 12:08:51 · 1120 阅读 · 0 评论 -
关于在多核处理器下的多线程应用开发
现在双核处理器的主机,已经很普及了。由此,针对我们自身产品的性能问题,也做了思考... 为探讨在多核处理器状况下,给应用引入多线程,可能带来的好处有多大。先了解几个问题。 1、由于软件是基于Windows OS平台,那么Windows OS在多核处理器下,提供了什么? 因为Windows本身有提供了线程调度(Thread Schedulin原创 2011-11-17 11:21:18 · 1027 阅读 · 0 评论 -
关于delphi中的强制类型转换
delphi的强制类型转换有两种方式:类型(变量) 和 变量 as 类型。 可能大家都知道这两种转换方式的差别,前者在类型不匹配时,不抛出异常,并允许修改对应地址的内存值;而后者会先检查类型是否一致,不一致则抛出异常。 显然,前者存在的风险更大。以最近碰到原创 2011-07-21 09:07:14 · 7366 阅读 · 0 评论 -
服务控制类
{ Host若为空,默认本机 使用时注意服务名称的给定,应该是服务——》属性页面——》服务名称 runService与StopService的实现 和 另外两个操作函数的实现略不同,只是想验证两种方式的不同行为}unit uWinService;interfaceuses Windows, Classes, WinSvc, SysUtils;type IS原创 2010-01-12 14:39:00 · 980 阅读 · 0 评论 -
D7以來的變化
Language and Compiler Features Since Delphi 7Inlining Routines can now be marked with the inline directive. This tells the compiler that, instead of actually calling the routine, it转载 2010-01-09 14:38:00 · 827 阅读 · 0 评论 -
几个判断OS版本的函数
IsWin9x Returns true if the operating system is on the Windows 9x platform or false if not. function IsWin9x: Boolean;begin Result := SysUtils.Win32Platform = Windows.VER_PLATFORM_WIN32_WIN转载 2010-03-10 19:46:00 · 1297 阅读 · 0 评论 -
数组下标使用0起始的理由
虽然delphi提供了可以自定数组起始下标的值,但还是建议使用0,理由:1、windows、linux api以及delphi vcl许多 地方都假设 数组下标从0开始;2、动态数组必须从0开始,所以必须习惯;3、如果你使用开放数组作为例程的参数,那么low函数将返回0,无论在例程外部是如何声明数组的。4、数组元素访问的地址计算以及下标值的比较,与0做比较或计算,效率都相对较高原创 2009-12-26 16:48:00 · 1655 阅读 · 0 评论 -
参数使用const的理由
1、可以防止参数被修改;2、提高效率; 关于第1点,大家都了解。但第2点,各位透过cpu view,可以查看到:使用const关键的参数,编译器不会为参数维护引用计数,也不会加入try finally保护块,而不加const修饰的参数,则会多出这些动作.... 由此,可以确定const效率会更高...原创 2009-12-26 16:42:00 · 827 阅读 · 0 评论 -
理解VCL中窗体的释放过程
關閉應用程序的過程:WM_CLOSE,调用DestroyWindow() DestroyWindow()又发送WM_DESTROY 响应WM_DESTROY,调用WM_QUIT GetMessage()发现WM_QUIT,退出程序delphi:關閉-發出wm_close,響應消息,調用close,判斷是否為主窗,是:則調用application.terminate,而這個方法則會發送PostQ原创 2010-03-02 16:16:00 · 2094 阅读 · 0 评论 -
Open array parameters and array of const
This article describes the syntax and use of open array parameters, and the use of the "array of const" parameter type. It also describes the internals of these two similar types of parameters, discus转载 2010-02-25 11:29:00 · 1467 阅读 · 0 评论 -
下載url文件的2種方法(摘于網上)
function GetInetFile (const fileURL, FileName: String): boolean;const BufferSize = 1024;var hSession, hURL: HInternet; Buffer: array[1..BufferSize] of Byte; BufferLen: DWORD; f: Fil原创 2010-02-23 15:59:00 · 1290 阅读 · 0 评论 -
Program Name、Process ID、Window Handle、Process Handle 的轉換函式
宣告:// Get ProcessID By ProgramName (Include Path or Not Include)function GetPIDByProgramName(const APName: string): THandle;// Get Window Handle By ProgramName (Include Path or Not Include)fun转载 2010-02-03 15:03:00 · 2609 阅读 · 0 评论 -
ActionList中Action的快捷鍵
本文的目的是說明,這里的快捷鍵是如何被觸發的。 從控件自身來看,快捷鍵的進入點是在TWincontrol.IsMenuKey。在分析IsMenuKey之前,我們先看一下IsMenuKey是哪里被調用的? 搜索Controls.Pas,可以發現,他是在CNKeyDown事件里被觸發的,如下(Line 13):var Mask: Integer;b原创 2010-02-01 10:42:00 · 2421 阅读 · 8 评论 -
線程中異常處理問題
昨天有看到一個帖子,說在線程的execute拋出異常,卻不會提示的問題。經查http://edn.embarcadero.com/article/10452 有對此問題的說明,如下:Question: I have a TThread object which may raise an exception in the Execute procedure. When an except原创 2010-01-28 10:25:00 · 977 阅读 · 0 评论 -
如何使 win + D快捷鍵對本應用程序無效
今天看到 一個帖子征集此問題的解法,原帖:http://topic.csdn.net/u/20100331/10/5ba44808-15a7-444c-a659-7f7d00c39f98.html?44566 其中列出的解法如下://方法1procedure TForm1.Createparams(var params: TCreateParams); begin inher原创 2010-03-31 17:36:00 · 1396 阅读 · 0 评论