[问题函数]System.Net.HttpClient.Win.ReadHeader[影响版本]自有这个单元开始到10.4,包括打完最新的 patch3。[问题描述]WinHttpQueryHeaders 返回 LSize 如果等于 2,则 SetLength 得到的结果是将 Result 设置对应的字符串缓冲区被设置
标签: Delphi
[译]Delphi 10.4 新变化:定制拖管记录(结构)类型
原文链接 此文为简略翻译,更详细内容请访问原文。 现有的 Delphi 中的记录如果包含复杂类型,如接口、动态数组等初始化和记录的赋值都是由 Delphi 默认提供的过程完成的,10.4 允许用户定制这些操作,只要用户实现对应的函数就可以。 初始化函数, 重载类操作 Initialize 清理函数,重载类操作 Fina
[QMQTT]MQTT 协议的 Delphi 实现
QMQTT 实现是基于 MQTT 协议标准编写的 Delphi 客户端程序,不依赖于任何第三方的 DLL 或组件实现。它的主要特性如下: 完整支持 MQTT 3.1.1 协议版本(5.0版也将支持) 不依赖任何第三方组件(QDAC 内也只是依赖于 QString 单元) 支持主题的多重派发,也就是说同一个主题在程序中,
[教程] Delphi 中的自动引用计数使用规则
Delphi 用户应该早已经熟悉自动引用计数的概念(ARC),Delphi 很早就开始支持接口、动态数组和字符串的自动引用计数(DCC32、DCC64、DCCOSX),移动编译器则加入对类的自动引用计数支持,因此还加了入弱引用的概念,以管理循环引用。有个预编译条件指令 AUTOREFCOUNT 可以检测当前是否编译器
[QLang] 只需六个字,拥抱全世界- QLang 新版发售
QLang 新版为您带来 FMX 框架的多语言支持,让您拥有全新的体验,要进一步了解 QLang ,请下载 QLang3介绍(PDF 格式)) 在加入 FMX 的同时,QLang 产品的售价我们将做如下调整(本价格表自 2017-10-1 日起执行):注: 1、本价格自 2017 年 10 月 1 日(含 2017
[Delphi] YxdIOCP 之 MVC 简介
原文地址: http://www.cnblogs.com/yangyxd/articles/5993764.html YxdIocp: https://github.com/yangyxd/YxdIOCP 最近为 YxdIocp 开源库增加了这个轻量级的 MVC 支持。其实说是 MVC ,但由于现在还没
[译] Delphi/C++ Builder 官方全新产品路线图
原文:http://community.embarcadero.com/article/news/16418-product-roadmap-august-2016 二月份我们提供了我们产品的一份详细路线图表并且我们确定我们将每六个月更新一次路线图以便我们的众多客户了解接下来是什么。根据众多像您一样的客户要求,我们改为
[FMX] System.IOUtils.TPath 中的目录都是啥
Windows 下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Temp=C:\Users\[UserName]\AppData\Local\Temp\ Home=C:\Users\[UserName]\AppData\Roaming Documents=C:\Users\[UserName]\Documents SharedDocuments=C:\Users\Public\Documents Library=[App Path] Cache=C:\Users\[UserName]\AppData\Local Public=C:\ProgramData Picture=C:\Users\[UserName]\Pictures SharedPicture=C:\Users\Public\Pictures Camera=C:\Users\[UserName]\Pictures SharedCamera=C:\Users\Public\Pictures Music=C:\Users\[UserName]\Music SharedMusic=C:\Users\Public\Music Movies=C:\Users\[UserName]\Videos SharedMovies=C:\Users\Public\Videos Alarms=C:\Users\[UserName]\Music SharedAlarms=C:\Users\Public\Music Downloads=C:\Users\[UserName]\AppData\Local SharedDownloads=C:\ProgramData Ringtones=C:\Users\[UserName]\Music SharedRingtones=C:\Users\Public\Music |
Android 下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Temp=/storage/emulated/0/Android/data/[PackageName]/files/tmp Home=/data/user/0/[PackageName]/files Documents=/data/user/0/[PackageName]/files SharedDocuments=/storage/emulated/0/Documents Library=/data/app/[PackageName]-1/lib/arm Cache=/data/user/0/[PackageName]/cache Public=/storage/emulated/0/Android/data/[PackageName]/files Picture=/storage/emulated/0/Android/data/[PackageName]/files/Pictures SharedPicture=/storage/emulated/0/Pictures Camera=/storage/emulated/0/Android/data/[PackageName]/files/DCIM SharedCamera=/storage/emulated/0/DCIM Music=/storage/emulated/0/Android/data/[PackageName]/files/Music SharedMusic=/storage/emulated/0/Music Movies=/storage/emulated/0/Android/data/[PackageName]/files/Movies SharedMovies=/storage/emulated/0/Movies Alarms=/storage/emulated/0/Android/data/[PackageName]/files/Alarms SharedAlarms=/storage/emulated/0/Alarms Downloads=/storage/emulated/0/Android/data/[PackageName]/files/Download SharedDownloads=/storage/emulated/0/Download Ringtones=/storage/emulated/0/Android/data/[PackageName]/files/Ringtones SharedRingtones=/storage/emulated/0/Ringtones |
iOS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Temp=/private/var/mobile/Containers/Data/Application/[App GUID]/tmp Home=/private/var/mobile/Containers/Data/Application/[App GUID] Documents=/var/mobile/Containers/Data/Application/[App GUID]/Documents SharedDocuments= Library=/var/mobile/Containers/Data/Application/[App GUID]/Library Cache=/var/mobile/Containers/Data/Application/[App GUID]/Library/Caches Public= Picture= SharedPicture= Camera= SharedCamera= Music= SharedMusic= Movies= SharedMovies= Alarms= SharedAlarms= Downloads= SharedDownloads= Ringtones= SharedRingtones= |
[FMX] 写了一个Helper,为TCustomScrollBox的子类添加ScrollInView方法
因为要用到,所以特意添加了这么个方法,FMX 的 TCustomScrollBox 没有提供,或者是我没有找到正确的,所以特意加了一个。另外,针对 TControl 加了一个 LocalToParent 函数用于将指针的坐标转换为指定级别的父控件的坐标。 完整源码奉上,但声明下,我只测试了一部分我用到的情况,其它情况没
[杂谈] SDKTransform 试用笔记
SDKTransform 是 RadStudio 10 Berlin (后面称Berlin)里带的转换工具,可以将 iOS 或 OSX SDK 里的头文件转换为 Delphi 的接口文件。它是一个命令行工具,所以,需要你手动去在命令行下运行。 要使用它,你需要: 到 CLang 的官方去自行下载 CLang,然后安装,
[杂谈]Delphi/C++ Builder 10.1 柏林更新内容简译
原文太长,我就不全文翻译了,以意译为主。 1、安装程序更新 新的安装器让你快速安装基本的功能,然后通过 Feather Installer 来安装额外需要的功能,从而加快安装速度,减少不必要的带宽占用。 2、FireMonkey 更新 Android 6.0 支持 新增 TAddressBook 来访问联系人信息 St
[杂谈] 在应用中通过短信平台使用 REST 发送短信验证码
现在许多短信验证码平台都提供 REST 接口,而我们通过 REST 接口可以很方便的完成短信验证码的发送工具,如果没提供,那就不要继续看了。当然了,价格方面,各家平台各有优劣,就不做评论了。下面主要介绍的是一般的步骤: 注册短信平台账号。这是第一步,不用多说了。这一步你一般会得到自己的账号编码(Account SID)
【Delphi】GMT时间与TDateTime转换
说到GMT时间,人们天天都在用,但一般人不会被注意到。 在Http的世界里面,GMT无处不在,不信你抓包看看各种Header里面。 GMT是世界时间,在处理的时候需要处理当前的时区。 算了,我懒得多说,直接贴代码吧。吹吹牛,我这个可以高性能的哦~~~~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
const Convert: array[0..255] of Integer = ( -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 ); function PCharToIntDef(const S: PAnsichar; Len: Integer; def: Integer = 0): Integer; var I: Integer; v: Integer; begin Result := 0; for I := 0 to len-1 do begin V := Convert[ord(s[i])]; if V<0 then begin Result := def; Exit; end; result := (result * 10) + V; end; end; function LocalTimeZoneBias: Integer; {$IFDEF LINUX} var TV: TTimeval; TZ: TTimezone; begin gettimeofday(TV, TZ); Result := TZ.tz_minuteswest; end; {$ELSE} var TimeZoneInformation: TTimeZoneInformation; Bias: Longint; begin case GetTimeZoneInformation(TimeZoneInformation) of TIME_ZONE_ID_STANDARD: Bias := TimeZoneInformation.Bias + TimeZoneInformation.StandardBias; TIME_ZONE_ID_DAYLIGHT: Bias := TimeZoneInformation.Bias + ((TimeZoneInformation.DaylightBias div 60) * -100); else Bias := TimeZoneInformation.Bias; end; Result := Bias; end; {$ENDIF} var DLocalTimeZoneBias: Double = 0; function DateTimeToGMT(const DT: TDateTime): TDateTime; inline; begin Result := DT + DLocalTimeZoneBias; end; function GMTToDateTime(const DT: TDateTime): TDateTime; inline; begin Result := DT - DLocalTimeZoneBias; end; function DateTimeToGMTRFC822(const DateTime: TDateTime): string; const WEEK: array[1..7] of string = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); STR_ENGLISH_M: array[1..12] of string = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); var wWeek, wYear, wMonth, wDay, wHour, wMin, wSec, wMilliSec: Word; begin DecodeDateTime(DateTimeToGMT(DateTime), wYear, wMonth, wDay, wHour, wMin, wSec, wMilliSec); wWeek := DayOfWeek(DateTimeToGMT(DateTime)); Result := Format('%s, %.2d %s %.4d %.2d:%.2d:%.2d GMT', [WEEK[wWeek], wDay, STR_ENGLISH_M[wMonth], wYear, wHour, wMin, wSec]); end; function GMTRFC822ToDateTime(const pSour: AnsiString): TDateTime; function GetMonthDig(const Value: PAnsiChar): Integer; const STR_ENGLISH_M: array[1..12] of PAnsiChar = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); begin for Result := Low(STR_ENGLISH_M) to High(STR_ENGLISH_M) do begin if StrLIComp(Value, STR_ENGLISH_M[Result], 3) = 0 then Exit; end; Result := 0; end; var P1, P2, PMax: PAnsiChar; wDay, wMonth, wYear, wHour, wMinute, wSec: SmallInt; begin Result := 0; if Length(pSour) < 25 then Exit; P1 := Pointer(pSour); P2 := P1; PMax := P1 + Length(pSour); while (P1 < PMax) and (P1^ <> ',') do Inc(P1); Inc(P1); if (P1^ <> #32) and (P1 - P2 < 4) then Exit; Inc(P1); P2 := P1; while (P1 < PMax) and (P1^ <> #32) do Inc(P1); if (P1^ <> #32) then Exit; wDay := PCharToIntDef(P2, P1 - P2); if wDay = 0 then Exit; Inc(P1); P2 := P1; while (P1 < PMax) and (P1^ <> #32) do Inc(P1); if (P1^ <> #32) and (P1 - P2 < 3) then Exit; wMonth := GetMonthDig(P2); Inc(P1); P2 := P1; while (P1 < PMax) and (P1^ <> #32) do Inc(P1); if (P1^ <> #32) then Exit; wYear := PCharToIntDef(P2, P1 - P2); if wYear = 0 then Exit; Inc(P1); P2 := P1; while (P1 < PMax) and (P1^ <> ':') do Inc(P1); if (P1^ <> ':') then Exit; wHour := PCharToIntDef(P2, P1 - P2); if wHour = 0 then Exit; Inc(P1); P2 := P1; while (P1 < PMax) and (P1^ <> ':') do Inc(P1); if (P1^ <> ':') then Exit; wMinute := PCharToIntDef(P2, P1 - P2); if wMinute = 0 then Exit; Inc(P1); P2 := P1; while (P1 < PMax) and (P1^ <> #32) do Inc(P1); if (P1^ <> #32) then Exit; wSec := PCharToIntDef(P2, P1 - P2); if wSec = 0 then Exit; Result := GMTToDateTime(EnCodeDateTime(wYear, wMonth, wDay, wHour, wMinute, wSec, 0)); end; initialization DLocalTimeZoneBias := LocalTimeZoneBias / 1440; |
Delphi <-> C++ 基本语法对照表
一、标志符命名:两个基本一样,除了保留的关键字,C/C++区分大小写外,剩下的基本一样。一般来说你可以用Delphi的习惯,但注意大小写就好。 二、运算符: 数学运算符:+、-、*是一样的,除在C++里就是一个/,不分div和/,两个整数直接就是相当于div,任意一个是浮点数就是浮点数。 比较操作符:这个C/C++的不
Delphi调用C语言接口的几点小提示
1、对方给你DLL可能未声明正确的调用方式。一般来说接口都是stdcall或cdecl两种形式的,当然COM时有safecall,但COM对象一般直接导入,不需要自己手写,所以没啥问题。 2、将C语言的char/char *转换到Delphi时,一定要注意它对应的类型不能简单的理解为PChar,因为PChar的定义是有
C++ Builder中实现对Delphi匿名函数的支持
好吧,C++里没有匿名函数,看由Pas生成的HPP文件,你会发现它要你实现一个Interface,好在C++的类型声明是随时随地可以进行的,所以对应的实现步骤如下: 1、声明一个类,继承自TCppInterfacedObject<匿名函数类型>以实现匿名函数对应的接口,你愿意写成interface也无所谓,
Delphi中DB.PAS变迁概略
为了写QDB,我在群里收集了大家提供的从2007~XE7版的[Data.]DB.PAS文件,并进行一些对比,以试图找出它的变迁历史,我们以2007版(VER180,VER185)为基准,记录下变更的内容: 【RAD Studio 2009-VER200】 + TFieldType 新增以下类型: [crayon-601
Delphi下的字符串分隔函数的一种用法(摘抄)
下面的内容摘抄自盒子(http://bbs.2ccc.com/topic.asp?topicid=463028)中武稀松答 ivvn (奔腾的心)的问题。 如果你用XE3以上版本的Delphi,可以用下面的方式来分隔两个标签中的字符串。QString同时提供了一个类似的函数叫做StrBetweenW,但不同的是只取首个
YxdJson高性能JSON处理库简介
【简介】 YXDJson 采用 QJSON编解码内核,提供类似FastJson的对外使用接口,秉承QJson跨平台高性能的特性,支持D2007,XE6,支持Windows, Android等平台。YXDJson除了提供了QJson拥有的所有功能外,还支持DataSet高速序列化与反序列化。YXDJson还增加了Pars