<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Hmillet的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Hmillet</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Hmillet]]></copyright><item><title><![CDATA[如何在Delphi中实现精确到微秒级的时钟]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/80039324</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/80039324</guid><author>Hmillet</author><pubDate>Sun, 22 Apr 2018 15:30:07 +0800</pubDate><description><![CDATA[  {A high-precision counter/timer. Retrieves time differences                 downto microsec. Quick Reference:                 THPCounter inherits from TComponent.                 Key-Methods:       ...]]></description><category></category></item><item><title><![CDATA[使用 Delphi Xe 的 TDictionary]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/79211420</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/79211420</guid><author>Hmillet</author><pubDate>Tue, 30 Jan 2018 22:04:07 +0800</pubDate><description><![CDATA[原本一直使用 TList， 将定义的一个个 Record 保存在TList 里面， 为了能把某些对象管理起来， 例如一个类的 n 多实例，可以进行索引、查找、释放等
今天刚看到原来已经有了一个叫 TDictionary 对象，用起来挺方便。 挺像我们在DB中定义的 Dictionary 表，Key、Value。  而那个不管Key、Value 都挺发达，允许各种定义的类。 
ok，下面官方De]]></description><category></category></item><item><title><![CDATA[delphi 弹出ado连接配置相关函数]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/79211331</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/79211331</guid><author>Hmillet</author><pubDate>Tue, 30 Jan 2018 21:57:55 +0800</pubDate><description><![CDATA[function PromptDataSource(ParentHandle: THandle; InitialString: WideString): WideString;

procedure CreateUDLFile(const FileName, ProviderName, DataSourceName: WideString);
function DataLinkDir: st]]></description><category></category></item><item><title><![CDATA[delphi 各种时间类型之间的转换函数]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78690806</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78690806</guid><author>Hmillet</author><pubDate>Fri, 01 Dec 2017 20:33:47 +0800</pubDate><description><![CDATA[各种时间类型之间的转换函数
DateTimeToFileDate函数：
定义：DateTimeToFileDate(DateTime: TDateTime): Integer;
作用： 将一个TDateTime类型的时间转化为Dos环境中的时间，Dos环境下对时间的访问方法和VCL中的TdateTime类型不一样，在进行文件操作时，为了保持时间的一致性，需要使用DateTimeToFileD]]></description><category></category></item><item><title><![CDATA[分布式系统唯一ID生成方案汇总]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78672227</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78672227</guid><author>Hmillet</author><pubDate>Thu, 30 Nov 2017 09:27:33 +0800</pubDate><description><![CDATA[分布式系统唯一ID生成方案汇总


系统唯一ID是我们在设计一个系统的时候常常会遇见的问题，也常常为这个问题而纠结。生成ID的方法有很多，适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个ID生成的策略。下面就介绍一些常见的ID生成策略。
1. 数据库自增长序列或字段
最常见的方式。利用数据库，全数据库唯一。
优点：
1）简单，代码方便，性能可以接受。
2）数字ID天]]></description><category></category></item><item><title><![CDATA[Delphi XE中String、ANSIString、TBytes之间的转换  一、string转为ansistring 1、直接赋值 （有警告） 2、ansistring()类型强制转换。（无警]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78672212</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78672212</guid><author>Hmillet</author><pubDate>Thu, 30 Nov 2017 09:25:31 +0800</pubDate><description><![CDATA[Delphi XE中String、ANSIString、TBytes之间的转换

一、string转为ansistring
1、直接赋值 （有警告）
2、ansistring()类型强制转换。（无警告）
二、ansistring 转为string
1、直接赋值 （有警告）
2、string()类型强制转换。（无警告）
三、string 转为Tbytes
1、bytes:= byt]]></description><category></category></item><item><title><![CDATA[delphi禁止webbrowser弹出窗口或者脚本错误]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78587016</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78587016</guid><author>Hmillet</author><pubDate>Mon, 20 Nov 2017 21:40:18 +0800</pubDate><description><![CDATA[delphi禁止webbrowser弹出窗口或者脚本错误

webbrowser1.silent:=true; //屏蔽脚本错误

procedure TForm1.WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool); 
begin 
Cancel:=True; //禁止]]></description><category></category></item><item><title><![CDATA[【转】解决Delphi WebBrowser 无法调用当前浏览器的版本 复制代码]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78586637</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78586637</guid><author>Hmillet</author><pubDate>Mon, 20 Nov 2017 21:02:41 +0800</pubDate><description><![CDATA[procedure TregedtIE.FormCreate(Sender: TObject);  
begin  
  WriteAppNameToReg;  
  WebBrowser1.Navigate('C:\a.html');  
end;  
{--}  
{需要注意是GetNativeSystemInfo 函数从Windows XP 开始才有， 
 而 IsWow64Process ]]></description><category></category></item><item><title><![CDATA[利用XE7的OmniXML完成XML文件的处理，支持跨平台]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78516728</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78516728</guid><author>Hmillet</author><pubDate>Mon, 13 Nov 2017 08:37:04 +0800</pubDate><description><![CDATA[OmniXML是XE7提供的新DOM，传说比ADOM还要快，实际操作确实如此，这次我们来做几个文件操作，
首先在控件页上加上TXMLDocument控件，然后给控件命名为XMLDoc，
修改DOMVendor属性为OmniXML即可完成，操作与原来一样，


另外还有MSXML和ADOM，MSXML只能在windows里面用，不能跨平台，就是说你的程序在Android或者iOS下可能出问]]></description><category></category></item><item><title><![CDATA[delphi中GetEnumName和GetEnumValue]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78337041</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78337041</guid><author>Hmillet</author><pubDate>Wed, 25 Oct 2017 09:03:25 +0800</pubDate><description><![CDATA[利用TypInfo单元的GetEnumName和GetEnumValue可以遍历任意枚举类型，并获取其名称和值。下面是示例Demo。 
procedure TForm1.btnTestClick(Sender: TObject);
var
  p: PTypeData;
  i: Integer;
  s: String;
  pt: PTypeInfo;
begin
  List]]></description><category></category></item><item><title><![CDATA[Delphi通过管道执行外部命令行程序（cmd）并获取返回结果]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78240717</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78240717</guid><author>Hmillet</author><pubDate>Sun, 15 Oct 2017 14:45:37 +0800</pubDate><description><![CDATA[//================================================================









//K8执行DOS并返回结果









function RunDosCommand(Command: string): string;









var



]]></description><category></category></item><item><title><![CDATA[基于Token的身份验证——JWT]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78204770</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78204770</guid><author>Hmillet</author><pubDate>Wed, 11 Oct 2017 16:00:27 +0800</pubDate><description><![CDATA[初次了解JWT，很基础，高手勿喷。
基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session。
JWT是啥？
JWT就是一个字符串，经过加密处理与校验处理的字符串，形式为：

A.B.C

A由JWT头部信息header加密得到
B由JWT用到的身份验证信息json数据加密得到
C由A和B加密得到，是校验部分
怎样生成A？
header]]></description><category></category></item><item><title><![CDATA[基于Token的WEB后台认证机制]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78204211</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78204211</guid><author>Hmillet</author><pubDate>Wed, 11 Oct 2017 15:28:08 +0800</pubDate><description><![CDATA[几种常用的认证机制
HTTP Basic Auth
HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password，简言之，Basic Auth是配合RESTful API 使用的最简单的认证方式，只需提供用户名密码即可，但由于有把用户名密码暴露给第三方客户端的风险，在生产环境下被使用的越来越少。因此，在开发对外开放的RESTful API时，尽量避]]></description><category></category></item><item><title><![CDATA[TMemoryStream、String与OleVariant互转]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78136857</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78136857</guid><author>Hmillet</author><pubDate>Fri, 29 Sep 2017 19:50:04 +0800</pubDate><description><![CDATA[TMemoryStream、String与OleVariant互转

////////////////////////////////////////////////////////////////////////////////
//功能: STRING 的内容流化到 OLEVARIANT 中
//参数：
////////////////////////////////////////]]></description><category></category></item><item><title><![CDATA[JSON 之 SuperObject(14): 从 XML 中解析]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78130154</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78130154</guid><author>Hmillet</author><pubDate>Fri, 29 Sep 2017 09:01:32 +0800</pubDate><description><![CDATA[JSON 之 SuperObject(14): 从 XML 中解析


SuperObject 文件包中还有一个 SuperXmlParser 单元, 可以从 XML 中解析出 ISuperObject.

SuperXmlParser 只有三个函数: XMLParseString、XMLParseStream、XMLParseFile, 分别从字符串、流、文件中解析.

遗憾的是对]]></description><category></category></item><item><title><![CDATA[Delphi DataSet和JSON互转函数]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78127977</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78127977</guid><author>Hmillet</author><pubDate>Thu, 28 Sep 2017 20:49:10 +0800</pubDate><description><![CDATA[一、DataSet转JSON


[delphi] 
view plain 
copy 
print?


//1）数据集转换为JSON字符串：  //需USES System.JSON;    function DataSetToJson(ADataset: TDataSet): string;  // [{"CityId":"18","CityName":"西安"},{"Ci]]></description><category></category></item><item><title><![CDATA[HTTP协议详解（真的很经典）]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78109194</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78109194</guid><author>Hmillet</author><pubDate>Wed, 27 Sep 2017 09:21:33 +0800</pubDate><description><![CDATA[Author :Jeffrey

引言

HTTP是一个属于应用层的面向对象的协议，由于其简捷、快速的方式，适用于分布式超媒体信息系统。它于1990年提出，经过几年的使用与发展，得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版，HTTP/1.1的规范化工作正在进行之中，而且HTTP-NG(Next
 Generation of HTTP)的建议已经提出。
HTTP协]]></description><category></category></item><item><title><![CDATA[Sending a URL to Another App on Android and iOS with Delphi XE5]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78104533</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78104533</guid><author>Hmillet</author><pubDate>Tue, 26 Sep 2017 17:11:26 +0800</pubDate><description><![CDATA[Here is the source code for my Open and View URL library from my 
CodeRage 8 session “Beyond the App”. Here is a download of the 
example app. I’ll see about posting it to a SVN repository too so it]]></description><category></category></item><item><title><![CDATA[使用 BinToHex() 把 TBytes 转换为十六进制字符串]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78044505</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78044505</guid><author>Hmillet</author><pubDate>Wed, 20 Sep 2017 19:29:15 +0800</pubDate><description><![CDATA[{函数}
function BytestoHexString(ABytes: TBytes; len: Integer): AnsiString;
begin
  SetLength(Result, len*2);
  BinToHex(@ABytes[0], PAnsiChar(Result), len);
end;

{测试}
procedure TForm1.FormCreate(Sende]]></description><category></category></item><item><title><![CDATA[Delphi下16进制位图数据转位图]]></title><link>https://blog.youkuaiyun.com/Hmillet/article/details/78044269</link><guid>https://blog.youkuaiyun.com/Hmillet/article/details/78044269</guid><author>Hmillet</author><pubDate>Wed, 20 Sep 2017 19:02:22 +0800</pubDate><description><![CDATA[如果我们在Form中拖入一个Image控件，并设置好picture后，Alt+F12就可以看到Form的源代码中已经将图片转成了16进制字符串，如下：


object Image1: TImage
    Left = 536
    Top = 24
    Width = 105
    Height = 105
    Picture.Data = {
      075442697]]></description><category></category></item></channel></rss>