ダブルバッファとリモート接続

提供: RAD Studio
移動先: 案内検索

コントロールの利用:インデックス への移動


推奨されるベスト プラクティスによれば、アプリケーションは、リモート デスクトップ接続を介して実行されているときはダブル バッファリングを使用してはいけません。これは、メモリ外のビットマップ全体をリモート デスクトップ接続を介して転送する必要があるためです。

そのため、RAD Studio 11.1 以降、TApplication には、アプリケーションがリモート接続またはローカル接続を介して実行されるときに、シングル バッファリングとダブル バッファリングを処理するための 2 つの新しいパブリック プロパティと新しいパブリック イベントが追加されました。

OnRemoteSessionChanged イベント ハンドラは、セッションがローカルからリモートへ、またはその逆に変更されたときに発生し、InRemoteSession var パラメータを通じて InRemoteSession を更新するデフォルトの動作をオーバーライドできます。

プロパティ InRemoteSession は、ブーリアンを返します。現在のセッションがリモート(つまり、RDP を介して実行中の場合)は True を、ローカルの場合には False を返します。このとき、OnRemoteSessionChanged イベント ハンドラがデフォルトの動作をオーバーライドしていないことを前提としています。

最後に、プロパティ SingleBufferingInRemoteSessions のデフォルト値は True で、これにより、テーマ付けされていないすべての VCL コントロールは、リモート セッションで実行されている場合、DoubleBuffered プロパティを無視します。False に設定されている場合、テーマ付けされていないコントロールは、リモート セッションでダブル バッファリングを使用し続けます。

開始時(Run 内で)、TApplication オブジェクトは現在のセッションがローカル セッションかリモート セッションかチェックします。 また、プログラム実行中に、セッションが、ローカルからリモートへ、またはその逆に変わると、通知を受けます。 セッション タイプが開始時に設定された場合と、実行時に変更された場合の動作は同じです:

  1. OnRemoteSessionChanged イベントは、新しいセッションの状態が var パラメータで渡されることで発生するため、ユーザーのコードでは、必要に応じて変更が通知されないようにすることができます。
  2. 変更がイベント ハンドラによって「非表示」になっていないなら、現在のセッションがリモートかどうかを示すよう InRemoteSession は設定されているため、ユーザー コードはこのプロパティを使用することができます。

InRemoteSessionSingleBufferingInRemoteSessions の両方が True の場合、VCL テーマなしコントロールは、DoubleBufferered プロパティを無視し、シンブル バッファリングを使用します。

テーマ付きコントロールでスタイル フックの場合、コードは、次が True と評価された場合にのみダブル バッファリングを使用します:

DoubleBuffered (InRemoteSession でも SingleBufferingInRemoteSessions でもなく)

つまり、ローカル セッションかリモート セッションで実行されているかにかかわらず、アプリケーション開発者がダブル バッファリングを望む場合、コントロールはダブル バッファリングを使用するよう設定されます。

関連項目