4

我刚刚从 Delphi 10.4.2 升级到 Delphi 11 Alexandria。我经常使用 RDP,所以当 TPaintBox 无效时我注意到闪烁。奇怪的是,如果带有 TPaintBox 的表单是第一个创建的表单,它不会闪烁。如果在本地机器上运行,它也不会闪烁。仅在 RDP 中。如果我在 Delphi 10.4.2 中编译相同的项目,它不会在 RDP 中闪烁。

任何人都可以弄清楚这个吗?它“只是”Delphi 11 中的一个错误吗?

编辑:Demoproject http://procurisupdate.se/downloads/Temp/PaintBoxFlicker.zip

有两种形式的简单项目。一个有一个 TImage,所以它非常大。如果按原样运行,当您单击图片并移动鼠标时,它会闪烁。如果您更改为首先创建 Form23(或者即使它是在 Application.run 之前创建的),它也不会闪烁。请注意,它仅在 RDP 中闪烁。

Edit2:经过一番查看,我在 TApplication.Run 中找到以下内容:

procedure TApplication.Run;
begin
  FRunning := True;
  try
{$IF NOT DEFINED(CLR)}
    AddExitProc(DoneApplication);
{$ENDIF}
    RemoteSessionCheck; // This has been added since Delphi 10.4.2
    if FMainForm <> nil then
    ...

如果我注释掉 RemoteSessionCheck;并重新编译(您必须将您的 Source\vcl 目录添加到库路径)它不会闪烁。

4

2 回答 2

2

根据与 Embarcadero 的私人通信:

仅供参考:这个问题似乎与:

TRemoteSessionChangedEvent = procedure (Sender: TObject; var InRemoteSession) of object;

应该是:

TRemoteSessionChangedEvent = procedure (Sender: TObject; var InRemoteSession: Boolean) of object;

我们的Support团队追踪了这个问题;解释了为什么它不会影响自动创建的表单,以及这将如何搞砸C++无类型参数将显示为Variant)。

提交了一个错误票,但它只对他们的内部系统是私有的。

于 2021-09-22T16:26:19.640 回答
0

您可以检查该TApplication.SingleBufferingInRemoteSessions属性并将其设置为 False。

于 2021-12-09T14:45:53.953 回答