Delphi

Delphi initialization和finalization

烂漫一生 提交于 2020-04-07 10:34:37
1 initialization和finalization 测试办法:启动一个控制台程序,因为一般的application有太多的单元引用,可能会造成一些调试上的麻烦 经过测试,大致结果可能是这样的 加载顺序与project及各单元的引用顺序有关 首先从project文件中加载第一个单元如A,在试图加载A的Initialization时,先查看A的uses部分,这里的uses不分 Interface部分还是implementation部分,只分先后顺序,当发现A有Uses单元时,比如依次引用了单元B和C,则在加载A的 Initialization前,先加载B(这里可以理解为将A压入堆栈,专门处理B),依次递归,假如在对B单元进行处理时,发现B引用了A,根据测试 结果,猜测是先到“堆栈”里看有没有A单元,如果有,就跳过A的这部分处理,如果没有,就把B压入堆栈,处理新的引用单元 或者说在初始化时,有一个假想的队列,开始是空的,项目加载时,把第一个单元放在队列头上, 然后,将第一个单元打开,依次取uses的单元,如果队列中没有这个单元名,就追加到队列尾部,如果队列中已经有了,就跳过这个单元,依次递归,最后,把 项目所有uses到的单元放到一个队列中,然后, Initialization的顺序是:从队列尾部倒推,依次执行各单元的initialization,

FastString Alternatives to Delphi XE2

我的未来我决定 提交于 2020-04-07 03:54:33
问题 When I asked this question a while ago, the FastString unit came to solve my problem. Now I am starting to migrate my software from D7 to XE2. My question is, what alternatives do I have now since it appears that FastString will no longer solve the problem? ...or, more optimistically, does Delphi itself solves this performance issues? 回答1: A Lot of the FastCode routines have been included in recent Delphi, so you might not need 3rd party libraries anymore. Try with the stock RTL/VCL, then see

delphi 调用百度识别

混江龙づ霸主 提交于 2020-04-07 02:19:48
虽然百度大家一直在骂,但是我发现其实百度有些东西还是可以用的。现在大家都搞人工智能了,我们Delphi也不可以落后。废话不多说,直接上代码 第一步,先获取AccessToken function GetAccessToken(const client_id, client_secret: string; HTTP: TNetHTTPClient;out access_token,expires_in,error:String):Boolean; var URL:String; cParam:TStringList; FJson:TJsonObject; S:string; begin URL:='https://aip.baidubce.com/oauth/2.0/token'; cParam:=TStringList.Create; cParam.Add('grant_type=client_credentials'); cParam.Add('client_id='+client_id); cParam.Add('client_secret='+client_secret); try s:=HTTP.Post(URL,cParam).ContentAsString; FJson:=TJSONObject.ParseJSONValue(s) as TJSONObject;

Delphi中initialization和finalization

风流意气都作罢 提交于 2020-04-06 21:00:43
好了,进入正题,首先说明initialization 和 finalization 在代码单元中的位置: ************************************************************ unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin ShowMessage('1 FormCreate'); end; procedure TForm1.FormDestroy(Sender:

【解惑】杨中科说给弟弟的话

百般思念 提交于 2020-04-06 09:01:43
【解惑】杨中科说给弟弟的话 刚才和我弟弟通电话聊了聊这一段时间的学习以及下一阶段的学习规划,我弟弟在读大二,是计算机专业,他也是如鹏网上一个比较活跃的会员。今天和他聊电话,感触颇多,倒不是因为我发现了新的东西,而是因为竟然连他都不相信我说过的一些我认为非常根本、非常核心的话,“连我的亲兄弟都不信我说的话,那些在如鹏网上随声附和我、捧我臭脚的同学右有几个真正信我说的话的同学呢?”,想到这里心里不禁一片悲凉。 到底他说的那句话触动了我呢,那就是“我现在C++语法学的差不多了,刚才买了一本C#的书,想寒假的时候看看C#,然后下学期C++、C#同步学。”我问他“你难道不知道我经常提醒‘不要在多门语言间徘徊,把一门语言玩熟了 其他语言都是纸老虎 ’吗?”,他说“知道, 但是看毕业找工作都是招C#、Java的,招C++的特别少 。”,我说“我说过多少次我自己的例子: 我大学大部分时间都是在搞Delphi,然后找工作前突击了半个月的Java,然后就拿到了Java工程师的Offer,而且还是笔试成绩第一名 (杨中科:我的大学生活) 。如果你现在什么语言都没有学,你说看C#挺好,以后想找C#的工作,那么我就建议你去学C#就好了,因为那样会‘一步到位’。但是你已经学C++半年了,刚把C++的基础语法学了一个大概,又要去学C#,那你就又浪费了半年时间,等半年以后也许你又发现Java挺不错

CRC-CCITT (0xFFFF) delphi实现

亡梦爱人 提交于 2020-04-04 18:08:07
由于要和java的服务沟通,最终确定要实现的是: width=16 poly=0x1021 init=0xffff refin=false refout=false xorout=0x0000 check=0x29b1 residue=0x0000 name="CRC-16/CCITT-FALSE" 网络找了很多,结果结果对不上 下载了工具,都不是想要的,最终找到校验在线网址: https://www.lammertbies.nl/comm/info/crc-calculation.html 实现代码: function CRC16_CCITT_0xFFFF(bytes: TBytes): Word; const polynomial = $1021; var crc: Word; I, J: Integer; b: Byte; bit, c15: Boolean; begin crc := $FFFF; // initial value for I := 0 to High(bytes) do begin b := bytes[I]; for J := 0 to 7 do begin bit := (((b shr (7-J)) and 1) = 1); c15 := (((crc shr 15) and 1) = 1); crc := crc shl 1; if (c15

Delphi 7连接MySql 5.5.15

给你一囗甜甜゛ 提交于 2020-04-04 08:05:30
原文:http://blog.csdn.net/akof1314/article/details/6822902/ 网上有很多关于Delphi连接MySql数据库的文章,在这里,我只记录下自己测试过的方法,以备所需。 系统环境:Windows XP SP3 软件环境:Delphi 7 、mysql-installer-5.5.15.0 1.ODBC方式 必须要先有MySql的ODBC驱动,我下载的是全安装版,包括MySql服务器、各种所支持的连接、工作台、示例数据库、文档,若是无ODBC驱动,可以到官网 http://dev.mysql.com/downloads/connector/odbc/ 下载。 ①数据源方式 首先,确认安装了MySql的ODBC驱动,打开“控制面板”→“管理工具”→“数据源”,切换到“驱动程序”页,查看“MySql ODBC 5.1 Driver",如下图所示: 切换到"系统DSN"→"添加"→"MySql ODBC 5.1 Driver",如下图所示: 弹出MySql数据源配置,数据源名称随意,TCP/IP Server为数据库地址,User用户名,Password密码,Database连接的数据库,点"Test"进行测试连接,如下图所示: 点击"OK"后,即可看到新增加了一个数据源。打开Delphi 7,在窗体上放置TADOConnection

DELPHI 使用dbexpress控件连接MySQL数据库方法

丶灬走出姿态 提交于 2020-04-04 08:04:42
1. 在窗体上放置4个控件: SQLConnection1,SimpleDataSet1,DataSource1,DBGrid (注意: 如果 出现"Operation not allowed on unidirectional dataset"错误提示原因如下:)。 在网上查到一篇文章如下: 错误描述: 当使用dbExpress控件操作数据库时,用到sqlconnection1、sqlquery1、datasource1和dbgrid1。按顺序连接,当将dbgrid的DataSource属性设为datasource1控件时发生错误:"Operation not allowed on unidirectional dataset"。 错误原因: 由于sqlquery控件是游标单向的,而dbgrid控件是双向的。两者不配合,所以产生以上的错误信息。(sqldataset、sqltable都是单向的) 所以dbgrid不能与单向的数据集连接。 解决办法: (1)换用SimpleDataSet; (2)使用SQLQuery+DataSetProvider+ClientDataSet+DataSource +DBGrid 2. 设置方法: SQLConnection1: SimpleDataSet1 (注意这个: 输入SQL语句后,Active属性要设成True, DBGrid

delphi 文件的操作

允我心安 提交于 2020-04-04 01:14:06
转载至: http://hi.baidu.com/endlesslove137/blog/item/86f1669990a7ed046f068ced.html //判断文件是否存在 FileExists //判断文件夹是否存在 DirectoryExists //删除文件 DeleteFile; Windows.DeleteFile //删除文件夹 RemoveDir; RemoveDirectory //获取当前文件夹 GetCurrentDir //设置当前文件夹 SetCurrentDir; ChDir; SetCurrentDirectory //获取指定驱动器的当前路径名 GetDir //文件改名 RenameFile //建立文件夹 CreateDir; CreateDirectory; ForceDirectories //删除空文件夹 RemoveDir; RemoveDirectory //建立新文件 FileCreate //获取当前文件的版本号 GetFileVersion //获取磁盘空间 DiskSize; DiskFree //搜索文件 FindFirst; FindNext; FindClose //读取与设置文件属性 FileGetAttr; FileSetAttr //获取文件的创建时间 FileAge; FileDateToDateTime /

Delphi对于文件的读写操作

假装没事ソ 提交于 2020-04-04 01:13:23
delphi文件操作 取文件名 ExtractFileName(FileName); 取文件扩展名: ExtractFileExt(filename); 取文件名,不带扩展名: 方法一: Function ExtractFileNameNoExt(FileString: String): String; Var FileWithExtString: String; FileExtString: String; LenExt: Integer; LenNameWithExt: Integer; Begin FileWithExtString := ExtractFileName(FileString); LenNameWithExt := Length(FileWithExtString); FileExtString := ExtractFileExt(FileString); LenExt := Length(FileExtString); If LenExt = 0 Then Begin Result := FileWithExtString; End Else Begin Result := Copy(FileWithExtString,1,(LenNameWithExt-LenExt)); End; End; 方法二: ChangeFileExt