当使用HTTP PUT方法并且内容类型为application /
x-www-form-urlencoded时,THTTPClient不支持发送Body。当然了,对于HTTP来说,用Post也可以跳开这个Bug。想不想改代码,按你的个人意愿了。
下面是修正代码:
function THTTPClient.Put(const AURL: string; const ASource:
TStrings;
const AResponseContent: TStream = nil; const AEncoding:
TEncoding = nil;
const AHeaders: TNetHeaders = nil): IHTTPResponse;
var
LSourceStream: TStringStream;
LParams: string;
LEncoding: TEncoding;
I: Integer;
Pos: Integer;
LRequest: IHTTPRequest;
begin
LParams := '';
for I := 0 to ASource.Count - 1 do
begin
Pos := ASource[I].IndexOf('=');
if Pos > 0 then
LParams := LParams +
TNetE
发现在Delphi 10.1.2上,下面的代码生成的JSON串不对:
procedure TForm2.btn1Click(Sender: TObject);
var
jo:TJSONObject;
s:string;
begin
jo:=TJSONObject.Create;
jo.AddPair('test','');
s:=jo.ToJSON;
ShowMessage(s);
end;
换到Delphi 10.2.3下,则正常输出:
'{'test':''}'
查看代码,发现10.2.3是这样实现的:
function TJSONObject.AddPair(const Str: string; const Val:
string): TJSONObject;
begin
if (not Str.IsEmpty) then
AddPair(TJSONPair.Create(Str, Val));
Result := Self;
end;
而10.1.2是这样实现的:
function TJSONObject.AddPair(const Str: string; const Val:
string): TJSONObject;
begin
if (not Str.IsEmpty) and (not Val.IsEmpty) then
AddPair(TJSONPair.Create(Str, Val));
Result
随着Delphi 10.2.3的发布,随之带来更稳定、更完善的版本。今天借官方的例子,解读一下如何实现Http异步下载并显示下载进度。
使用的核心组件是THttpClient,首先建立一个THttpClient对象FClient,用他来执行下载任务。
procedure TFormDownloadDemo.FormCreate(Sender: TObject);
begin
FClient := THTTPClient.Create;
FClient.OnReceiveData := ReceiveDataEvent;
end;
我们看到,这里为FClient实现了OnReceiveData事件,目的用来显示下载进度,注意这个事件在异步执行Http下载时,是在线程中执行的。来看一下具体的实现代码:
procedure TFormDownloadDemo.ReceiveDataEvent(const Sender:
TObject; AContentLength, AReadCount: Int64;
var Abort: Boolean);
var
LTime: Cardinal;
LSpeed: Integer;
begin
LTime := TThread.GetTickCount -
FGlobalStart;//计算用时
LSpeed := (AReadCo
(2017-08-29 10:33)
ECharts已经发展到了3.7版本,对移动端做了大量的改进与适应。
http://echarts.baidu.com/
对于我们Delphi开发者来说,如何集成到自己的App中呢?说把大象关进冰箱,总共分几步?
http://www/uc/myshow/blog/misc/gif/E___6724EN00SIGG.gif
这个比关大象更简单,总共分两步:
第一步.按ECharts文档,写JS图表脚本。
第二步.写JS网页,用TWebBrowser显示。
这是一个完整的网页,要做的,就
Delphi 下的FireMonkey,很好地实现了
DirectUI与跨平台。学习了解他,对DirectUI编程及项目的跨平台实现有一定帮助。
虽然作为开发者个体,并不需要了解太多这些东西,只要求拿来能用能实现功能就行,但对
FireMonkey的学习分析,对自己程序设计思想的提升,会有一定帮助。
昨天用FireMonkey控件写了一个小例子,发现他的
Animation类在实现控件的小动画时,很高效,很灵活。
初步印象是
FireMonkey的内核有很多值得学习的地方,尤其他的界面渲染上,可以深入了解。鉴于都有代码,了解只是时间上的问题。
今天才开始认真地看了下
FireMonkey的代码。跟踪查看了他的程序启动的各个步骤。先初略整理一下。在了解框架之后,再逐步深入了解其他各方面。
FireMonkey跨平台实现:
FM为了考虑跨平台,使用了很多服务接口类,来转嫁各种服务任务处理。
应用程序管理接口 IFMXApplicationService
系统字体接口 IFMXSystemFontService
窗体创建接口 IFMXWindowService
系统菜单接口 IFMXMenuService
计时器接口 IFMXTimerService
鼠标拖曳
盒子中的souledge大侠发布了新的Socket库,以下为原文:
我之前写过一个iocp的框架,放到googlecode上了。
由于当时的delphi版本尚无法跨平台,所以该框架只能运行在Windows下。
现在Delphi的跨平台编译器基本已经成熟了,主流的操作系统基本都已支持,这是一个很好的契机,于是催生了我新的通讯框架的诞生,这个新的通讯框架就是Delphi
Cross Socket。
期间有很多朋友通过QQ或邮箱联系过我,希望我尽快发布新的框架源码,不过工作一直很忙,我也只能用闲暇时间整理,直到今天终于整理出了一份初稿,放到github上了。
希望能帮助到需要的人,也希望Delphi越来越好!
https://github.com/winddriver/Delphi-Cross-Socket
Delphi 跨平台 Socket 通讯库
作者: WiNDDRiVER(soulawing@gmail.com)
特性
针对不同平台使用不同的IO模型:
IOCP
Windows
KQUEUE
FreeBSD(MacOSX, iOS...)
Delphi Linux编译器已经发布,现在无需等待就可以使用Delphi构建Linux GUI应用程序!
您需要安装RAD Studio 10.2
tokyo,然后安装刚下载的试用版,由于它很小,所以安装安装非常快。运行Delphi并创建一个新的跨平台项目,在窗体上放一个按钮,并在“OnClick”事件代码中写一行代码,在Linux桌面上的在Form的标题中显示“Hello
World from Delphi”,保存所有内容,然后在Windows上可以运行,以确保项目正常运行;
FmxLinux试用版安装了实际的与IDE集成的Delphi FireMonkey for
Linux。如果现在右键单击项目管理器中的“Hello World”项目,您将看到上下文菜单有新增了:“Add Linux
Platform ”,点击它。
最后一步是在Linux桌面安装上部署和运行测试应用程序。我正在使用Mac和VMWare进行虚拟化。下载Ubuntu
16.04 Desktop ISO,并使用VMWare Fusion中的“Linux Easy Install”选项
(2016-07-24 14:26)
问题一:
在使用TTask的过程中,发现了问题,到QC上查,有人提出了,
地址在这里,官方已经Open。
具体来说,看提出者写的代码:
procedure TForm1.StartClick(Sender: TObject);
var I: Integer;
begin
for I := 1 to 25 do begin
TTask.Create(
procedure
begin
sleep(maxint);
end).start;
end;
label1.Text := 'Start';
TTask.Create(
procedure
begin
TThread.Synchronize(nil,
procedure
begin
&nb