2017-09-25 3 views
1

私はいつも非表示コンポーネントを書いています。それらの作成は非常に簡単で、VCLとFMXでも同様にうまく動作します。これまでのところとても良いですが、今は問題に直面しています。Delphiのビジュアルコンポーネント(キャンバスあり)

TRedistPreviewと呼ばれる私のコンポーネントは、本当にこのような手順を必要とするため、もはや私はTComponentを継承するために使用されるが、今私はできません:

procedure drawPreview(area: TCanvas); 

この手順は何か(図形、線や色)を描画するために持っているため、どこかでTRectangleの例です。私はTComponentに描画する能力がないので、私は何か他のものから継承するべきであることをオンラインで見てきました。私はTWinControl(それはVCLのみ)とTCustomControl(VCLのみ)を見つけました。

私はキャンバスを得るために何を継承すべきか教えてください。

TRedistPreview = class(TComponent) 
end; 

をして::

私は procedure drawPreview(area: TCanvas);を呼び出し、( TRectangleのような)面上に描画することができ
TRedistPreview = class(TSomeClassThatHasCanvas) 
end; 

私は意味、私は交換したいです。

私は、Canvasを使用して階層内で可能な限り低いクラスを探しています。


このコンポーネントは、WindowsとAndroidでは非常に便利なので、私はFiremonkeyの実装を探しています。私の研究から、私はFMX.Objectsの中にあるTRectangleから継承することができることを見ましたが、これが正しい選択かどうかはわかりません。

どうすればよいですか?

また、このコンポーネントがVCLに必要な場合は、別のクラスから継承する別のコンポーネントを記述する必要がありますか?

私が言ったように、これはビジュアルコンポーネントを書く初めてのことなので、誰かが私に正しい方法を教えてほしいです!

+0

TComponentから絶対に動かすこと。キャンバスにコンポーネントを描画するメソッドを実装できないという理由はまったくありません。もちろん、そのデザインは間違っているかもしれません。多分あなたは視覚的なコントロールが必要でしょう。おそらくあなたは間違ったことを求めています。 –

+1

はい、VCLとFMXは互いに互換性がありません。両方で動作する1つのコントロールを書くという意味ではありません。基本的にセミ・トラックからミニ・クーパーにディーゼル・エンジンを取り付けるようなものです。 –

+0

ジャンプスタートとして、この質問の私のコードのようなあらかじめ書いたものを見てみることができます:https://stackoverflow.com/questions/31767346/capturing-signature-very-sketchy-on-touch-screenそれを学び、あなた自身のことを実装してください。 –

答えて

2

VCLでは、キャンバスをサポートする最初のクラスは、TWinControlの子孫であるTCustomcontrolです。 http://docwiki.embarcadero.com/Libraries/Seattle/en/Vcl.Controls.TCustomControl

FMXでは、ペイントルーチンを許可する基本クラスはTControlです。

しかし、FireMonkeyでのビジュアルコンポーネントのレンダリングは、VCLとは大きく異なります。だから、FMXでVCLコードを再利用することを考えるなら、おそらくそれは可能ではないでしょう。

+0

これは実際には機能しませんでした。私はTControlをTComponentの代わりに父のクラスとして追加しましたが、上記の手順を使用してTCanvasにアクセスすることはできません... TControlから継承し、FMX.Graphics(TCanvasを持っています)を追加すれば十分でしょうか? –

+0

引数としてキャンバスを受け取る関数を実装するために、特にクラスから派生する必要はありません。 –

+0

@DavidHeffernan私はちょうどそれを得た。私はいつものようにTComponentから派生し、必要なもの、例えばFMX.Graphics(TCanvasの場合)をuses句に追加することに決めました。それは今まで働いています、私は何をすべきか理解していたと思います! –

関連する問題