Delphi
李正己
双翼软件创始人
展开
-
Delphi 让接口类不自动释放实例
从 Delphi 接口 interface中继承的类,创建后不需要释放,系统会自动释放这些实例。释放时机:不再使用这些实例时会被释放。比如创建了一个实例A,将这个实例传递给B,如果B释放时,会检查A是否还在被其他的实例使用,如果不再使用,将会自动释放B。有些情况不需要自动释放,比如全局变量。需要重载两个函数,来防止系统自动释放实例type// 定义接口IMyInterface = interfaceend;// 接口实现TMyInterface = class(TInterfacedObj原创 2021-08-26 10:35:16 · 529 阅读 · 0 评论 -
Delphi警告 [dcc32 Hint] H2161 Warning: Duplicate resource
在使用Delphi编译是出现如下的警告[dcc32 Hint] H2161 Warning: Duplicate resource: Type 10 (RCDATA), ID PLATFORMTARGETS; File ****.res resource kept; file ****.res resource discarded.这个警告不影响编译运行,作为有编辑洁癖的我,增觉得这种警告...原创 2020-05-08 14:51:53 · 1774 阅读 · 0 评论 -
Delphi 简单的文本文件操作
Delphi操作文件的方法有好多种,包含ini文件,二进制文件,文本文件。这里介绍代码最少的文本文件的操作。读文本文件var strArr: TStringDynArray; //需要引用 System.Typesbegin strArr := TFile.ReadAllLines('test.txt'); //读取全部内容,需要引用 System.IOUtils //st...原创 2020-04-28 22:02:05 · 662 阅读 · 0 评论 -
Delphi判断是否为周末?今天是周几?
Delphi中的DayOfTheWeek返回今天是周几,返回值是整数,从1到7,分别表示周一,到周日,周六是6,周日是7。判断今天是否是周末uses System.DateUtils; //需要引用的单元 if DayOfTheWeek(Date) in [6, 7] then // ShowMessage('周末了,好好休息!');...原创 2020-04-27 11:48:30 · 1245 阅读 · 0 评论 -
DBGridEh多国语言支持
EhLib多国语言支持,在9.0版本之前,使用的跟Delphi官方推荐的一样,使用Resourcestring 和 dfm实现多国语言。EhLib9.0之后,EhLib采用了自己的多国语言处理,下面介绍一种使用外部文件的方法准备资源文件在执行目录下创建目录Res.Res目录下保存Ehlib使用的语言文件,可以从 C:\Program Files (x86)\Embarcadero\Stu...原创 2020-04-25 15:29:40 · 1011 阅读 · 1 评论 -
DBGridEh排序和过滤
DBGridEh可以点击列标题进行排序(标题上有小箭头指示),并可以在列标题下方增加一列显示搜索框。启动点击列标题排序DBGridEH.OptionsEh 中选中 dghAutoSortMarking(实现单列排序),dghMultiSortMarking(实现多列排序)DBGridEh.Coolumns[0].Title.TitleButton = True,进行每个需要排序的列,如果所...原创 2020-04-24 21:44:03 · 1565 阅读 · 0 评论 -
Delphi 代码格式化快捷键无法使用
Delphi 最新版自带代码格式化功能,快捷键是Ctrl + D,但是安装Cnpack之后,Ctrl+D快捷键会被CnPack的“函数过程列表专家”功能占用,无法使用dlephi自带的代码格式化快捷键。CnPack也有代码格式化功能,快捷键是Ctrl + W,感觉还是Delphi自带的好用好用一些,Delphi自带的代码格式化功能能正确处理{$ifdef }{$endfi},CnPack的代码...原创 2020-04-23 08:11:25 · 1237 阅读 · 0 评论 -
Delphi 10.3.1安装cnpack后,出现错误CnWizards_D103R.dll
Delphi 10.3.1安装cnpack的CnWizards_1.1.9.991版本后,启动delphi出现下面的错误提示框bds.exe - 无法找到入口无法定位程序输入点 @System@Classes@TFieldsCache@$bcctr$qqrv 于动态链接库 C:\Program Files (x86)\CnPack\CnWizards\CnWizards_D103R.dll...原创 2020-04-22 17:19:11 · 1528 阅读 · 0 评论 -
delphi 10.3 编译出现错误[Fatal Error] Access violation at address 20749862 in module 'coreide260.bpl'
使用delphi 10.3.1编译工程出现错误下面错误[Fatal Error] Access violation at address 20749862 in module 'coreide260.bpl'. Read of address 00000000从网上查询了该错误的处理方法,有的说是第三方应用导致的,因为一直在搞cnpack的配置,觉得可能是cnpack导致的,卸载cnpa...原创 2020-04-22 17:10:43 · 2021 阅读 · 1 评论 -
Delphi 中哈希表TStringHash和THashedStringList性能速度
Delphi的IniFiles单元中有两个哈希表类TStringHash和THashedStringList【TStringHash】优点:速度快,尤其是添加时(调用.Add)速度比THashedStringList快得多。缺点:1、Key只能是字符串,Value只能是数字2、无法进行遍历【THashedStringList】优点:继承与TStringL原创 2017-02-17 17:08:54 · 4988 阅读 · 0 评论 -
为TMenuItem增加指针Data属性
Delphi的有些组件中都包含.Data属性,比如TTreeNode,.Data属性可以认为是一个指针,可以指向任何类或者结构,方便后续操作。但是TMenuItem没有.Data属性,下面介绍最简单的方法为TMenuItem增加.Data属性。在需要使用的.pas文件前面写上如下代码type //建议在最开始的type后面增加 TMenuItem = class(vcl.Men原创 2017-03-09 09:36:03 · 611 阅读 · 0 评论 -
delphi 判断目录是否有写入权限
没有找到判断目录是否有写入权限,自己写了一个,我觉得应该是有相应的函数的,但是没有找到。function DirWritable(m_dir : string) : boolean; //目录是否有写入权限var tmpStrs: TStrings; //测试数据目录是否写权限 tmpName : string;begin //参数为目录,包含最后的斜杠 //如果可写,原创 2017-03-21 09:16:54 · 1590 阅读 · 0 评论 -
delphi 中 使用 TIdHTTP 提交Post数据
varfhttpRequest: TIdHTTP;PostData : TStringStream;tmpStr : String;begin fhttpRequest := TIdHTTP.Create(nil); with fhttpRequest do begin ProtocolVersion := pv1_1; AllowCookies := Tru原创 2017-04-07 09:52:22 · 20523 阅读 · 0 评论 -
Delphi 取得IE版本的方法
方法1:读取注册表function GetIEVersion : string; //获得IE的版本号var reg : TRegistry;begin reg := TRegistry.Create; reg.RootKey := HKEY_LOCAL_MACHINE; result := ''; try if reg.OpenKey('\SOFTWARE\Mi原创 2017-03-29 09:11:15 · 2021 阅读 · 0 评论 -
delphi 禁用掉窗口中的所有组件
procedure DisableAllControls(m_form: TWinControl; m_enable : Boolean = false);var i : integer;begin //禁用窗口中所有组件 //m_enabled = true 表示启用 for i := 0 to m_form.ComponentCount - 1 do begin i原创 2017-03-22 15:25:34 · 1067 阅读 · 0 评论 -
Delphi 下的Base64编码和解码
function Base64Encode(s : string) : string; //base64 编码var base64 : TIdEncoderMIME; tmpBytes : TBytes;begin base64 := TIdEncoderMIME.Create(nil); try base64.FillChar := '='; tmpByte原创 2017-03-23 10:17:14 · 14207 阅读 · 0 评论 -
Delphi 获得Windows操作系统主版本号
function GetOSMajorVersion: integer;//获取操作系统主版本号var osVerInfo: TOSVersionInfo;begin Result := 5; //默认是xp的主版本号 osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); if GetVersionEx(osVerInf原创 2017-03-30 09:43:40 · 3354 阅读 · 0 评论 -
Delphi读取文本文件出现 No mapping for the Unicode character exists in the target multi-byte code page
TStringList.LoadFromFile时会出现 No mapping for the Unicode character exists in the target multi-byte code page提示如下代码var tmpStrs : TStrings;begin tmpStrs := TStringList.Create; tmpStrs.LoadFromFi原创 2017-03-24 16:16:32 · 3176 阅读 · 0 评论 -
TWebBrowser出现 Method pasteHTML not supported by automation object 解决方法
先看下面的源码,在TWebBrowser当前编辑位置插入一个图片,是通过源码的方法插入的。var urlStr : string; ovSelection: OleVariant; ovTextRange: OleVariant; tmpStr : string;begin urlStr := 'http://www.1and1-mail.com/imgv2/原创 2017-04-11 09:37:55 · 1817 阅读 · 0 评论 -
IHTMLElement.getAttribute 出现参数无效的解决方法
调用 IHTMLElement.getAttribute('href') 时,如果被调用的链接是错误的链接,比如 abc,也就是说href后面是个错误的url时,会出现“无效参数”错误对对话框。改进方法 IHTMLElement.getAttribute('href', 2),也就是增加一个参数,参数说明如下0: Default. Performs a property search th原创 2017-03-31 17:48:24 · 3553 阅读 · 0 评论 -
Delphi 从 TWebBrowser中获得当前输入处的链接
var unsubscribeStr : string; ovSelection: OleVariant; innerDom, ovTextRange, nnode: OleVariant;begin ovSelection := Edit.doc.selection; //获得选择对象 ovTextRange := ovSelection.creat原创 2017-03-31 15:25:02 · 784 阅读 · 0 评论 -
Win 10下 Twebbrowser无法通过pasteHTML插入Mailto 链接
var unsubscribeStr : string; ovSelection: OleVariant; innerDom, ovTextRange, nnode: OleVariant;ovSelection := Edit.OleObject.Document.selection; //获得选择对象ovSelection.Clear;ovTextRange := ov原创 2017-03-31 14:25:43 · 1834 阅读 · 0 评论 -
Delphi中的SHA256算法
在Delphi xe中可以直接使用 TIdHashSHA256 来实现SHA256算法,代码如下uses IdHashSHA, IdSSLOpenSSLHeaders;var SHA256 : TIdHashSHA256;SHA256 := TIdHashSHA256.Create;Password_p := LowerCase(SHA256.HashStringAsHex(Pas原创 2017-04-24 09:06:57 · 9477 阅读 · 6 评论 -
delphi工具栏按钮显示不完整,高度不能调整的原因
使用delphi工具按组件发现了一个问题,将工具栏TToolBar中一个TToolButton按钮的Style属性由tbsButton改成tbsDropDown后,发现工具栏上的图片最下方一条没有显示出来,也就是图片的最下方少一条。从改变这个属性来开,将Style属性从tbsButton改成tbsDropDown后,工具栏需要更高的空间,但是修改TToolBar.ButtonHeight属性无原创 2017-05-18 14:53:25 · 2461 阅读 · 0 评论 -
delphi 中 字符串分割函数 ExtractStringsEx,是ExtractStrings函数的扩展
使用ExtractStrings函数发现不能分割出空串,很是郁闷,发现delphi提供ExtractStrings的代码,打开看看修改了一下,实现增加空串的功能,如下Function ExtractStringsEx()function ExtractStringsEx(Separators, WhiteSpace: TSysCharSet; Content: PChar; String原创 2008-05-22 15:26:00 · 4109 阅读 · 0 评论 -
Delphi出现 No mapping for the Unicode character exists in the target multi-byte code page 处理方法
当调用 TStrings.LoadFromFile(html_file_name, TEncoding.UTF8); 出现 No mapping for the Unicode character exists in the target multi-byte code page错误。这种错误在调用非UTF8编码的文件时会出错。处理方法如下 tmpStrs.LoadFromFil原创 2017-01-18 10:43:57 · 7947 阅读 · 0 评论 -
使用Indy组件出现 Already connected. 异常的处理方法
在使用Indy的邮件组件(TIdSMTP相关)的时候,有时候会出现 Already connected. 但是调用了Disconnect函数以后,下次再次调用Connect的时候还是会出现 Already connected. 解决方法 if TIdSMTP.IOHandler TIdSMTP.IOHandler.InputBuffer.Clear; //如原创 2017-01-05 17:52:35 · 3609 阅读 · 0 评论 -
delphi 建立目录函数汇总
1、function CreateDir(const Dir: string): Boolean; 所属单元 System.SysUtils建立目录,不支持多级建立,例如 CreateDir('c:\a\b\c'),如果c:\a\b目录不存在的话函数会返回失败。2、function ForceDirectories(Dir: string): Boolean; 所属单元 System.S原创 2016-11-17 12:00:46 · 1327 阅读 · 0 评论 -
菜单、按钮OnClick鼠标事件关联丢失,TActionList的简单使用
最近发现了一个问题,在用delphi7编译的时候,有时菜单的OnClick关联会丢失,代码还在就是OnClick事件没有关联到代码上,后来发现是使用了TActionList的缘故,因为这个菜单已经关联了一个Action,所以应该在Action的OnExecute中增加执行代码。下面是TActionList简单介绍和用法可以把Action作为一个桥梁,一端链接程序的执行代码,另一端链接程序的界面原创 2008-12-05 08:48:00 · 1842 阅读 · 0 评论 -
delphi中为动态数组分配空间的问题
在delphi中为动态数组分配空间应该使用SetLength函数,释放空间也使用Setlength,只不过长度应该为0。今天发现一段代码是用GetMem来为动态数组分配空间的,用FreeMem来释放空间,编译的时候没有任何错误,运行也正常,只是在程序退出时会出现内存访问错误,以后使用的时候可要注意喽。原创 2008-12-02 17:31:00 · 3062 阅读 · 0 评论 -
取得汉字拼音首字母函数,取得汉字串首字母
1、取得汉字首字母函数,包含大部分常见汉字,如:"中" -> "Z"//获取汉字的首字母function getpychar(c : string ) : string;begin if Length(c) 1 then begin result := ; exit; end; if ord(c[1]) 128 then begin result := UpperC原创 2009-01-13 22:10:00 · 1090 阅读 · 0 评论 -
delphi 动态数组和静态数组首地址的区别
动态数组开始地址和静态数组的开始地址是不同的,注意下面代码中的File.Read函数的第一个参数动态数组使用var Source : array of byte; File : TFileStream;SetLength(Source, 20);File.Read(Source[0], 20); //动态数组的第一个元素为实际数组的开始地址SetLength(Source, 0);静态原创 2008-10-16 11:01:00 · 3799 阅读 · 2 评论 -
delphi 实现拖拽打开文件
步骤如下,delphi 7测试通过1、在uses 中增加 ShellAPI2、增加拖拽的消息处理函数 //声明 protected procedure WMDROPFILES(var Msg : TMessage); message WM_DROPFILES;//实现procedure TForm1.WMDROPFILES(var Msg: TMessage);var a : Integ原创 2008-09-22 14:49:00 · 5870 阅读 · 1 评论 -
TThreadList 的用法
初次使用TThreadList时找不到.Count属性,也找不到.Items属性,没有这两个属性就不能访问列表中的内容,这可怎么用呢,后来发现了LockList方法,这个方法返回一个TList,哦,原来是首先通过LockList安全的得到一个TList然后使用TList返回列表中的内同,当然最后不要忘了调用UnLock函数。例子:with MyThreadList.LockList dobegin原创 2008-05-06 11:05:00 · 5640 阅读 · 1 评论 -
delphi 给字加边的又一个算法,有源代码
原理很简单,遍历每个像素,找到字的颜色判断上下左右是否不是字,如果不是则加上边界没啥说的看源码procedure TForm1.Button7Click(Sender: TObject);var tc : TCanvas; i, j : integer; color : TColor; egcolor : TColor;begin tc := Label2.Canvas;原创 2007-09-06 16:39:00 · 2023 阅读 · 0 评论 -
delphi 实现给字加边界代码
原理很简单,在字的坐上、上、右上 、左、右、左下、下、右下分别使用边界颜色写一遍字,即生成背景,然后写最终的字,下面是代码procedure TForm1.Button1Click(Sender: TObject);var tc : TCanvas;begin tc := Label1.Canvas; tc.Font.Color := RGB(0, 255, 0); //背景颜色 tc.T原创 2007-09-06 16:05:00 · 2463 阅读 · 0 评论 -
Delphi 如何实现窗口透明,但是窗口上的文字不透明
其实很简单,进行下面的属性设置将窗体的TransparentColor属性设置为true窗体TransparentColorValue属性 设置为clBlack(黑色)窗体中的Label1的Color(背景色)设置为clBlack(黑色)窗体中的Label1的字体颜色Font.Color设置为clRed(红色,不是黑色就可以)运行程序,将只显示字,而没有窗体,但是还是有窗体的边界,可以将窗体的Bo原创 2007-09-03 11:38:00 · 7242 阅读 · 2 评论 -
delphi支持多国语言简单方法
近日使用了以下delphi 7自带的多国语言支持,发送存在以下的问题1、只能实现界面资源的多国语言支持,内容中出现提示信息还需要作为资源进行处理2、本人对多国语言支持了解的不多,做完后发现在编译目录下运行程序为英文版,拷贝到其他目录下就变成了中文版,很郁闷,搞了好半天没有搞定。最后只好采用最简单的方法进行多国语言支持,其实只是为多国语言打下了基础,并没有做好1、直接将窗体上的提示翻译成需要的语言,原创 2007-07-03 18:27:00 · 3244 阅读 · 1 评论 -
delphi 从TWebBrowser WebBrowser得到全部html源码
网上查询出很多方法,归结起来有两种1、使用IPersistStreamInit接口实现,函数名都是function GetHtml(const WebBrowser: TWebBrowser) : string;这个函数确实可以得到全部的html源码,但是里面用到了hHTMLText := GlobalAlloc(GPTR, BufSize); 而没有调用GlobalFree释放hHTMLTe原创 2009-02-19 22:33:00 · 4988 阅读 · 0 评论 -
delphi 从URL地址中获得文件名
function GetFileNameFromURL(url: string): string;var ts : TStrings;begin //从url取得文件名 ts := TStringList.create; try ts.Delimiter :=/; ts.DelimitedText := url; if ts.Count原创 2009-06-10 10:38:00 · 4226 阅读 · 1 评论