3

必要なもの

Firemonkey コンポーネントの DC を取得する必要がありますTCanvas。Firemonkey ではアクセスできない Win API 描画関数を使用するために、これが必要です。主に、フォント レンダリングを 100% 制御します。

明らかに、これは純粋な Windows アプリケーションであるため、OSX との互換性は問題になりません。

私がしたこと

TFormのハンドルを取得してHWNDに変換し、DCを取得しましたGetDC(FmxHandleToHWND(Handle));

これは、コントロールのOnPaintハンドラーです。Character_PaintBox

HWND hWND = FmxHandleToHWND(Handle);
HDC hDC = GetDC(hWND);
int x = PreviewBack_Rectangle->Position->X + Character_PaintBox->Position->X;
int y = PreviewBack_Rectangle->Position->Y + Character_PaintBox->Position->Y;

TextOut(hDC,x,y,L"Test",4);

ReleaseDC(hWND,hDC);

これがフォームのDCであり、私が書いたものは次の更新で上書きされます。

これは VCL では簡単な作業でしたが、Firemonkey ではそれほど複雑ではありませんか?

4

1 に答える 1

3

問題は、Firemonkey では、各コンポーネントに対して 1 つではなく、フォームに対して 1 つのデバイス コンテキストしかないことです。コンポーネントを再描画する必要がある場合、コンポーネントはフォーム キャンバスを通過しますが、クリッピングと座標がコンポーネントの場所にマップされます。すでにわかっているように、Windows では、そのコンテキストを取得していつでも描画できますが、ペイント メソッドで発生する通常の firemonkey ペイントと競合しています。

フォームに TImage を配置して、カスタム描画を行うことができます。Firemonkey は、フォームの描画が必要になると、画像を再描画し続けます。

MAC が不要だと言ったことは知っていますが、これを読んでいる他の人にとっては、OSX でグラフィックス コンテキストを取得して描画することはできません。したがって、画像メソッドが唯一の方法です。これはおそらく、Firemonkey が単一のコンテキストで動作する理由を説明しています。

于 2014-01-03T14:58:23.230 に答える