自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

正己的专栏

记录工作、学习和生活

  • 博客(120)
  • 资源 (1)
  • 收藏
  • 关注

原创 Nginx反向代理出现错误 502 bad gateway 案例解析

Flask框架写的程序,使用uwsgi启动,Nginx作为反向代理调用Flask应用。Flask应用有些操作时间比较长,会超过1分钟,在网页端访问会出现错误: 502 bad gateway。Nginx的错误日志中会出现错误:upstream prematurely closed connection while reading response header from upstream。

2023-08-10 09:32:09 1670

原创 Nginx http强制跳转到https,如果排除指定目录

Nigix 强制https时如何排除某些目录

2022-09-26 14:20:51 1716 1

原创 Delphi 让接口类不自动释放实例

从 Delphi 接口 interface中继承的类,创建后不需要释放,系统会自动释放这些实例。释放时机:不再使用这些实例时会被释放。比如创建了一个实例A,将这个实例传递给B,如果B释放时,会检查A是否还在被其他的实例使用,如果不再使用,将会自动释放B。有些情况不需要自动释放,比如全局变量。需要重载两个函数,来防止系统自动释放实例type// 定义接口IMyInterface = interfaceend;// 接口实现TMyInterface = class(TInterfacedObj

2021-08-26 10:35:16 456

原创 Notepad++ 插件管理器找不到插件

经常使用Notepad++,有很多有用的插件,我是搞开发的,会用到16进制查看插件,插件的名字是Hex-Editor,使用Notepad++自带的插件管理器就可以安装,网上的很多帖子介绍如何安装Hex-Editor插件。我遇到的问题是,在Notepad++的插件管理器中,找不到 Hex-Editor 插件,我以前用过这个插件,我以为是我升级了Notepad++后,插件没有更新不兼容了,后来发现,好几个插件都在插件管理器中找不到,这不科学,Notepad++的用户很多,Notepad++怎么会做出不兼容的升

2020-05-09 08:24:54 1449

原创 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 1633

原创 Delphi 简单的文本文件操作

Delphi操作文件的方法有好多种,包含ini文件,二进制文件,文本文件。这里介绍代码最少的文本文件的操作。读文本文件var strArr: TStringDynArray; //需要引用 System.Typesbegin strArr := TFile.ReadAllLines('test.txt'); //读取全部内容,需要引用 System.IOUtils //st...

2020-04-28 22:02:05 566

原创 Delphi判断是否为周末?今天是周几?

Delphi中的DayOfTheWeek返回今天是周几,返回值是整数,从1到7,分别表示周一,到周日,周六是6,周日是7。判断今天是否是周末uses System.DateUtils; //需要引用的单元 if DayOfTheWeek(Date) in [6, 7] then // ShowMessage('周末了,好好休息!');...

2020-04-27 11:48:30 1142

原创 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 937 1

原创 DBGridEh排序和过滤

DBGridEh可以点击列标题进行排序(标题上有小箭头指示),并可以在列标题下方增加一列显示搜索框。启动点击列标题排序DBGridEH.OptionsEh 中选中 dghAutoSortMarking(实现单列排序),dghMultiSortMarking(实现多列排序)DBGridEh.Coolumns[0].Title.TitleButton = True,进行每个需要排序的列,如果所...

2020-04-24 21:44:03 1369

原创 Delphi 代码格式化快捷键无法使用

Delphi 最新版自带代码格式化功能,快捷键是Ctrl + D,但是安装Cnpack之后,Ctrl+D快捷键会被CnPack的“函数过程列表专家”功能占用,无法使用dlephi自带的代码格式化快捷键。CnPack也有代码格式化功能,快捷键是Ctrl + W,感觉还是Delphi自带的好用好用一些,Delphi自带的代码格式化功能能正确处理{$ifdef }{$endfi},CnPack的代码...

2020-04-23 08:11:25 1119

原创 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 1420

原创 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 1827 1

原创 如何判断网页邮箱出通过邮件客户端工具发送过来的(smtp发送),还是通过网页邮箱发过来的(HTTP发送)

可以根据文件头判断网易邮箱发送使用的工具。通过网页邮箱发送的邮件,邮件头包含下面的信息,注意其中的 ajax-webmail-wmsvr42 标识的是网页邮箱工具。Received: from ymail$126.com ( [104.215.168.136] ) by ajax-webmail-wmsvr42 (Coremail) ; Wed, 9 Jan 2019 20:46:19 ...

2019-01-10 09:16:25 2866 1

原创 delphi工具栏按钮显示不完整,高度不能调整的原因

使用delphi工具按组件发现了一个问题,将工具栏TToolBar中一个TToolButton按钮的Style属性由tbsButton改成tbsDropDown后,发现工具栏上的图片最下方一条没有显示出来,也就是图片的最下方少一条。从改变这个属性来开,将Style属性从tbsButton改成tbsDropDown后,工具栏需要更高的空间,但是修改TToolBar.ButtonHeight属性无

2017-05-18 14:53:25 2320

原创 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 9138 6

原创 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 1774

原创 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 20388

原创 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 3501

原创 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 748

原创 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 1802

原创 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 3286

原创 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 1996

原创 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 3006

原创 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 14132

原创 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 1036

原创 delphi 判断目录是否有写入权限

没有找到判断目录是否有写入权限,自己写了一个,我觉得应该是有相应的函数的,但是没有找到。function DirWritable(m_dir : string) : boolean; //目录是否有写入权限var tmpStrs: TStrings; //测试数据目录是否写权限 tmpName : string;begin //参数为目录,包含最后的斜杠 //如果可写,

2017-03-21 09:16:54 1549

原创 为TMenuItem增加指针Data属性

Delphi的有些组件中都包含.Data属性,比如TTreeNode,.Data属性可以认为是一个指针,可以指向任何类或者结构,方便后续操作。但是TMenuItem没有.Data属性,下面介绍最简单的方法为TMenuItem增加.Data属性。在需要使用的.pas文件前面写上如下代码type  //建议在最开始的type后面增加  TMenuItem = class(vcl.Men

2017-03-09 09:36:03 587

原创 Delphi 中哈希表TStringHash和THashedStringList性能速度

Delphi的IniFiles单元中有两个哈希表类TStringHash和THashedStringList【TStringHash】优点:速度快,尤其是添加时(调用.Add)速度比THashedStringList快得多。缺点:1、Key只能是字符串,Value只能是数字2、无法进行遍历【THashedStringList】优点:继承与TStringL

2017-02-17 17:08:54 4901

原创 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 7849

原创 NSIS实现自定义选择数据保存目录窗口

NSIS实现如下界面,选择数据保存目录,这个窗口将会在选择安装目录窗口后出现代码如下Var DataDir ;定义数据目录位置!insertmacro MUI_PAGE_WELCOME ;欢迎页面!insertmacro MUI_PAGE_DIRECTORY ;调用NSIS选择目录窗口Page custom SetCustom LeaveCustom ;自

2017-01-13 17:38:04 3831

原创 使用Indy组件出现 Already connected. 异常的处理方法

在使用Indy的邮件组件(TIdSMTP相关)的时候,有时候会出现 Already connected. 但是调用了Disconnect函数以后,下次再次调用Connect的时候还是会出现 Already connected. 解决方法      if TIdSMTP.IOHandler         TIdSMTP.IOHandler.InputBuffer.Clear;  //如

2017-01-05 17:52:35 3510

原创 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 1245

原创 EurekaLog 对Delphi线程的影响

EurekaLog在delphi中使用后,会对线程有影响,主要是对线程自动释放的影响,看下面的例子判断线程是否结束可以使用下面的方法if Assigned(TestThread) and (not TestThread.Finished) then //线程没有结束如果使用了EurekaLog再使用上面的方法将失效,TestThread将会是另外一个线程变量了,也就是Te

2016-11-15 11:42:37 956

原创 使用FireDAC打开SQLite数据库韩文、阿拉伯文出现乱码的处理方法

现象:使用FireDAC的TFDConnection连接SQLite数据库,DBGrid显示数据库表中的数据时,中文、英文可以正常显示,韩文、阿拉伯文都显示为问号。处理方法:在TFDConnection.ConnectionString连接字符串属性中增加  StringFormat=Unicode;

2016-11-14 15:54:50 939

原创 FireDAC Explorer列出数据库列表时出现错误 Exact fetch returned [6] rows, while [50] was requested

在使用FireDAC Explorer打开数据库,在点数据库下面的Tables节点时,出现错误:[FireDAC][Phys][SQLite]-312. Exact fetch returned [6] rows, while [50] was requested正常情况下应该是点Tables后在右侧列出所有的表。解决方法:使用记事本打开连接配置文件,一般配置文件在这里C:\users\p

2016-11-11 09:50:53 959

原创 使用notepad++ 将QQ号码批量转换成QQ邮箱的方法

目的:将文件中的QQ号一次转换成QQ邮箱,也就是在QQ号码后面添加上@qq.com。方法:首先使用notepad++打开包含QQ号码的文件,或者新建一个文件将QQ号码拷贝粘贴过来,然后Ctrl+H打开替换窗口,然后按下图操作。1、查找目录位置录入:([0-9].*)2、替换为录入:\[email protected]、查找模式选择:正则表达式4、最后按全部替换,会将当前打开的文件中的所

2016-11-07 10:59:51 1911

原创 Delphi 下的 NewXMLDocument 跟线程的冲突

发现一个奇怪的现象,当调用 NewXMLDocument 函数时,线程被阻塞,无法返回      xmlDoc := NewXMLDocument;   //当调试到这里的时候,无法运行到下一行代码      xmlDoc.LoadFromStream(AResponseContent);目前只了解到NewXMLDocument不能在线程中使用,还未找到在线程中使用的方法。

2016-11-04 11:45:44 968

原创 使用 Indy 的 TIdSMTP, TIdPOP3收发邮件在验证账户的时候出现错误乱码解决方法

现象:在使用TIdSMTP, TIdPOP3收发电子邮件时,第一步要验证,验证的时候出现错误,但错误信息是乱码,都是一些小方框,不知道是什么出错信息。原因:出错信息是中文的,采用的中文编码,但TIdSMTP, TIdPOP3是按英文来解析这些信息的,所以读出来的是乱码。解决方法:需要修改Indy的源码,下面三个文件需要修改,找到这三个文件后,将这三个文件跟当前工

2016-11-03 11:42:41 1562

原创 利用notepad++提取邮件地址的方法

notepad++可以使用正则式查找,使用正则式找到邮件地址后,再将不用的去掉就提取出邮件地址来了,具体方法如下图Ctrl+H打开替换窗口,查找目标录入:.*?([A-Z0-9][/\''A-Z0-9._%+-]*@[A-Z0-9.-]+\.[A-Z]{2,15}).*?$  替换为录入:\1左下角查找模式选择:正则表达式按右侧的“全部替换”,将提取文件中的所有邮件地址

2016-11-01 14:25:21 5444

原创 Delphi RTF文件转Txt函数

原理:借用TRichEdit组件,TRichEdit可以读取RTF文件并且显示出文本内容,将文本内容保存就可以了procedure RtfToText(rtfStrs, textStrs : TStrings);var rtfEditor : TRichEdit;begin  //rtf文本转换成txt文本  if Assigned(rtfStrs) and Assig

2016-10-26 10:21:11 1567

indy9 ssl使用的两个动态库 libeay32.dll,ssleay32.dll

delphi indy9使用ssl时要用openssl动态库,libeay32.dll,ssleay32.dll,但需要特殊编译的版本

2008-10-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除