テキストをキャンバスにペイントすれば、何度も再ペイントしなくてもテキストが再描画/更新/それはイメージとして描かれ、一時的に描かれていないようです。Delphi - テキストをペイントして、画像を再ペイントした後に消えないようにします。
答えて
たとえば、TPaintBox
コントロールなどの話をしている場合は、ペイントする永続キャンバスはありません。システムは単にそのように設計されておらず、VCLコントロールは基礎となるWindowsフレームワークを反映しています。
- ペイントを最初オフスクリーンビットマップに次のよう
正常なアプローチです。
- システムが再描画を要求すると、オフスクリーンビットマップをスクリーンキャンバスに描画します。
このアプローチにつながるさまざまな理由があります。多くの場合、パフォーマンスが要因です。ペイントするのは高価な場合があり、画像をキャッシュすると助けになります。場合によってはペイントするために必要な情報が一時的なものになることがあり、出力を再度キャッシュすることが解決策になることがあります。
できません。ペインティングは、画面上の画像を1回だけ表示します。あなたがそれを維持したい場合は、は、OSが要求するたびにを書き直す必要があります。
TLabel(または何らかの派生品)を使用してキャンバス上に置きます。 TLabelは、必要に応じていつでも再描画されます。
Askerは、テキストをTCanvasに描画することを指しています。彼らがキャンバスを使ってラベルの代わりにテキストを描いているのは、実現可能な理由があるに違いありません。 –
システムがあなたに指示するときにのみ描画する必要があります。この主題と知っている2つのもの...
キャッシュ
あなたはまた、独自のキャッシュシステムを実装することができますがあります。これは、多くのレイヤーを扱うときにややこしいことになります。高い割合で変化すると予想される特定の領域があるかもしれません。そして、バックグラウンドは、サイズ変更されていないか、色が変わっていない限り、おそらく変更されません。 2つの異なる画像オブジェクトをバックグラウンドで維持し、それらを結合して、少なくとも上のものが透明であることを確認してください。
Invalidate
コマンドを使用して、コントロールのキャッシュが無効になったときに(次の件名...)Windowsに通知することもできます。これにより、コントロール内の何かがすべてを再描画する必要がある場所に変更されたことがWindowsに通知されます。 Paint
プロシージャを呼び出すことによって、実際にコントロールが再びペイントされるように指示する準備が整った時点で、Windowsが決定します。ダビデは彼の答えに言及したように、システムは、あなたがすべきと言うとき、あなたはあなたの背景を再描画する必要があり、コントロールで作業している場合、システムは、
ペイント
。これは、TGraphicControl
またはTCustomControl
(および他のもの)からPaint
手順を継承することによって達成されます。このプロシージャは、コントロールの内容をリフレッシュする必要があるとシステムが指示するたびに呼び出されます。これは、キャッシュが無効になったときにシステムに通知する方法です。一方
procedure Paint; override;
...
procedure TMyCustomControl.Paint;
begin
DoSomeDrawingOnCanvas;
end;
あなたはそれがあまりにもこのPaint
プロシージャをコールしたいときは、Windowsを伝えることができます...
procedure TMyCustomControl.SetWidth(const Value: Integer);
begin
if Value <> FWidth then begin //Just a common check for performance reasons
FWidth:= Value;
Invalidate; //This tells Windows that you want to repaint your control
end;
end;
- 1. C++/CLIでフルスクリーンに戻って画像を再ペイントすると、画像が再ペイントされます
- 2. bufferedimageを使用して画像を再ペイントする
- 3. 画像をPicturebox画像にペイントする
- 4. ペイント画像
- 5. JFrameを再描画しない方法は?ちょうどペイント
- 6. JavaFX Refreshing新しい場所で画像を再ペイントするには
- 7. 画像にライン/ペイントを描くには?
- 8. Java FlowLayoutが小さな画像をペイントします
- 9. JPanelを再ペイント
- 10. イベントを受け取った後にJFrameがペイントしない
- 11. 画像の上に矩形をペイントし、C#Webformに新しい画像を保存します
- 12. 画像にペイントする(UIImageView)ipadアプリケーション
- 13. QMenuのActionRectをペイントして画像を取得する
- 14. Javaペイント方法が点滅して消える
- 15. FillRectは、Delphi XE2で完全なTStringGridセルをペイントしません
- 16. drawImageを使用してJPanelで画像をペイント
- 17. BasicTabbedPaneUIペイントhtmlテキスト
- 18. JPanelのは、ペイントしない
- 19. Javaパネルでペイントしない
- 20. Delphi:リスト表示のペイント列
- 21. ラベルがパネルに表示されない(再ペイントして検証しようとした)
- 22. Jungのグラフを修正した後の再ペイントを無効にする
- 23. オブジェクトクラスが画面にペイントしていません
- 24. 他のPNGでPNG画像をペイント
- 25. AndroidペイントsetShadowLayer()はペイントの色を無視します
- 26. カイロ画像がGtkDrawingAreaにペイントされない
- 27. Datagridview Buttonペイント上に画像が表示されない列VBCOM
- 28. Androidのキャンバスにテキストをペイントする
- 29. ゲームJFrameは再ペイント後に空白のままです
- 30. drawPolyline()が正しくペイントしない
どのキャンバスに絵を描いているかによって異なります。カスタムコントロールで作業している場合は、1つの方法があります。しかし、あなたのフォームのキャンバスのようなもので作業しているなら、それは別の話です。 –