加载中…
个人资料
红鱼儿
红鱼儿
  • 博客等级:
  • 博客积分:0
  • 博客访问:4,344
  • 关注人气:241
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
博文
分类: Delphi10.2
当使用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

分类: Delphi10.2
发现在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

分类: Delphi10.2
随着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
分类: Delphi10.2
这是群友谢顿做的控件,必须赞一个!
https://github.com/zhaoyipeng/FMXComponents

这是loki的:
https://sourceforge.net/projects/alcinoe/

FGX-FireMonkey

音乐小白的FMXUI

国外朋友开源的ksComponents
标签:

delphi

分类: Delphi10.2
ECharts已经发展到了3.7版本,对移动端做了大量的改进与适应。http://echarts.baidu.com/
对于我们Delphi开发者来说,如何集成到自己的App中呢?说把大象关进冰箱,总共分几步?http://www/uc/myshow/blog/misc/gif/E___6724EN00SIGG.gif

这个比关大象更简单,总共分两步:
第一步.按ECharts文档,写JS图表脚本。
第二步.写JS网页,用TWebBrowser显示。

我们先看看如何写个入门的ECharts图表,还好,参考官方的5分钟入门教程,如下图:
这是一个完整的网页,要做的,就
标签:

delphi

分类: Delphi
Delphi 下的FireMonkey,很好地实现了 DirectUI与跨平台。学习了解他,对DirectUI编程及项目的跨平台实现有一定帮助。
虽然作为开发者个体,并不需要了解太多这些东西,只要求拿来能用能实现功能就行,但对 FireMonkey的学习分析,对自己程序设计思想的提升,会有一定帮助。
昨天用FireMonkey控件写了一个小例子,发现他的 Animation类在实现控件的小动画时,很高效,很灵活。
初步印象是 FireMonkey的内核有很多值得学习的地方,尤其他的界面渲染上,可以深入了解。鉴于都有代码,了解只是时间上的问题。
今天才开始认真地看了下 FireMonkey的代码。跟踪查看了他的程序启动的各个步骤。先初略整理一下。在了解框架之后,再逐步深入了解其他各方面。
FireMonkey跨平台实现:
FM为了考虑跨平台,使用了很多服务接口类,来转嫁各种服务任务处理。
应用程序管理接口 IFMXApplicationService
系统字体接口 IFMXSystemFontService
窗体创建接口 IFMXWindowService
系统菜单接口 IFMXMenuService
计时器接口 IFMXTimerService
鼠标拖曳
标签:

delphi

kbmmw

分类: Delphi
盒子中的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...)
分类: Delphi10.2
Delphi Linux编译器已经发布,现在无需等待就可以使用Delphi构建Linux GUI应用程序!

现在访问http://www.fmxlinux.com并取得唯一的,当前可用的下载FireMonkey for Linux,即“Free Trial v 0.92”。

您需要安装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”选项
分类: Delphi10.1
从官方博客中看到这种方法,具体地址:http://vivaitaocara.com.br/landersongomes/embarcadero/delphi/como-gerar-apk-android-delphi-sem-device-target

具体步骤:
1.Build 项目
http://s4/mw690/001gjF9lzy73vb8QJ2j03&690

2.发布项目
http://s14/mw690/001gjF9lzy73vbbGfeded&690
3.点下图中的按钮,就会生成apk.
标签:

it

分类: Delphi10.1
问题一
在使用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
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有