我使用echostring和reversestring示例方法在Delphi XE8中使用向导创建了一个简单的DataSnap客户端/服务器应用程序.当我在服务器dpr中放入"ReportMemoryLeaksOnShutdown:= True"并从客户端调用echostring和/或reversestring方法时结果很好但是当我关闭服务器应用程序时(关闭客户端之后)我总是得到2个或更多的未知内存泄漏.这是一个我在互联网上找不到的已知错误,还是有解决方案?
服务器代码:
unit ServerMethodsUnit;
interface
uses System.SysUtils, System.Classes, System.Json,
Datasnap.DSServer, Datasnap.DSAuth, DataSnap.DSProviderDataModuleAdapter;
type
{$METHODINFO ON}
  TServerMethods = class(TDataModule)
  private
    { Private declarations }
  public
    { Public declarations }
    function EchoString(Value: string): string;
    function ReverseString(Value: string): string;
  end;
{$METHODINFO OFF}
implementation
{%CLASSGROUP 'FMX.Controls.TControl'}
{$R *.dfm}
uses System.StrUtils;
function TServerMethods.EchoString(Value: string): string;
begin
  Result := Value;
end;
function TServerMethods.ReverseString(Value: string): string;
begin
  Result := System.StrUtils.ReverseString(Value);
end;
end.
DFM
object ServerContainer: TServerContainer
  OldCreateOrder = False
  Height = 271
  Width = 415 …这是一个仅包含TEdit控件的示例VCL应用程序.

如果您编译类似的Firemonkey(FMX)应用程序,您会注意到:

(小L字母疯狂地跳来跳去)
在我的研究中,我发现这个 G +帖子导致:

如您所见,结果更好.
跳跃消失了.然而,TCircle的渲染效果并不理想.
经过一些研究后我发现使用 
 initialization GlobalUseDX := False;有更好的输出:

偶尔还会有一些"信件跳跃",但这是一个更好的结果.然而,小L'(黄色)后面似乎有一些背景颜色.
有没有人知道使用最新的Firemonkey实现类似ClearType的字体渲染的更好方法?
引用Delphi XE8帮助:
对于单字节和多字节字符串,Length返回字符串使用的字节数.UTF-8的示例:
Run Code Online (Sandbox Code Playgroud)Writeln(Length(Utf8String('1¢'))); // displays 3对于Unicode(WideString)字符串,Length返回字节数除以2.
这引起了一些重要问题:
在带有 TChromium (DCEF3) 的 Delphi XE7/XE8 中,我需要以编程方式将当前网页打印(即保存)到 PDF 文档文件(可选地无需用户交互)到预定义的本地路径。目前,我只能通过使用自定义 PDF 打印机驱动程序并以编程方式打开打印机对话框来间接执行此操作:
procedure TMainForm.btnPrintToPDF(Sender: TObject);
begin
  // open the printer dialog:
  crm.Browser.Host.Print;
end;
然而,这有两个缺点:
但Chrome有一个内置的PDF打印机驱动程序和打印预览,可以通过键盘快捷键CTRL+P显示。但是,当我在guiclient TChromium 演示应用程序中按 CTRL+P 时,什么也没有发生,也没有像 Chrome 中那样显示打印预览。
那么如何在 TChromium 中调用 PDF 打印预览,并可能使用预设输出路径(不显示文件对话框)?
如何将alignof运算符转换为Delphi?我需要翻译
#define INET_IS_ALIGNED(Pointer, Type) \
   (((ULONG_PTR)Pointer & (__builtin_alignof(Type)-1)) == 0)
我总是尝试禁用未使用的软件包以节省一些IDE内存.所以在XE8u1中我尝试通过在注册表中将"$(BDS)\ Bin\GetIt220.bpl"重命名为"_GetIt"来禁用GetIt(我从不使用它).之后GetIt按预期从工具中消失,但出现奇怪的问题:当我尝试调试x64应用程序时,我得到"断开连接的会话"窗口并且IDE挂起.x86调试按预期工作.所有其他包都启用为dafault.也许有人知道GetIt如何触及x64调试器?我很好奇.
我目前正在寻找一种方法来解决REST客户端的Mac实现中的明显内存泄漏问题.生成内存泄漏的代码如下(运行XE8,更新1):
program mac_REST_leak_test;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils, REST.Client, REST.Types, IPPeerClient;
var
   request : TRestRequest;
   ii, iMax : integer;
begin
   iMax := 1; 
   for ii := 0 to iMax do
   begin
      request := TRestRequest.Create(nil);
      // Fake Online REST API for Testing and Prototyping 
      request.Client := TRestClient.Create('http://jsonplaceholder.typicode.com/');
      request.Method := rmPOST;
      request.Execute();
      request.Client.Free();
      request.Free();
   end;
end.
这是演示泄漏的最小代码块.从本质上讲,我有一个同步服务,每隔一段时间就会发出一次REST请求.
当我在Windows上运行它时,使用MadExcept,没有发现泄漏.检查ProcessMonitor中的运行进程表明没有增加使用的内存量.
但是,在Mac上运行时,活动监视器会显示分配给应用程序的内存继续上升.此外,当使用Instruments运行时,似乎存在泄漏处理mac上的几个URL和HTTP类.
有人知道如何解决这个漏洞吗?
(顺便说一句,确切知道泄漏来自Mac的确切位置真的很有帮助,但列出的唯一Delphi类是TMethodImplementationIntercept.我相信这是因为Delphi没有生成一个适用于Mac的dSYM文件.如果有人知道解决方法,那也很棒!)
更新 
通过iMax从1到10 变化并比较FastMM4输出,似乎泄漏是在类中Macapi.ObjectiveC.TConvObjID.XForm.与1次迭代相比,10次迭代输出包含9次泄漏,其作为堆栈跟踪.我已将此报告给Embarcadero作为RSP-12242.
如何使用Move连接字符串数组.我试过这个,但我无法想象如何让Move操作正常工作.
program Project2;
{$POINTERMATH ON}
procedure Concat(var S: String; const A: Array of String);
var
  I, J: Integer;
  Len: Integer;
begin
  Len := 0;
  for I := 0 to High(A) do
  Len := Len + Length(A[I]);
  SetLength(S, Length(S) + Len);
  for I := 0 to High(A) do
  Move(PWideChar(A[I])[0], S[High(S)], Length(A[I]) * SizeOf(WideChar));
end;
var
  S: String;
begin
  S := 'test';
  Concat(S, ['test', 'test2', 'test3']);
end.
我在Delphi XE8中开发Firemonkey应用,发现如下情况:
我需要在一个小表单中显示一个小网页,其中只有一个 TWebBrowser 控件,Align:=Client 和 Form BorderStyle = None 但由于某种原因,在 Windows 中,表单显示为灰色,并且 TWebBrowser 未显示,如您在图片中看到的那样。在 Mac OS 中按预期工作。
如果我禁用了像 Minimize、Maximize 或 SystemMenu 这样的 BorderIcons 之一,也会发生这种情况。我已经尝试过 Delphi 10 和同样的问题。我曾尝试使用 TMS WebBrowser for Firemonkey (TMSFMXWebBrowser) 的试用版和同样的问题。
在 Win32 中使用 TWebBrowser 和 FormStyle = Single 的表单

在 Win32 中使用 TWebBrowser 和 FormStyle = None 的表单

在 Win32 中使用 TWebBrowser 和 FormStyle = Single 和 Maximize Button = False 的表单

在 Mac OS 中使用 TWebBrowser 和 FormStyle = Single 形成表单

有人知道原因以及我如何解决这个问题吗?我真的很想以一种没有任何边框/图标的形式显示网页,就像在 Mac OS 中一样。
我尝试使用 和 来创建TToolbar一个TActionList工具TSpeedbutton栏TImageList。
我使用了32px的方形图像,但是当我在TSpeedButton中通过ImageIndex选择图像时,图像大小小于32px,我认为是16px。
如何TSpeedButtons使用来设置图像的大小TImageList?
这是一个 MVCE:
unit Unit50;
interface
uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  System.Actions, FMX.ActnList, FMX.Controls.Presentation, FMX.StdCtrls,
  System.ImageList, FMX.ImgList;
type
  TForm50 = class(TForm)
    ActionList1: TActionList;
    ImageList1: TImageList;
    SpeedButton1: TSpeedButton;
    Action1: TAction;
  end;
var
  Form50: TForm50;
implementation
{$R *.fmx}
end.
设计制造:
object Form50: TForm50
  Left = 0
  Top = 0
  Caption = 'Form50'
  ClientHeight = 480
  ClientWidth = 640
  FormFactor.Width = …delphi ×10
delphi-xe8 ×10
firemonkey ×3
memory-leaks ×2
datasnap ×1
macos ×1
rest ×1
timagelist ×1