AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Flackern bei TCustomControl

Ein Thema von andyS91 · begonnen am 14. Okt 2010 · letzter Beitrag vom 19. Okt 2010
Antwort Antwort
andyS91

Registriert seit: 6. Sep 2009
2 Beiträge
 
#1

Flackern bei TCustomControl

  Alt 14. Okt 2010, 15:59
Hallo,
ich habe eine Funktions Plotter Klasse geschrieben, die autoamtisch ein Kooridnatensystem zeichnet und Dinge wie verschieben der Grafik und zoomen übernimmt. Abgeleitet ist die Klasse von TCustomControl.
Das Problem: Die Grafik flackert, wenn man mit der Maus darüber fährt oder ähnliches.
Das Formular auf Doublebuffered := True zu setzten brachte nichts deshalb hab ich einmal ausprobiert die Klasse von TImage statt von TCustomControl abzuleiten (TImage zeichnet sich ja bekanntlich von selbst neu) und siehe da das flackern verschwand - allerdings habe ich gehört das man eigene Grafikklassen nicht von TImage sondern immer nur von TCustomControl oder TGraphicControl ableiten soll.
Nun zu meinen Fragen:
1. Warum sollte man von TCustomControl statt von TImage ableiten und
2. Was macht TImage um das flackern zu vermeiden?
Danke für eure Hilfe,
Andy
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Flackern bei TCustomControl

  Alt 14. Okt 2010, 19:15
Hallo Andy und herzlich willkommen

Ich kann das jetzt noch nicht beantworten aber vielleicht hilft es, wenn Du mal Deine Delphi-Version nennst und etwas Quelltext zeigst.
Schreibst Du auf den Canvas des TImage?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#3

AW: Flackern bei TCustomControl

  Alt 14. Okt 2010, 22:21
Ein Bitmap ist mal eben schnell gezeichnet. Dein Funktionsplott braucht eine gewisse Zeit, weil du zwischendurch Berechnungen durchführst. Vor dem Zeichen wird der Hintergrund neu gezeichnet und der vorherige Plot ggf. entfernt, um danach den Plot wieder neu zu zeichnen. Das Problem hatte ich auch mal. Ich habe mir damit geholfen, daß ich ein TBitmap instanziert habe, in dieses Bitmap hineingezeichnet habe, und danach daß fertige Bitmap auf den original canvas kopiert habe.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

AW: Flackern bei TCustomControl

  Alt 15. Okt 2010, 00:52
..allerdings habe ich gehört das man eigene Grafikklassen nicht von TImage sondern immer nur von TCustomControl..
Wer hat denn das behauptet ? Nebeneffekte tauchen immer mal auf. Aber : die Custom-Dinger, bei denen muss SEHR viel selber gemacht werden. Am besten versucht man immer, die von der am besten/nächsten liegenden in Delphi vordefinierten Klasse abzuleiten. Und dann noch TCustomControl ? Viel tiefer gehts fast nicht mehr. Da muss so ziemlich ALLES neu gemacht werden. TImage ist jedenfalls vollständig und das Selbermachen (also Rad neu erfinden) entfällt mehr oder weniger.

Ich habe z.B. diverse Sachen. Spezielles TEdit, TDateTimePicker, TPanel und ich werde den Teufel tun, z.B. das eigene TEdit nicht von TEdit sondern von TCustomEdit abzuleiten. Guck dir das mal an (beim TEdit/TCustomEdit schön zu sehen). Das TEdit ist ziemlich "normal". Beim TCustomEdit werden offensichtlich etliche WinAPI Aufrufe eingeführt. Da steht z.B. viel mit "message". Bei mir im eigenen Source wird das kein einziges mal verwendet. Warum soll man die denn selber programmieren ? Ganz zu schweigen von der Zukunft. Mac/Linux etc. Compiler soll kommen. D.h. : WinAPI ist eventuell ungeeignet. Und jetzt ? Die Frage geht IMHO einzig und alleine an den, der Dir das gesagt hat. Frage den am besten mal, wo er seine OOP Kenntnisse her hat.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

AW: Flackern bei TCustomControl

  Alt 15. Okt 2010, 09:27
Guck dir das mal an (beim TEdit/TCustomEdit schön zu sehen). Das TEdit ist ziemlich "normal". Beim TCustomEdit werden offensichtlich etliche WinAPI Aufrufe eingeführt. Da steht z.B. viel mit "message". Bei mir im eigenen Source wird das kein einziges mal verwendet. Warum soll man die denn selber programmieren ?
*Boah nee eyh*. Der Grund, weshalb man von TCustomXXX ableitet, ist im Grunde folgender: in den meisten Fällen ist es so, dass TCustomXXX bereits (zumindest weitestgehend) fertig implementiert ist, die Properties aber nicht veröffentlicht wurden, sondern im Protected-Abschnitt deklariert sind. Das Sichtbarmachen geschieht dann in den Ableitungen, man kann also genau festlegen, was öffentlich sein soll und was nicht, und zwar in jeder Ableitung anders. In Delphi kann man Sichtbarkeiten zwar erhöhen, aber nicht verringern, so dass man u.U. Properties veröffentlicht hat, die man gar nicht will, wenn man nicht von TCustomXXX ableitet.
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
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#6

AW: Flackern bei TCustomControl

  Alt 15. Okt 2010, 12:20
Was man letzendlich für die Komponente verwendet, kommt meist auf den Einsatzfall an. Die besten Erfahrungen konnte ich bisher mit dem TCustomControl machen, hier sollte direkt im Create der Komponente DoubleBuffered auf True gesetzt und wie @bernau bereits erwähnte, für die Zeichenoperationen ein temporäres Bitmap genutzt werden. Verbesserungen bringen auch die Funktionen BitBlt, StretchBlt etc.

roga
Ronald

Geändert von roga (15. Okt 2010 um 12:24 Uhr)
  Mit Zitat antworten Zitat
andyS91

Registriert seit: 6. Sep 2009
2 Beiträge
 
#7

AW: Flackern bei TCustomControl

  Alt 19. Okt 2010, 23:18
Entschuldigung, dass ich mich erst jetzt wieder melde - hatte viel mit der Schule zu tun. Vielen Dank für eure Vorschläge. Das Zeichnen in ein TBitmap, dass dann auf einmal in das Canvas kopiert wird hat super geklappt. Warum Doublebuffered := True nichts gebracht hat versteh ich allerdings immer noch nicht so ganz. Eigentlich hätte das doch genau das machen müssen, oder? Wie auch immer - da es jetzt klappt bin ich fürs Erste zufrieden
Vielen Dank nochmal
MfG Andy
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:39 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