Delphi 11 Alexandria PaintBox мерцает в RDP
Я только что обновился до Delphi 11 Alexandria с Delphi 10.4.2. Я часто использую 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 в путь к библиотеке), он работает без мерцания.
2 ответа
Вы можете проверить
TApplication.SingleBufferingInRemoteSessions
свойство и установите для него значение False.
Из личного сообщения с Embarcadero:
к сведению: эта проблема, похоже, связана с:
TRemoteSessionChangedEvent = procedure (Sender: TObject; var InRemoteSession) of object;
который должен был быть:
TRemoteSessionChangedEvent = procedure (Sender: TObject; var InRemoteSession: Boolean) of object;
Наш
Support
команда выследила проблему; объяснил, почему это не влияет на автоматически созданные формы и как это испортитC++
(где нетипизированный параметр будет представлен какVariant
).
Был подан билет об ошибке, но он является личным только для их внутренней системы.