AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden
Thema durchsuchen
Ansicht
Themen-Optionen

Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden

Ein Thema von mb.99 · begonnen am 4. Jun 2014 · letzter Beitrag vom 4. Jun 2014
Antwort Antwort
Seite 1 von 2  1 2      
mb.99

Registriert seit: 10. Dez 2011
23 Beiträge
 
#1

Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden

  Alt 4. Jun 2014, 12:33
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ß
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden

  Alt 4. Jun 2014, 12:55
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?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden

  Alt 4. Jun 2014, 13:02
U.U brauchst Du nur .Doublebufferd (und etwas Geduld um Deine Frage nochmals durch zu lesen)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
mb.99

Registriert seit: 10. Dez 2011
23 Beiträge
 
#4

AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden

  Alt 4. Jun 2014, 13:12
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden

  Alt 4. Jun 2014, 13:18
Ich mag mich irren, aber TCustomControl zeichnet AFAIK auf seinen eigenen Canvas, im Gegensatz zu TGraphicControl.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden

  Alt 4. Jun 2014, 13:21
Würde sagen, bissl viel Canvas?

Edit: TGraphicControl hat auch schon ein eigenes Canvas.

Geändert von Bjoerk ( 4. Jun 2014 um 13:26 Uhr)
  Mit Zitat antworten Zitat
mb.99

Registriert seit: 10. Dez 2011
23 Beiträge
 
#7

AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden

  Alt 4. Jun 2014, 13:35
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.
  Mit Zitat antworten Zitat
mb.99

Registriert seit: 10. Dez 2011
23 Beiträge
 
#8

AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden

  Alt 4. Jun 2014, 15:12
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden

  Alt 4. Jun 2014, 15:16
Hast Du den Vorschlag, DoubleBuffered der "Parentkomponente" auf true zu setzen, schon versucht?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Canvas soll nicht auf Parent.Canvas sondern Bitmap gezeichnet werden

  Alt 4. Jun 2014, 15:17
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz