![]() |
Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden
Hallo,
um das Flackern des Canvas (KlasseA :TCosumControl) zu vermeiden möchte ich alles erst in ein PufferBitmap zeichnen, das Problem ist das KLasseA der Parent mehrerer anderer TCostumControlls(MouseClock... soll erhalten bleiben) ist die sich selbst auf die Canvas von KlasseA zeichnen. Wie löse ich das geschicktesten. Gruß |
AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden
TCosumControl; das Problem ist das KLasseA der Parent; TCostumControlls; MouseClock; ist die sich selbst auf die Canvas von KlasseA zeichnen. Sorry, aber wer soll das verstehen? :?
|
AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden
U.U brauchst Du nur
Delphi-Quellcode:
(und etwas Geduld um Deine Frage nochmals durch zu lesen)
.Doublebufferd
Gruß K-H |
AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden
Dann versuche ich es etwas genauer zu erklären:
KlasseA : TCostumControl; // Klasse A dient als Container für Objekte der KLasse B, KlasseA.Paint { - Hier wird der Hintergrund als Karo gezeichnet. } KlasseB : TCostumControl; // KlasseB stellt ein auf KlasseA bewegbares Objekt dar, es kann mit der Maus verschoben werden KlasseB.Paint { Hier wird ein farbiges Rectangle mit Text gezeichnet. } KlasseC : TForm // hier wird ein Objekt von KlasseA und eine dynamische Anzahl von KLasseB-Objekten erzeugt Da KLasseA der Parent von Objekten der KlasseB ist zeichnen die Objekte der Klasse B ihr Canvas auf das ParentCanvas. Ich möchte es aber wie bereits erwähnt in einer Bitmap zwischenspeichern um das Flackern zu vermeiden. |
AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden
Ich mag mich irren, aber TCustomControl zeichnet AFAIK auf seinen eigenen Canvas, im Gegensatz zu TGraphicControl.
|
AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden
Würde sagen, bissl viel Canvas?
Edit: TGraphicControl hat auch schon ein eigenes Canvas. |
AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden
In der Paintmethode zeichnet jeder ins eigene Canvas, ich gehe davon aus das in der Urklasse das eigene Canvas auf das Parent.Canvas gezeichnet wird, sonst würde man ja nur den Inhalt des Parent.Canvas sehen.
|
AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden
Ich habe es hinbekommen alles auf eine BitMap zu zeichnen, mit dem Flackern ist es jetzt vorbei,
dafür sind neue Probleme aufgetreten: Beim Verschieben der Objekte enstehen Frackmente und teilweiße wird der Hintergrund auf das Objekt gezeichnet. Am BitMap kann es definitiv nicht liegen, ich habe mir mit dem Befehl SaveToFile einige Screenshoots ausgeben lassen, auf denen alles einwandfrei aussah. Die Zeichenmethode wird im MouseMove aufgerufen: - DrawBackground - DrawObjects - BitMapToCanvas Habt ihr eine Ahnung woran das liegen könnte? |
AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden
Hast Du den Vorschlag, DoubleBuffered der "Parentkomponente" auf true zu setzen, schon versucht?
|
AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden
Es wurde doch schon gesagt:
KlasseC.DoubleBuffered := True; // Formular KlasseA.DoubleBuffered := True; // Hintergrund Damit kümmern sich die Sreuerelemente selbst um eine Bitmap, den ganzen Zeichenkram und alles was dazu gehört. Erst wenn das nicht funktioniert sollte man über eine eigene Lösung nachdenken. Die Artefakte entstehen vermutlich, weil du nicht alle notwendigen Bereiche neu zeichnest. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz