FMX.Graphics.TCanvas.BeginScene
Delphi
function BeginScene(AClipRects: PClipRects = nil; AContextHandle: THandle = 0): Boolean;
C++
bool __fastcall BeginScene(PClipRects AClipRects = (PClipRects)(0x0), NativeUInt AContextHandle = (NativeUInt)(0x0));
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
function | public | FMX.Graphics.pas FMX.Graphics.hpp |
FMX.Graphics | TCanvas |
説明
描画が開始されたことを TCanvas オブジェクトに通知します。
BeginScene を、TCanvas での描画の前に呼び出します。
描画セッションを終了するには、EndScene を呼び出します。
アプリケーションが BeginScene を呼出し、BeginScene が True を返した場合、アプリケーションは EndScene を呼び出さなければなりません。つまり、推奨される呼出しパターンは次のようになります:
if Canvas.BeginScene then try Canvas.xxx //drawing image operations ... finally Canvas.EndScene; end;
TCanvas オブジェクトが BeginScene を呼出し、BeginScene が True を返すたびに、BeginSceneCount プロパティの値は、1つ上がります。TCanvas オブジェクトが EndScene を呼出すたびに、BeginSceneCount プロパティの値は、1つ下がります。BeginScene は BeginSceneCount を使用して、TCanvas オブジェクトが一度に 1 つ以上初期化された描画を持たないよう、保証します。
ヒント: OnPaint イベント ハンドラで BeginScene を呼び出しても効果はない点に注意してください。これは、BeginScene が、OnPaint イベント ハンドラが実行される前に呼び出されるからです。 これにより、描画を有効にするために、余分な(そしておそらく想定していない)コードを記述しなくても、
描画が常に OnPaint で発生することが保証されます。
メモ:
TCanvas
およびすべてのサブクラスは、マルチスレッド環境をサポートしていますが、Canvas インスタンスの同時実行はサポートしていません。 これはつまり、Canvas が BeginScene
を呼び出した際、この BeginScene...EndScene
セクション内部のコードの実行は、他のキャンバスへの描画も含む、描画処理を試行するその他のスレッドをいずれもブロックすることを意味します。 BeginScene...EndScene
ブロックをは極力短く記述して、その他のスレッドのブロックを回避するようにします。